devops

EKS Ingress 생성 시 failed to retrieve credentials, sts:AssumeRoleWithWebIdentity 오류 해결하기 본문

DevOps/Kubernetes

EKS Ingress 생성 시 failed to retrieve credentials, sts:AssumeRoleWithWebIdentity 오류 해결하기

vataops 2023. 5. 17. 22:09
반응형

ServiceAccount에 적용된 Role의 신뢰관계 설정 문제일 가능성이 크다. ServiceAccount가 AWS 리소스에 접근할 권한이 없기 때문.

$ kubectl describe sa aws-load-balancer-controller -n kube-system

먼저 ALB Controller의 SA를 상세 정보를 확인하면, 위와 같이 Annotation에 선언된 Role을 확인할 수 있음. 위에선 AmazonEKSLoadBalancerControllerRole이 SA의 Role로 선언되어 있음.

AmazonEKSLoadBalancerControllerRole을 확인해보면 아래와 같은 신뢰관계가 구성되어있다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Federated": "arn:aws:iam::{ account }:oidc-provider/oidc.eks.ap-northeast-2.amazonaws.com/id/{ oidc ID }"
            },
            "Action": "sts:AssumeRoleWithWebIdentity",
            "Condition": {
                "StringEquals": {
                    "oidc.eks.ap-northeast-2.amazonaws.com/id/{ oidc ID }:aud": "sts.amazonaws.com",
                    "oidc.eks.ap-northeast-2.amazonaws.com/id/{ oidc ID }:sub": "system:serviceaccount:kube-system:aws-load-balancer-controller"
                }
            }
        }
    ]
}

여기서 oidc ID가 잘못 설정되어 있거나 AssumeRoleWithWebIdentity Action 선언이 안되어 있을 수 있다. 아니면 해당 Role에 ALB Controller에게 필요한 Policy가 연결안되어 있을 수 있다.

ALB Controller에게 필요한 Policy는 아래 명령어를 통해서 다운받아 생성하면 된다.

$ curl -o iam_policy.json https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.3.1/docs/install/iam_policy.json

 

반응형
Comments