EKS 는 역할이 둘 필요하다. 클러스터 역할은 컨트롤 플레인이 노드와 로드밸런서를 관리할 때, 노드 역할은 각 노드의 kubelet 이 EC2 · ECR API 를 부를 때 쓴다. 같은 역할을 둘 다에 쓸 수 없다.
| 역할 | 신뢰 주체 | 필수 정책 |
|---|---|---|
클러스터 역할 (예: eksClusterRole) |
eks.amazonaws.com |
AmazonEKSClusterPolicy |
노드 역할 (예: AmazonEKSNodeRole) |
ec2.amazonaws.com |
AmazonEKSWorkerNodePolicy · AmazonEC2ContainerRegistryPullOnly · (IPv4) AmazonEKS_CNI_Policy |
AmazonEKS_CNI_Policy 는 노드 역할 대신 aws-node 서비스 계정에 연결한 별도 역할(IRSA 또는 Pod Identity)에 붙이는 것을 권한다.
AWS 콘솔 [서비스] - [IAM] - [액세스 관리] - [역할] - [역할 만들기] 로 들어간다.
AmazonEKSClusterPolicy 가 자동으로 붙는다eksClusterRole![]() |
![]() |
| ----------------------------------- | |
![]() |
AmazonEKSWorkerNodePolicy · AmazonEC2ContainerRegistryPullOnly 를 검색해 체크AmazonEKSNodeRole신뢰 정책 cluster-trust-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "eks.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
aws iam create-role --role-name eksClusterRole --assume-role-policy-document file://cluster-trust-policy.json
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy --role-name eksClusterRole
신뢰 정책 node-role-trust-relationship.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"sts:AssumeRole"
],
"Principal": {
"Service": [
"ec2.amazonaws.com"
]
}
}
]
}
aws iam create-role --role-name AmazonEKSNodeRole --assume-role-policy-document file://node-role-trust-relationship.json
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
IPv4 클러스터에서 VPC CNI 에 별도 역할을 두지 않는다면 CNI 정책도 붙인다.
aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy --role-name AmazonEKSNodeRole
aws iam list-attached-role-policies --role-name eksClusterRole
aws iam list-attached-role-policies --role-name AmazonEKSNodeRole
정책이 붙어 있으면 클러스터 생성으로 넘어간다.