Amazon EKS Auto Mode 클러스터 IAM 역할
Amazon EKS Auto Mode 클러스터 IAM 역할
각 클러스터에는 Amazon EKS 클러스터 IAM 역할이 필요해요. Amazon EKS가 관리하는 Kubernetes 클러스터는 이 역할을 사용해 스토리지, 네트워킹, 컴퓨트 오토스케일링에 대한 일상적인 작업을 자동화해요.
Amazon EKS 클러스터를 만들기 전에 EKS Auto Mode에 필요한 정책으로 IAM 역할을 만들어야 해요. 권장되는 AWS IAM 관리형 정책을 연결하거나 동등한 권한의 사용자 지정 정책을 만들 수 있어요.
AmazonEKSComputePolicyAmazonEKSBlockStoragePolicyV2AmazonEKSLoadBalancingPolicyAmazonEKSNetworkingPolicyAmazonEKSClusterPolicy
출처: 문서
본문
EKS Auto 리소스용 사용자 지정 AWS 태그
기본적으로 EKS Auto Mode 관련 관리형 정책은 Auto Mode가 프로비저닝한 AWS 리소스에 사용자 정의 태그를 적용하는 것을 허용하지 않아요. AWS 리소스에 사용자 정의 태그를 적용하려면 AWS 리소스에 태그를 만들고 수정할 수 있는 충분한 권한을 클러스터 IAM 역할에 추가로 연결해야 해요. 다음은 무제한 태그 접근을 허용하는 정책 예시예요.
{
"Version":"2012-10-17",
"Statement": [
{
"Sid": "Compute",
"Effect": "Allow",
"Action": [
"ec2:CreateFleet",
"ec2:RunInstances",
"ec2:CreateLaunchTemplate"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}"
},
"StringLike": {
"aws:RequestTag/eks:kubernetes-node-class-name": "*",
"aws:RequestTag/eks:kubernetes-node-pool-name": "*"
}
}
},
{
"Sid": "Storage",
"Effect": "Allow",
"Action": [
"ec2:CreateVolume",
"ec2:CreateSnapshot"
],
"Resource": [
"arn:aws:ec2:*:*:volume/*",
"arn:aws:ec2:*:*:snapshot/*"
],
"Condition": {
"StringEquals": {
"aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}"
}
}
},
{
"Sid": "Networking",
"Effect": "Allow",
"Action": "ec2:CreateNetworkInterface",
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}"
},
"StringLike": {
"aws:RequestTag/eks:kubernetes-cni-node-name": "*"
}
}
},
{
"Sid": "LoadBalancer",
"Effect": "Allow",
"Action": [
"elasticloadbalancing:CreateLoadBalancer",
"elasticloadbalancing:CreateTargetGroup",
"elasticloadbalancing:CreateListener",
"elasticloadbalancing:CreateRule",
"ec2:CreateSecurityGroup"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}"
}
}
},
{
"Sid": "ShieldProtection",
"Effect": "Allow",
"Action": [
"shield:CreateProtection"
],
"Resource": "*",
"Condition": {
"StringEquals": {
"aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}"
}
}
},
{
"Sid": "ShieldTagResource",
"Effect": "Allow",
"Action": [
"shield:TagResource"
],
"Resource": "arn:aws:shield::*:protection/*",
"Condition": {
"StringEquals": {
"aws:RequestTag/eks:eks-cluster-name": "${aws:PrincipalTag/eks:eks-cluster-name}"
}
}
}
]
}
기존 클러스터 역할 확인하기
계정에 Amazon EKS 클러스터 역할이 이미 있는지 확인하려면 다음 절차를 사용할 수 있어요.
- https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.
- 왼쪽 탐색 창에서 Roles를 선택합니다.
- 역할 목록에서
AmazonEKSAutoClusterRole을 검색합니다.AmazonEKSAutoClusterRole이 포함된 역할이 없으면 다음 섹션의 지침을 참고해 역할을 만듭니다.AmazonEKSAutoClusterRole이 포함된 역할이 있으면 그 역할을 선택해 연결된 정책을 봅니다. - Permissions를 선택합니다.
AmazonEKSClusterPolicy관리형 정책이 역할에 연결되어 있는지 확인합니다. 정책이 연결되어 있다면 Amazon EKS 클러스터 역할이 올바르게 구성된 것입니다.- Trust relationships를 선택한 다음 Edit trust policy를 선택합니다.
- 신뢰 관계에 다음 정책이 포함되어 있는지 확인합니다. 신뢰 관계가 다음 정책과 일치하면 Cancel을 선택합니다. 일치하지 않으면 정책을 Edit trust policy 창에 복사하고 Update policy를 선택합니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "eks.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession"
]
}
]
}
참고
AWS는 이 역할의 이름이
AmazonEKSAutoClusterRole일 것을 요구하지 않아요.
Amazon EKS 클러스터 역할 생성
클러스터 역할은 AWS Management Console이나 AWS CLI로 만들 수 있어요.
AWS Management Console
- https://console.aws.amazon.com/iam/ 에서 IAM 콘솔을 엽니다.
- Roles를 선택한 다음 Create role을 선택합니다.
- Trusted entity type에서 AWS service를 선택합니다.
- Use cases for other AWS services 드롭다운 목록에서 EKS를 선택합니다.
- 사용 사례로 EKS - Cluster를 선택한 다음 Next를 선택합니다.
- Add permissions 탭에서 정책을 선택한 다음 Next를 선택합니다.
AmazonEKSComputePolicyAmazonEKSBlockStoragePolicyV2AmazonEKSLoadBalancingPolicyAmazonEKSNetworkingPolicyAmazonEKSClusterPolicy
- Role name에
AmazonEKSAutoClusterRole같은 역할의 고유한 이름을 입력합니다. - Description에
Amazon EKS - Cluster role같은 설명 텍스트를 입력합니다. - Create role을 선택합니다.
AWS CLI
- 다음 내용을
cluster-trust-policy.json파일에 복사합니다.
{
"Version":"2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "eks.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:TagSession"
]
}
]
}
- 역할을 만듭니다.
AmazonEKSAutoClusterRole은 원하는 이름으로 바꿀 수 있어요.
aws iam create-role \
--role-name AmazonEKSAutoClusterRole \
--assume-role-policy-document file://"cluster-trust-policy.json"
- 필요한 IAM 정책을 역할에 연결합니다.
AmazonEKSClusterPolicy:
aws iam attach-role-policy \
--role-name AmazonEKSAutoClusterRole \
--policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
AmazonEKSComputePolicy:
aws iam attach-role-policy \
--role-name AmazonEKSAutoClusterRole \
--policy-arn arn:aws:iam::aws:policy/AmazonEKSComputePolicy
AmazonEKSBlockStoragePolicyV2:
aws iam attach-role-policy \
--role-name AmazonEKSAutoClusterRole \
--policy-arn arn:aws:iam::aws:policy/AmazonEKSBlockStoragePolicyV2
AmazonEKSLoadBalancingPolicy:
aws iam attach-role-policy \
--role-name AmazonEKSAutoClusterRole \
--policy-arn arn:aws:iam::aws:policy/AmazonEKSLoadBalancingPolicy
AmazonEKSNetworkingPolicy:
aws iam attach-role-policy \
--role-name AmazonEKSAutoClusterRole \
--policy-arn arn:aws:iam::aws:policy/AmazonEKSNetworkingPolicy