Amazon EKS Pod 실행 IAM 역할
Amazon EKS Pod 실행 IAM 역할 (Pod execution IAM role)
Amazon EKS Pod 실행 역할은 AWS Fargate 인프라에서 Pod를 실행하는 데 필요해요.
클러스터가 AWS Fargate 인프라에서 Pod를 만들면 Fargate 인프라에서 실행되는 구성 요소가 사용자를 대신해 AWS API를 호출해야 해요. 이는 Amazon ECR에서 컨테이너 이미지를 가져오거나 로그를 다른 AWS 서비스로 라우팅하는 등의 작업을 하기 위해서예요. Amazon EKS Pod 실행 역할은 이를 위한 IAM 권한을 제공해요.
Fargate 프로필을 만들 때는 프로필을 사용해 Fargate 인프라에서 실행되는 Amazon EKS 구성 요소를 위한 Pod 실행 역할을 지정해야 해요. 이 역할은 권한 부여(authorization)를 위해 클러스터의 Kubernetes RBAC(Role based access control)에 추가돼요. 이를 통해 Fargate 인프라에서 실행되는 kubelet이 Amazon EKS 클러스터에 등록되어 클러스터에서 노드로 나타날 수 있게 돼요.
참고
Fargate 프로필은 Amazon EC2 노드 그룹과 다른 IAM 역할을 가져야 해요.
중요
Fargate Pod에서 실행되는 컨테이너는 Pod 실행 역할과 연결된 IAM 권한을 맡을 수 없어요. Fargate Pod의 컨테이너에 다른 AWS 서비스에 접근할 권한을 부여하려면 서비스 계정용 IAM 역할(IAM roles for service accounts)을 사용해야 해요.
Fargate 프로필을 만들기 전에 AmazonEKSFargatePodExecutionRolePolicy로 IAM 역할을 만들어야 해요.
출처: 문서
본문
올바르게 구성된 기존 Pod 실행 역할 확인하기
계정에 올바르게 구성된 Amazon EKS Pod 실행 역할이 이미 있는지 확인하려면 다음 절차를 사용할 수 있어요. 혼동 대리자(confused deputy) 보안 문제를 피하려면 역할이 SourceArn을 기준으로 접근을 제한하는 것이 중요해요. 필요에 따라 다른 클러스터의 Fargate 프로필을 지원하도록 실행 역할을 수정할 수 있어요.
- https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Roles를 선택합니다.
- Roles 페이지에서 역할 목록에서
AmazonEKSFargatePodExecutionRole을 검색합니다. 역할이 없으면 Amazon EKS Pod 실행 역할 생성을 참고해 역할을 만듭니다. 역할이 있으면 그 역할을 선택합니다. - AmazonEKSFargatePodExecutionRole 페이지에서 다음을 수행합니다.
- Permissions를 선택합니다.
AmazonEKSFargatePodExecutionRolePolicyAmazon 관리형 정책이 역할에 연결되어 있는지 확인합니다.- Trust relationships를 선택합니다.
- Edit trust policy를 선택합니다.
- Edit trust policy 페이지에서 신뢰 관계에 다음 정책이 포함되어 있고 클러스터의 Fargate 프로필에 대한 줄이 있는지 확인합니다. 있다면 Cancel을 선택합니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:eks:us-east-1:111122223333:fargateprofile/my-cluster/*"
}
},
"Principal": {
"Service": "eks-fargate-pods.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
정책이 일치하지만 클러스터의 Fargate 프로필을 지정하는 줄이 없다면 ArnLike 객체 맨 위에 다음 줄을 추가할 수 있어요. region-code를 클러스터가 있는 AWS 리전으로, 111122223333을 계정 ID로, my-cluster를 클러스터 이름으로 바꾸세요.
"aws:SourceArn": "arn:aws:eks:region-code:111122223333:fargateprofile/my-cluster/*",
정책이 일치하지 않으면 이전 전체 정책을 양식에 복사하고 Update policy를 선택하세요. region-code를 클러스터가 있는 AWS 리전으로 바꾸세요. 계정의 모든 AWS 리전에서 같은 역할을 사용하려면 region-code를 *로 바꾸세요. 111122223333을 계정 ID로, my-cluster를 클러스터 이름으로 바꾸세요. 계정의 모든 클러스터에 같은 역할을 사용하려면 my-cluster를 *로 바꾸세요.
Amazon EKS Pod 실행 역할 생성
클러스터에 Amazon EKS Pod 실행 역할이 아직 없다면 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 cases for other AWS services 드롭다운 목록에서 EKS를 선택합니다.
- EKS - Fargate Pod를 선택합니다.
- Next를 선택합니다.
- Add permissions 페이지에서 Next를 선택합니다.
- Name, review, and create 페이지에서 다음을 수행합니다.
- Role name에
AmazonEKSFargatePodExecutionRole같은 역할의 고유한 이름을 입력합니다. - Add tags (Optional)에서 키-값 쌍으로 태그를 붙여 역할에 메타데이터를 추가합니다. IAM에서 태그 사용에 대한 자세한 내용은 IAM 사용자 가이드의 Tagging IAM resources를 참고하세요.
- Create role을 선택합니다.
- Role name에
- Roles 페이지에서 역할 목록에서 AmazonEKSFargatePodExecutionRole을 검색하고 역할을 선택합니다.
- AmazonEKSFargatePodExecutionRole 페이지에서 다음을 수행합니다.
- Trust relationships를 선택합니다.
- Edit trust policy를 선택합니다.
- Edit trust policy 페이지에서 다음을 수행합니다.
- 다음 내용을 Edit trust policy 양식에 복사해 붙여넣습니다.
region-code를 클러스터가 있는 AWS 리전으로 바꾸세요. 계정의 모든 AWS 리전에서 같은 역할을 사용하려면region-code를*로 바꾸세요.111122223333을 계정 ID로,my-cluster를 클러스터 이름으로 바꾸세요. 계정의 모든 클러스터에 같은 역할을 사용하려면my-cluster를*로 바꾸세요.
- 다음 내용을 Edit trust policy 양식에 복사해 붙여넣습니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:eks:us-east-1:111122223333:fargateprofile/my-cluster/*"
}
},
"Principal": {
"Service": "eks-fargate-pods.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
- Update policy를 선택합니다.
AWS CLI
- 다음 내용을
pod-execution-role-trust-policy.json파일에 복사해 붙여넣습니다.region-code를 클러스터가 있는 AWS 리전으로 바꾸세요. 계정의 모든 AWS 리전에서 같은 역할을 사용하려면region-code를*로 바꾸세요.111122223333을 계정 ID로,my-cluster를 클러스터 이름으로 바꾸세요. 계정의 모든 클러스터에 같은 역할을 사용하려면my-cluster를*로 바꾸세요.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Condition": {
"ArnLike": {
"aws:SourceArn": "arn:aws:eks:us-east-1:111122223333:fargateprofile/my-cluster/*"
}
},
"Principal": {
"Service": "eks-fargate-pods.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
- Pod 실행 IAM 역할을 만듭니다.
aws iam create-role \
--role-name AmazonEKSFargatePodExecutionRole \
--assume-role-policy-document file://"pod-execution-role-trust-policy.json"
- 필요한 Amazon EKS 관리형 IAM 정책을 역할에 연결합니다.
aws iam attach-role-policy \
--policy-arn arn:aws:iam::aws:policy/AmazonEKSFargatePodExecutionRolePolicy \
--role-name AmazonEKSFargatePodExecutionRole