Amazon EKS 노드 IAM 역할
Amazon EKS 노드 IAM 역할 (Node IAM role)
Amazon EKS 노드 kubelet 데몬이 여러분을 대신해 AWS API를 호출해요. 노드는 IAM 인스턴스 프로필과 연결된 정책을 통해 이러한 API 호출에 대한 권한을 받아요. 노드를 시작해 클러스터에 등록하기 전에 노드가 시작될 때 사용할 IAM 역할을 만들어야 해요. 이 요구 사항은 Amazon이 제공하는 Amazon EKS 최적화 AMI로 시작되는 노드와 사용하려는 다른 모든 노드 AMI에 적용돼요. 또한 관리형 노드 그룹과 자체 관리형 노드 모두에 적용돼요.
참고
어떤 클러스터를 만드는 데 사용한 역할은 사용할 수 없어요.
노드를 만들기 전에 다음 권한으로 IAM 역할을 만들어야 해요.
kubelet이 VPC의 Amazon EC2 리소스를 describe할 권한(예:AmazonEKSWorkerNodePolicy정책이 제공하는 권한). 이 정책은 Amazon EKS Pod Identity Agent의 권한도 제공해요.kubelet이 Amazon Elastic Container Registry(Amazon ECR)의 컨테이너 이미지를 사용할 권한(예:AmazonEC2ContainerRegistryPullOnly정책이 제공하는 권한). 네트워킹용 기본 제공 애드온이 Amazon ECR의 컨테이너 이미지를 사용하는 Pod를 실행하므로 Amazon ECR의 컨테이너 이미지를 사용할 권한이 필요해요.- (선택) Amazon EKS Pod Identity Agent가
eks-auth:AssumeRoleForPodIdentity작업을 사용해 Pod의 자격 증명을 검색할 권한.AmazonEKSWorkerNodePolicy를 사용하지 않는다면 EKS Pod Identity를 사용하려면 EC2 권한에 더해 이 권한을 제공해야 해요. - (선택) IRSA 또는 EKS Pod Identity를 사용해 VPC CNI Pod에 권한을 주지 않는다면 인스턴스 역할에 VPC CNI 권한을 제공해야 해요.
AmazonEKS_CNI_Policy관리형 정책(IPv4패밀리로 클러스터를 만든 경우) 또는 직접 만든 IPv6 정책(IPv6패밀리로 클러스터를 만든 경우)을 사용할 수 있어요. 다만 이 역할에 정책을 연결하는 대신, Amazon VPC CNI 애드온 전용의 별도 역할에 정책을 연결할 것을 권장해요. Amazon VPC CNI 애드온용 별도 역할 생성에 대한 자세한 내용은 Amazon VPC CNI 플러그인이 IRSA를 사용하도록 구성하기를 참고하세요. - (선택)
kubelet이 Amazon ECR Public(public.ecr.aws)의 컨테이너 이미지를 사용할 권한(예:AmazonElasticContainerRegistryPublicReadOnly정책이 제공하는 권한). ECR Public에서 컨테이너 이미지를 가져온다면 이 권한을 권장해요. 이 권한이 없어도 가져오기는 성공하지만 속도가 제한될 수 있어요.
참고
Amazon EC2 노드 그룹은 Fargate 프로필과 다른 IAM 역할을 가져야 해요. 자세한 내용은 Amazon EKS Pod 실행 IAM 역할을 참고하세요.
출처: 문서
본문
기존 노드 역할 확인하기
계정에 Amazon EKS 노드 역할이 이미 있는지 확인하려면 다음 절차를 사용할 수 있어요.
- https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Roles를 선택합니다.
- 역할 목록에서
eksNodeRole,AmazonEKSNodeRole또는NodeInstanceRole을 검색합니다. 그 이름 중 하나를 가진 역할이 없으면 Amazon EKS 노드 IAM 역할 생성을 참고해 역할을 만듭니다.eksNodeRole,AmazonEKSNodeRole또는NodeInstanceRole이 포함된 역할이 있으면 그 역할을 선택해 연결된 정책을 봅니다. - Permissions를 선택합니다.
AmazonEKSWorkerNodePolicy와AmazonEC2ContainerRegistryPullOnly관리형 정책이 역할에 연결되었거나, 최소 권한을 가진 사용자 지정 정책이 연결되었는지 확인합니다.
참고
AmazonEKS_CNI_Policy정책이 역할에 연결되어 있다면 이를 제거하고aws-nodeKubernetes 서비스 계정에 매핑된 IAM 역할에 연결할 것을 권장해요. 자세한 내용은 Amazon VPC CNI 플러그인이 IRSA를 사용하도록 구성하기를 참고하세요.
- Trust relationships를 선택한 다음 Edit trust policy를 선택합니다.
- 신뢰 관계에 다음 정책이 포함되어 있는지 확인합니다. 신뢰 관계가 다음 정책과 일치하면 Cancel을 선택합니다. 일치하지 않으면 정책을 Edit trust policy 창에 복사하고 Update policy를 선택합니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Principal": {
"Service": [
"ec2.amazonaws.com"
]
}
}
]
}
Amazon EKS 노드 IAM 역할 생성
노드 IAM 역할은 AWS Management Console이나 AWS CLI로 만들 수 있어요.
AWS Management Console
- https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Roles를 선택합니다.
- Roles 페이지에서 Create role을 선택합니다.
- Select trusted entity 페이지에서 다음을 수행합니다.
- Trusted entity type 섹션에서 AWS service를 선택합니다.
- Use case에서 EC2를 선택합니다.
- Next를 선택합니다.
- Add permissions 페이지에서 사용자 지정 정책을 연결하거나 다음을 수행합니다.
- Filter policies 상자에
AmazonEKSWorkerNodePolicy를 입력합니다. - 검색 결과에서 AmazonEKSWorkerNodePolicy 왼쪽의 확인란을 선택합니다.
- Clear filters를 선택합니다.
- Filter policies 상자에
AmazonEC2ContainerRegistryPullOnly를 입력합니다. - 검색 결과에서 AmazonEC2ContainerRegistryPullOnly 왼쪽의 확인란을 선택합니다.
AmazonEKS_CNI_Policy관리형 정책 또는 직접 만든 IPv6 정책도 이 역할 또는aws-nodeKubernetes 서비스 계정에 매핑된 다른 역할에 연결되어야 해요. 이 역할 대신 Kubernetes 서비스 계정과 연결된 역할에 정책을 할당할 것을 권장해요. 자세한 내용은 Amazon VPC CNI 플러그인이 IRSA를 사용하도록 구성하기를 참고하세요.
- Filter policies 상자에
- Next를 선택합니다.
- Name, review, and create 페이지에서 다음을 수행합니다.
- Role name에
AmazonEKSNodeRole같은 역할의 고유한 이름을 입력합니다. - Description에서 현재 텍스트를
Amazon EKS - Node role같은 설명 텍스트로 바꿉니다. - Add tags (Optional)에서 키-값 쌍으로 태그를 붙여 역할에 메타데이터를 추가합니다. IAM에서 태그 사용에 대한 자세한 내용은 IAM 사용자 가이드의 Tagging IAM resources를 참고하세요.
- Create role을 선택합니다.
- Role name에
AWS CLI
- 다음 명령으로
node-role-trust-relationship.json파일을 만듭니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Principal": {
"Service": [
"ec2.amazonaws.com"
]
}
}
]
}
- IAM 역할을 만듭니다.
aws iam create-role \
--role-name AmazonEKSNodeRole \
--assume-role-policy-document file://"node-role-trust-relationship.json"
- 필요한 두 개의 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/AmazonEC2ContainerRegistryPullOnly \
--role-name AmazonEKSNodeRole
- 클러스터를 만든 IP 패밀리에 따라 다음 IAM 정책 중 하나를 IAM 역할에 연결합니다. 정책은 이 역할 또는 Kubernetes
aws-node서비스 계정(Amazon VPC CNI 플러그인에 사용됨)과 연결된 역할에 연결해야 해요. Kubernetes 서비스 계정과 연결된 역할에 정책을 할당할 것을 권장해요. Kubernetes 서비스 계정과 연결된 역할에 정책을 할당하려면 Amazon VPC CNI 플러그인이 IRSA를 사용하도록 구성하기를 참고하세요.
IPv4
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy \
--role-name AmazonEKSNodeRole
IPv6
다음 텍스트를 복사해 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/*"
]
}
]
}
IAM 정책을 만듭니다.
aws iam create-policy --policy-name AmazonEKS_CNI_IPv6_Policy --policy-document file://vpc-cni-ipv6-policy.json
IAM 정책을 IAM 역할에 연결합니다. 111122223333을 계정 ID로 바꾸세요.
aws iam attach-role-policy \
--policy-arn arn:aws:iam::111122223333:policy/AmazonEKS_CNI_IPv6_Policy \
--role-name AmazonEKSNodeRole