Amazon EKS에서 AWS Load Balancer Controller를 사용할 때 "webidentityerr" 오류가 발생하는 이유는 무엇입니까?
Amazon Elastic Kubernetes Service(Amazon EKS)에서 AWS Load Balancer Controller를 사용할 때 "WebIdentityErr" 오류 메시지가 표시됩니다.
간략한 설명
Amazon EKS에서 AWS 로드 밸런서 컨트롤러를 사용할 때 다음과 같은 오류 메시지가 표시될 수 있습니다.
"failed to find existing LoadBalancer due to WebIdentityErr: failed to retrieve credentials\ncaused by: AccessDenied: Not authorized to perform sts:AssumeRoleWithWebIdentity\n\tstatus code: 403"
"WebIdentityErr" 오류는 다음과 같은 이유로 발생합니다.
- 서비스 계정 구성이 잘못됨
- 서비스 계정에서 사용하는 AWS Identity and Access Management(IAM) 역할의 트러스트 관계가 잘못됨
AWS Load Balancer Controller를 사용할 때는 IAM 권한을 사용하여 워커 노드가 Application Load Balancer 또는 Network Load Balancer 리소스를 관리할 수 있도록 해야 합니다. IAM 권한을 설정하려면 서비스 계정용 IAM 역할(IRSA)을 사용하거나 IAM 권한을 워커 노드의 IAM 역할에 직접 연결하십시오. 자세한 내용을 보려면 Kubernetes 웹사이트에서 AWS Load Balancer Controller installation을 참조하십시오.
해결 방법
서비스 계정 구성이 잘못됨
서비스 계정을 올바르게 구성했는지 확인하려면 다음 단계를 완료하십시오.
-
배포에 정의된 서비스 계정 이름을 확인하려면 다음 명령을 실행합니다.
kubectl describe deploy aws-load-balancer-controller -n kube-system | grep -i "Service Account" -
서비스 계정의 IAM 역할 주석을 확인하려면 다음 명령을 실행합니다.
kubectl describe sa aws-load-balancer-controller -n kube-system | grep "role-arn"출력 예시:
Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::abcdefgxyz:role/AMAZON_EKS_LOAD_BALANCER_CONTROLLER_ROLE -
IAM 역할 주석이 없거나 잘못된 경우 다음 명령을 실행하여 주석을 업데이트합니다.
kubectl annotate serviceaccount -n SERVICE_ACCOUNT_NAMESPACE SERVICE_ACCOUNT_NAME eks.amazonaws.com/role-arn=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME참고: SERVICE_ACCOUNT_NAMESPACE를 네임스페이스로, SERVICE_ACCOUNT_NAME을 계정 이름으로, ACCOUNT_ID를 AWS 계정 ID로, IAM_ROLE_NAME을 IAM 역할 이름으로 대체하십시오. 또한 올바르게 IAM 역할을 서비스 계정에 연결했는지 확인하십시오.
-
AWS 로드 밸런서 컨트롤러 배포를 다시 시작하여 포드 자격 증명을 새로 고치려면 다음 명령을 실행합니다.
kubectl rollout restart deployment/aws-load-balancer-controller -n kube-system
IAM 역할과 서비스 계정 간의 잘못된 트러스트 관계
IAM 역할과 서비스 계정 간의 트러스트 관계를 설정할 때 문제가 발생할 수 있습니다. 이러한 문제를 해결하려면 트러스트 관계를 설정할 때 발생할 수 있는 일반적인 실수를 기반으로 다음 조치를 취하십시오.
"sts:AssumeRoleWithWebIdentity" 작업에 대한 IAM 역할 또는 트러스트 관계를 제대로 정의하지 않음
sts:AssumeRoleWithWebIdentity 작업(sts:AssumeRole 작업이 아님)에 트러스트 관계를 정의했는지 확인하십시오.
다음은 트러스트 관계가 잘못 정의된 예시입니다.
{ "Sid": "", "Effect": "Allow", "Principal": { "Service": "abcde.amazonaws.com" }, "Action": "sts:AssumeRole" }
이 문제를 해결하려면 sts:AssumeRoleWithWebIdentity 작업의 트러스트 관계를 업데이트하십시오. 정책 예시:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::AWS_ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC-PROVIDER_ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC_PROVIDER_ID:sub": "system:serviceaccount:kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT", "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com" } } } ] }
참고: AWS_ACCOUNT를 계정 ID로, REGION을 AWS 리전으로, EKS_CLUSTER_OIDC-PROVIDER_ID를 OpenID Connect(OIDC) ID로 대체하십시오. 또한 LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT를 AWS 로드 밸런서 컨트롤러 배포에 정의된 서비스 계정 이름으로 대체하십시오.
한 계정의 여러 클러스터에 동일한 IAM 역할을 사용하려면 다음 예시와 유사한 트러스트 관계를 사용하십시오.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::AWS-ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC-PROVIDER_ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:sub": "system:serviceaccount: kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT", "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_1_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com" } } }, { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::AWS_ACCOUNT:oidc-provider/oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID:sub": "system:serviceaccount: kube-system:LOAD_BALANCER_CONTROLLER_SERVICE_ACCOUNT", "oidc.eks.REGION.amazonaws.com/id/EKS_CLUSTER_2_OIDC_PROVIDER_ID:aud": "sts.amazonaws.com" } } } ] }
Amazon EKS 클러스터를 생성할 때 OIDC 공급자 ID를 추가하지 않음
OIDC 공급자 ID를 생성하여 Amazon EKS 클러스터에 연결했는지 확인하십시오.
서비스 계정 이름을 잘못 입력함
AWS 로드 밸런서 컨트롤러 배포를 검토하려면 다음 명령을 실행합니다.
kubectl describe deploy aws-load-balancer-controller -n kube-system | grep -i "Service Account"
필요한 경우 배포를 업데이트하여 올바른 서비스 계정 이름을 입력합니다.
- 언어
- 한국어

관련 콘텐츠
- 질문됨 2년 전