Amazon EKS 노드 IAM 역할 - Amazon EKS

Amazon EKS 노드 IAM 역할

Amazon EKS 노드 kubelet 데몬은 사용자를 대신하여 AWS API를 호출합니다. 노드는 IAM 인스턴스 프로파일 및 연결 정책을 통해 이 API 호출에 대한 권한을 수신합니다. 노드를 시작해 클러스터에 등록하려면 시작할 때 노드에서 사용할 IAM 역할을 생성해야 합니다. 이 요구 사항은 Amazon이 제공하는 Amazon EKS 최적화 AMI 또는 사용하려는 다른 노드 AMI를 사용하여 시작된 노드에 적용됩니다. 또한 이 요구 사항은 관리형 노드 그룹과 자체 관리형 노드 모두에 적용됩니다.

참고

클러스터를 생성하는 데 사용된 것과 동일한 역할을 사용할 수 없습니다.

노드를 생성하려면 먼저 다음 권한을 사용하여 IAM 역할을 생성해야 합니다.

  • AmazonEKSWorkerNodePolicy 정책에서 제공하는 것과 같이 VPC의 Amazon EC2 리소스를 설명할 수 있는 kubelet 권한. 이 정책은 Amazon EKS Pod Identity Agent에 대한 권한도 제공합니다.

  • Amazon Elastic Container Registry(Amazon ECR)의 컨테이너 이미지를 사용할 수 있는 kubelet 권한(AmazonEC2ContainerRegistryReadOnly 정책에서 제공하는 권한). 네트워킹용 내장 애드온이 Amazon ECR의 컨테이너 이미지를 사용하는 포드를 실행하기 때문에 Amazon Elastic Container Registry(Amazon ECR)의 컨테이너 이미지를 사용할 수 있는 권한이 필요합니다.

  • (선택 사항) Amazon EKS Pod Identity Agent에서 eks-auth:AssumeRoleForPodIdentity 작업을 사용하여 포드에 대한 보안 인증 정보를 검색할 수 있는 권한. AmazonEKSWorkerNodePolicy를 사용하지 않는 경우 EKS Pod Identity를 사용할 수 있는 EC2 권한 외에도 이 권한을 제공해야 합니다.

  • (선택 사항) IRSA 또는 EKS Pod Identity를 사용하여 VPC CNI 포드에 권한을 부여하지 않는 경우 인스턴스 역할에서 VPC CNI에 대한 권한을 제공해야 합니다. AmazonEKS_CNI_Policy 관리형 정책(IPv4 제품군으로 클러스터를 생성하는 경우) 또는 사용자가 생성한 IPv6 정책(IPv6 제품군으로 클러스터를 생성하는 경우)을 사용할 수 있습니다. 그러나 이 역할에 정책을 연결하는 대신 Amazon VPC CNI 추가 기능에 특별히 사용되는 별도의 역할에 정책을 연결하는 것이 좋습니다. Amazon VPC CNI 추가 기능에 대한 별도의 역할 생성에 대한 자세한 내용은 서비스 계정용 IAM 역할(IRSA)을 사용하도록 Amazon VPC CNI plugin for Kubernetes 구성 섹션을 참조하세요.

참고

2023년 10월 3일 이전에는 각 관리형 노드 그룹의 IAM 역할에 AmazonEKSWorkerNodePolicy와(과) AmazonEC2ContainerRegistryReadOnly이(가) 필요했습니다.

Amazon EC2 노드 그룹에는 Fargate 프로파일과 다른 IAM 역할이 있어야 합니다. 자세한 내용은 Amazon EKS Pod 실행 IAM 역할 섹션을 참조하세요.

기존 노드 역할 확인

다음 절차를 사용하여 계정에 이미 Amazon EKS 노드 역할이 있는지 확인할 수 있습니다.

IAM 콘솔에서 eksNodeRole을 확인하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 역할(Roles)을 선택합니다.

  3. 역할 목록에서 eksNodeRole, AmazonEKSNodeRole 또는 NodeInstanceRole을 검색합니다. 이러한 이름 중 하나를 가진 역할이 없으면 Amazon EKS 노드 IAM 역할 생성 섹션을 참조하여 역할을 만듭니다. eksNodeRole, AmazonEKSNodeRole 또는 NodeInstanceRole을 포함하는 역할이 존재하는 경우 역할을 선택하여 연결된 정책을 확인합니다.

  4. 권한을 선택합니다.

  5. [AmazonEKSWorkerNodePolicy][AmazonEC2ContainerRegistryReadOnly] 관리형 정책이 역할에 연결되어 있는지 또는 사용자 지정 정책이 최소 권한으로 연결되어 있는지 확인합니다.

    참고

    AmazonEKS_CNI_Policy 정책이 역할에 연결되어 있는 경우 해당 역할을 제거하고 대신 aws-node Kubernetes 서비스 계정에 매핑된 IAM 역할에 연결하는 것이 좋습니다. 자세한 내용은 서비스 계정용 IAM 역할(IRSA)을 사용하도록 Amazon VPC CNI plugin for Kubernetes 구성 섹션을 참조하세요.

  6. 신뢰 관계(Trust relationships)를 선택한 후 신뢰 정책 편집(Edit trust policy)을 선택합니다.

  7. 신뢰 관계에 다음 정책이 포함되어 있는지 확인합니다. 신뢰 관계가 다음 정책과 일치하는 경우, 취소(Cancel)를 선택합니다. 신뢰 관계가 일치하지 않는 경우 정책을 정책 문서(Policy Document) 창에 복사하고 신뢰 정책 업데이트(Update Trust Policy)를 선택합니다.

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Amazon EKS 노드 IAM 역할 생성

AWS Management Console 또는 AWS CLI를 사용하여 노드 IAM 역할을 생성할 수 있습니다.

AWS Management Console
IAM 콘솔에서 Amazon EKS 노드 역할을 생성하려면
  1. https://console.aws.amazon.com/iam/에서 IAM 콘솔을 엽니다.

  2. 왼쪽 탐색 창에서 역할(Roles)을 선택합니다.

  3. 역할(Roles) 페이지에서 역할 생성(Create role)을 선택합니다.

  4. 신뢰할 수 있는 엔터티 선택(Select trusted entity) 페이지에서 다음을 수행합니다.

    1. 신뢰할 수 있는 엔터티 유형(Trusted entity type) 섹션에서 AWS 서비스를 선택합니다.

    2. 사용 사례(Use case)에서 EC2를 선택합니다.

    3. 다음을 선택합니다.

  5. 권한 추가 페이지에서 사용자 지정 정책을 연결하거나 다음과 같이 합니다.

    1. 필터 정책(Filter policies) 상자에 AmazonEKSWorkerNodePolicy를 입력합니다.

    2. 검색 결과의 AmazonEKSWorkerNodePolicy 왼쪽에 있는 확인란을 선택합니다.

    3. 필터 지우기(Clear filters)를 선택합니다.

    4. 필터 정책(Filter policies) 상자에 AmazonEC2ContainerRegistryReadOnly를 입력합니다.

    5. 검색 결과의 AmazonEC2ContainerRegistryReadOnly 왼쪽에 있는 확인란을 선택합니다.

      생성하는 AmazonEKS_CNI_Policy 관리형 정책이나 IPv6 정책은 또한 이 역할 또는 aws-node Kubernetes 서비스 계정에 매핑된 다른 역할에 연결되어야 합니다. 이 역할에 정책을 할당하는 대신 Kubernetes 서비스 계정에 연결된 역할에 정책을 할당하는 것이 좋습니다. 자세한 내용은 서비스 계정용 IAM 역할(IRSA)을 사용하도록 Amazon VPC CNI plugin for Kubernetes 구성 섹션을 참조하세요.

    6. 다음을 선택합니다.

  6. 이름, 검토 및 생성(Name, review, and create) 페이지에서 다음을 수행합니다.

    1. 역할 이름(Role name)에 역할의 고유한 이름(예: AmazonEKSNodeRole)을 입력합니다.

    2. 설명(Description)에서 현재 텍스트를 설명이 포함된 텍스트(예: Amazon EKS - Node role)로 바꿉니다.

    3. 태그 추가(선택 사항)에서 태그를 키-값 페어로 연결하여 메타데이터를 역할에 추가합니다. IAM에서 태그 사용에 대한 자세한 내용을 알아보려면 IAM 사용 설명서의 IAM 리소스에 태그 지정을 참조하세요.

    4. 역할 생성을 선택합니다.

AWS CLI
  1. 다음 명령을 실행해 node-role-trust-relationship.json 파일을 생성합니다.

    cat >node-role-trust-relationship.json <<EOF { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } EOF
  2. IAM 역할을 생성합니다.

    aws iam create-role \ --role-name AmazonEKSNodeRole \ --assume-role-policy-document file://"node-role-trust-relationship.json"
  3. 필요한 2개의 관리형 IAM 정책을 IAM 역할에 연결합니다.

    aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy \ --role-name AmazonEKSNodeRole aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly \ --role-name AmazonEKSNodeRole
  4. 클러스터를 생성한 IP 패밀리에 따라 다음 IAM 정책 중 하나를 IAM 역할에 연결합니다. 이 정책은 이 역할에 연결되거나 Amazon VPC CNI plugin for Kubernetes에 사용되는 Kubernetes aws-node 서비스 계정에 연결된 역할에 연결되어야 합니다. Kubernetes 서비스 계정에 연결된 역할에 정책을 할당하는 것이 좋습니다. Kubernetes 서비스 계정에 연결된 역할에 정책을 할당하려면 서비스 계정용 IAM 역할(IRSA)을 사용하도록 Amazon VPC CNI plugin for Kubernetes 구성 섹션을 참조하세요.

    • IPv4

      aws iam attach-role-policy \ --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \ --role-name AmazonEKSNodeRole
    • IPv6

      1. 다음 텍스트를 복사해 vpc-cni-ipv6-policy.json 파일에 저장합니다.

        { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "ec2:AssignIpv6Addresses", "ec2:DescribeInstances", "ec2:DescribeTags", "ec2:DescribeNetworkInterfaces", "ec2:DescribeInstanceTypes" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "ec2:CreateTags" ], "Resource": [ "arn:aws:ec2:*:*:network-interface/*" ] } ] }
      2. IAM 정책을 생성합니다.

        aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
      3. IAM 정책을 IAM 역할에 연결합니다. 111122223333을 계정 ID로 바꿉니다.

        aws iam attach-role-policy \ --policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \ --role-name AmazonEKSNodeRole