Эй, ребята, в этом посте мы посмотрим, как вы можете использовать Kyverno Чтобы обеспечить поддержку некоторыми лучшими практиками для вашего Екс кластер. Для тех, которые не знакомы, Kyverno — это нативная политика Kubernetes, который стремится сделать вашу жизнь легкой при управлении кластерами. Чтобы узнать больше, вы можете прочитать мой Предыдущий пост На Киверно, где мы подробно обсудим проект и его внутренние органы. С этим с пути, давайте начнем!
Лучшие практики EKS рекомендуют использовать отдельные IAM роли для разных случаев использования. Например, для среды dev и prod вы должны предпочевать отдельные роли IAM, которые могут настроить объекты в этих условиях. Теперь проблема, которая возникает с этим, заключается в том, как вы убедитесь, что роль IAM, которая имеет разрешение на окружающую среду Dev не случайно создает объекты в производственной среде? Если у вас есть роли, настроенные правильно, это, очевидно, не позволит это произойти, но с Kyverno не только вы можете обмануть это, но и убедитесь, что если кто-то попробует это, то это сообщается.
Мы собираемся написать политику для Kyverno, чтобы проверить, создается ли объект в пространстве имен (dev или prod), имеет правильную роль IAM, указанную в ее аннотациях или нет. Так что давайте начнем!
Установка Kyverno.
Самый простой способ установить Kyverno на ваш кластер под управлением:
kubectl create -f https://raw.githubusercontent.com/kyverno/kyverno/main/definitions/release/install.yaml
Если вы посетите Kyverno Документация Вы увидите способы установить его, используя руль и способы настроить установку Kyverno.
Создание конфигурации
Прежде чем мы создадим фактическую политику Kyverno, давайте сначала создадим карту конфигурации, которая будет хранить роли IAM для среды DEV и PROD. Это можно сделать очень просто использовать:
kind: ConfigMap apiVersion: v1 metadata: name: ns-roles-dictionary namespace: kyverno data: prod: "arn:aws:iam::123456789012:role/prod" dev: "arn:aws:iam::123456789012:role/dev"
Создание политики в Киверно
Теперь на веселую часть — создание нашей политики в Киверно. Давайте сначаем сначала посмотрите на файл политики YAML, а затем я пойду на вас через него. Если это ваш первый раз, увидев политику в Киверно, вообще не волнуйтесь, потому что одна из самых красивых вещей о Kyverno — это то, насколько это интуитивно. Это следует очень похожую структуру для файлов YAML для объектов Kubernetes.
apiVersion: kyverno.io/v1 kind: ClusterPolicy metadata: name: deployment-valid-role annotations: policies.kyverno.io/category: Security policies.kyverno.io/description: Rules to enforce valid roles, based on namespace-role dictionary spec: validationFailureAction: enforce rules: - name: validate-role-annotation context: - name: ns-roles-dictionary configMap: name: ns-roles-dictionary namespace: kyverno match: resources: kinds: - Deployment preconditions: - key: "{{ request.object.metadata.namespace }}" operator: In value: ["prod", "dev"] - key: "{{ request.object.spec.template.metadata.annotations.\"iam.amazonaws.com/role\" }}" operator: NotEqual value: "" validate: message: "Annotation iam.amazonaws.com/role \"{{ request.object.spec.template.metadata.annotations.\"iam.amazonaws.com/role\" }}\" is not allowed for the \"{{ request.object.metadata.namespace }}\" namespace." deny: conditions: - key: "{{ request.object.spec.template.metadata.annotations.\"iam.amazonaws.com/role\" }}" operator: NotIn value: "{{ \"ns-roles-dictionary\".data.\"{{ request.object.metadata.namespace }}\" }}"
Не так страшно, как вы ожидали, верно? Давайте пройдемся через его линию по линии сейчас:)
Давайте начнем со спецификации Section, так как все до этого — все стандартные материалы для котельной. Первое, что в разделе SPECT — ВалидацияФалиураация
который мы установили на принуждать
. Что это делает, указывается, что должно произойти, если эта политика нарушается объектом. Установка его в принуждать
Убедится, что объект, который нарушает эту политику, не создает, тогда как настроил его на Аудит
позволит объекту создать, но сообщите об нарушении.
Каждая политика Kyverno должна иметь хотя бы одно правило, которое является то, что мы определяем дальше. После указания названия правила мы указываем configmap
Мы создали ранее. Это сделано с использованием контекст
ключ. Мы делаем это, потому что это позволяет нам легко обратиться к значениям из этого configmap
В нашей политике Kyerno, как вы увидите позже.
Далее мы указываем объекты Kubernetes, которые мы хотим, чтобы эта политика действовала под Ресурсы
ключ. Kyverno предлагает здесь много контроля. Например, вы можете выбрать развертывание, но добавить исключенный блок, который бы сказал Kyverno не включать некоторые определенные развертывания. Довольно круто верно?
match: resources: kinds: - Deployment exclude: clusterroles: - cluster-admin
В этом примере совпадает с всеми развертываниями, исключающими те, которые создаются, используя кластер-админ-админ.
После указания каких ресурсов мы хотим, чтобы политика действовать, мы указываем некоторые Предварительные условия
Отказ Подумайте о них как о пользовательских фильтрах, которые дают вам больше контроля, когда политика должна быть применена на объектах Kubernetes, которые вы выбираете, используя совпадение и исключать блоки. Первое предварительное условие просто утверждает, что политика не должна применяться, если развертывание создается в пространстве имен, кроме дев
или продлицо
. И вторым предварительным условием говорится, что если объект развертывания просто не имеет аннотации, упоминающую роль IAM, то также политика не должна применяться. Вы можете удалить это второе предварительное условие на основе вашего конкретного случая использования.
После того, как у нас будет тонкий контроль за тому, какие объекты этой политики будут применяться к, мы указываем, что должна сделать политика. Кьяверно Политики могут Мутата, проверка или генерировать Кубернаные объекты. Эта политика собирается проверить роли IAM, поэтому мы указываем проверить
блокировать. В сообщение
Клавиша, которую мы указываем, какое сообщение должно быть показано на случай, если объект нарушает политику. Следующие строки политики просто говорят, что запрос должен быть отклонен, если ключ
нет в ценить
, То есть если значение аннотации «IAM.AMAZONAWS/ROLE» в выбранном развертывании не соответствует правильному значению пространства имен, присутствующего на нашей карте конфигурации.
И это это. Да, это просто создать политики в Киверно! Я надеюсь, что этот пост смог показать вам, насколько это мощно, но легко использовать Kyverno. Если вы заинтересованы в том, чтобы узнать больше, проверьте Kyverno Документация Отказ Если у вас есть какие-либо сомнения или обратная связь, не стесняйтесь присоединиться к каналу #kyverno на Cubernetes Slass, чтобы поговорить с сопровождающими и другими членами сообщества!
Спасибо за прочтение:)
Если вы заинтересованы в подобном уроке, но для GKE, вы можете проверить Это Почта.
Оригинал: «https://dev.to/rinkiyakedad/using-kyverno-to-enforce-eks-best-practices-cad»