상황
여러 EKS Cluster용 OIDC Provider를 하나의 IAM Role에 연동 하려고 하는데, 하나의 OIDC Provider만 있을 땐 동작하던 Role 수임이 여러개로 설정하니 동작하지 않는 이슈가 있었다.
하나만 사용할 때에는 분명 정상 동작했는데, 두 개의 OIDC를 연결하려고 하니 양쪽 다 동작하지 않는 것 같아서, 원인을 찾아봤다.
해결 방법
상황은 다음 JSON 파일과 같다.
원래는 aaaaaaaa Cluster만 연동된 IAM Role에 bbbbbbb Cluster도 동일하게 추가하니 문제가 발생했다.
#변경 전
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": [
"arn:aws:iam::000000000000:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"arn:aws:iam::000000000000:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
]
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.us-east-1.amazonaws.com/id/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aud": "sts.amazonaws.com",
"oidc.eks.us-west-2.amazonaws.com/id/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb:aud": "sts.amazonaws.com",
"oidc.eks.us-east-1.amazonaws.com/id/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller",
"oidc.eks.us-west-2.amazonaws.com/id/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
}
}
}
]
}
Shell
복사
평가 방식에 대한 공식 문서를 찾지는 못했지만 Statement.Principal.Federated 내부에 여러개의 값이 있을 때, or 연산이 아닌 and 연산이 되는 것으로 보인다.
결국 Policy를 다음과 같이 OIDC Provider별로 Statement를 나눠서 설정하게 변경한 후 정상 동작하는 것을 확인했다.
#아래와 같이 변경 후 해결됨
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Federated": [
"arn:aws:iam::000000000000:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
]
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.us-west-2.amazonaws.com/id/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:aud": "sts.amazonaws.com",
"oidc.eks.us-west-2.amazonaws.com/id/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
}
}
},
{
"Effect": "Allow",
"Principal": {
"Federated": [
"arn:aws:iam::000000000000:oidc-provider/oidc.eks.us-west-2.amazonaws.com/id/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"
]
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"oidc.eks.us-east-1.amazonaws.com/id/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller",
"oidc.eks.us-east-1.amazonaws.com/id/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb:aud": "sts.amazonaws.com"
}
}
}
]
}
Shell
복사