Другими словами, этот пост состоит в том, чтобы настроить плагин Amazon VPC CNI для использования IAM ролей для учетных записей службы
- Плагин Amazon VPC CNI для Kubernetes является сетевым плагином для сетей POD в кластерах Amazon EKS. Плагин отвечает за выделение IP-адресов VPC в узлы Kubernetes и настроить необходимые сети для стручек на каждом узле. Плагин:
- Требуется разрешения IAM, предоставленные Управляемой политикой AWS
Amazoneks_cni_policy
, чтобы звонить в AWS API от вашего имени. - Создает и настроен на использование учетной записи службы с именем
AWS-NODE.
когда это развернуто. Счет службы связан с kubernetesКлостерроль
названAWS-NODE
, который присваивается необходимые разрешения Kubernetes.
- Требуется разрешения IAM, предоставленные Управляемой политикой AWS
Почему нам нужен сервисный счет отделен для AWS-Node Daemonset?
- Daemonset AWS-NODE настроен на использование роли, назначенной для экземпляров EC2 для присвоения IPS для PODS. Эта роль включает в себя несколько управляемых политик AWS, например, Amazoneks_cni_policy и EC2ContainerregistryReadonly, которые эффектно позволяют всем стручкам, работающим на узле, чтобы прикрепить/отсоединить ENIS, назначить/unassign IP-адреса или вытягивайте изображения из ECR. Поскольку это представляет риск вашего кластера, рекомендуется обновить Daemonset AWS-Node для использования IRSA.
Что в этом документе
- Создайте IRSA и прикрепить правильную политику
- Аннотируйте Службу услуг IRSA в AWS-NODE
- Перезапустите Daemonset AWS-Node, чтобы вступить в силу
- Заключение
🚀 Создайте IRSA и прикрепите правильную политику
Предварительный реквизит: Кластер EKS с OpenID Connect, IAM Identity Provider (Ref to Использование учетной записи службы IAM вместо профиля экземпляра для EKS PODS Для того, как)
Сначала создайте роль IAM, которая федерация IAM-провайдера IAM и предполагается
STS: Принесшийся доверенность
Затем прикрепите политику, чтобы обеспечить правильное разрешение на роль. Краткое из CDK-кода в Python3:IAM_OIC
Стопка создания IAM-провайдера идентичности, который используется OIDC в качестве провайдера,open_id_connect_provider_arn
это атрибут ARN из стека.
eks_cni_statement = iam.PolicyStatement( effect=iam.Effect.ALLOW, actions=[ "ec2:AssignPrivateIpAddresses", "ec2:AttachNetworkInterface", "ec2:CreateNetworkInterface", "ec2:DeleteNetworkInterface", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes", "ec2:DetachNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute", "ec2:UnassignPrivateIpAddresses", "ec2:CreateTags" ], resources=['*'], conditions={'StringEquals': {"aws:RequestedRegion": "ap-northeast-2"}} ) daemonset_role = iam.Role( self, 'DaemonsetIamRole', role_name='sel-eks-oic-daemonset-sa', assumed_by=iam.FederatedPrincipal( federated=f'arn:aws:iam::{env.account}:oidc-provider/{oidc_provider}', conditions={'StringEquals': string_like('kube-system', 'aws-node')}, assume_role_action='sts:AssumeRoleWithWebIdentity' ) ) daemonset_role.add_to_policy(eks_cni_statement)
🚀 Аннотировать ИРСА Учетная запись AWS-Node
ПРИМЕЧАНИЕ. Если вы используете дополнение Amazon EKS, с помощью кластеров Amazon Exs Amazon, нам просто нужно добавить дополнение Amazon VPC CNI Amazon EKS с ролью, которую мы выбираем или по умолчанию
AWS-NODE.
Важная заметка; VPC CNI также предоставляется в качестве управляемого дополнения, однако я не большой поклонник этого конкретного компонента, который будет управляться AWS. Я бы предложил вам просто развернуть собственную конфигурацию VPC CNI (формата YAML) с использованием потока. Таким образом, вы останетесь в контроле над тем, что на самом деле развернут. С этим было много вопросов, и я не буду рекомендовать перемещать это, чтобы быть управляемым дополнением. Так что вручную Настройка плагина Amazon VPC CNI для использования IAM ролей для учетных записей службы
Если версия CNI позже 1,6 вы можете пропустить следующий шаг применения CNI V1.7
kubectl describe daemonset aws-node --namespace kube-system | grep Image | cut -d "/" -f 2
- Скачать
AWS-K8S-CNI.YAML
на пользовательскую роль IAM (необязательно), а затем примените его
kubectl apply -f https://raw.githubusercontent.com/aws/amazon-vpc-cni-k8s/release-1.7/config/v1.7/aws-k8s-cni.yaml
- Аннотируйте Службу услуг IRSA в AWS-NODE
$ kubectl annotate serviceaccount -n kube-system aws-node eks.amazonaws.com/role-arn=arn:aws:iam::123456789012:role/sel-eks-oic-daemonset-sa
🚀 Перезапустите Daemonset AWS-Node, чтобы вступить в силу
- Развертывание перезапуска
AWS-NODE
Daemonset.
$ kubectl rollout restart daemonset aws-node -n kube-system $ kubectl get pod -n kube-system | grep aws-node aws-node-bnb8v 0/1 Running 0 16s
- Проверьте
AWS-NODE
ENV, чтобы подтвердить EKS POD Identity Webhook MusateAWS-NODE
стручки с сервоприводом
$ kubectl exec aws-node-qct7x -n kube-system -- env |grep "AWS_ROLE\|AWS_REG" AWS_REGION=ap-northeast-2 AWS_ROLE_ARN=arn:aws:iam::123456789012:role/sel-eks-oic-daemonset-sa
🚀 вывод
- Это просто небольшие шаги в области EKS K8S Securities
- Читать Использование учетной записи службы IAM вместо профиля экземпляра для EKS PODS Чтобы лучше понять о IRSA
🌠 Блог · Github · Stackoverflow · LinkedIn · Группа · Страница · Twitter 🌠.
Оригинал: «https://dev.to/vumdao/iam-service-account-for-aws-node-daemonset-1p5j»