Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Amazon EKS 포드에서 서비스 계정에 IAM 역할을 사용할 수 없는 이유는 무엇인가요?
서비스 계정에 대해 AWS Identity and Access Management(IAM) 역할을 사용하려고 합니다. Amazon Elastic Kubernetes Service(Amazon EKS) 포드가 권한 부여 오류와 함께 할당된 IAM 역할을 사용하지 못합니다. 또는 내 포드가 내 포드에 할당된 IAM 역할 대신 Amazon EKS 노드에 할당된 기본 IAM 역할을 사용하려고 합니다.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령 실행 시 오류가 발생하는 경우, AWS CLI 오류 문제 해결을 참고하세요. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하세요.
Amazon EKS 클러스터에 대한 IAM OIDC 자격 증명 공급자가 있는지 확인
아직 없는 경우 클러스터에 대한 IAM OIDC 공급자를 생성합니다. 서비스 계정에 IAM 역할을 사용하려면 클러스터에 대한 OIDC 자격 증명 공급자가 있어야 합니다.
그런 다음 OIDC ID 공급자가 올바르게 구성되었는지 확인:
- IAM 콘솔을 엽니다. 탐색 창에서 ID 공급자를 선택합니다.
- 제공자 열에서 OIDC 제공자 URL을 식별하고 기록해 둡니다.
- 별도의 탭 또는 창에서 Amazon EKS 콘솔을 엽니다. 그런 다음 탐색 창에서 클러스터를 선택합니다.
- 클러스터를 선택한 다음 구성 탭을 선택합니다.
- 세부 정보 섹션에서 OpenID Connect 공급자 URL 속성의 값을 기록합니다.
- Amazon EKS 콘솔(5단계)의 OIDC 공급자 URL이 IAM 콘솔(2단계)의 OIDC 공급자 URL과 일치하는지 확인합니다.
Amazon EKS 클러스터의 OIDC 공급자 URL이 IAM 콘솔의 OIDC 공급자 URL과 일치하지 않는 경우 새 IAM OIDC 공급자를 생성해야 합니다.
IAM 역할 정책 및 신뢰 정책 구성 검증
IAM 역할에는 필요한 전체 권한 범위가 없을 수 있습니다. AWS Management Console 또는 AWS CLI를 사용하여 IAM 역할을 생성한 경우 IAM 역할의 신뢰 관계 정책에 구문 오류가 있을 수도 있습니다.
IAM 역할 정책을 검증하고 신뢰 정책에서 구문 오류를 확인하려면 다음을 수행합니다.
- IAM 콘솔을 엽니다.
- 탐색 창에서 역할을 선택한 다음, 자신의 역할을 선택합니다.
- 역할 페이지에서 권한 탭을 선택한 다음 필요한 모든 권한이 역할에 할당되었는지 확인합니다.
- 신뢰 관계 탭을 선택한 다음 신뢰 관계 편집을 선택합니다.
- 신뢰 관계에 대한 정책 문서에서 정책의 형식이 다음 JSON 정책의 형식과 일치하는지 확인:
JSON 정책에서 Federated 속성 줄 및 StringEquals 속성 줄의 형식을 검토합니다. 페더레이션 줄에서 AWS 리전 코드(your-region-code), 계정 ID(** your-account-id**) 및 고유 OIDC 식별자(EXAMPLE_OIDC_IDENTIFIER)의 형식이 올바른지 확인합니다. StringEquals 줄에서 지역 코드(your-region-code), OIDC 고유 식별자(EXAMPLE_OIDC_IDENTIFIER), Kubernetes 네임스페이스(your-namespace) 및 Kubernetes 서비스 계정 이름(your-namespace)의 형식이 올바른지 확인합니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Federated": "arn:aws:iam::your-account-id:oidc-provider/oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER" }, "Action": "sts:AssumeRoleWithWebIdentity", "Condition": { "StringEquals": { "oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER:sub": "system:serviceaccount:your-namespace:your-service-account", "oidc.eks.your-region-code.amazonaws.com/id/EXAMPLE_OIDC_IDENTIFIER:aud": "sts.amazonaws.com" } } } ] }
- 정책 문서를 편집하여 형식 오류를 수정하는 경우 신뢰 정책 업데이트를 선택합니다.
서비스 계정이 존재하고 IAM 역할의 ARN에 대한 올바른 형식의 주석이 있는지 확인
-
Kubernetes 서비스 계정이 있는지 확인:
$ kubectl get serviceaccount YOUR_ACCOUNT_NAME -n YOUR_NAMESPACE -o yaml
참고: YOUR_ACCOUNT_NAME을 자신의 계정 이름으로 바꿉니다. YOUR_NAMESPACE를 네임스페이스로 바꿉니다.
앞의 명령이 서비스 계정 이름을 반환하지 않으면 서비스 계정을 만듭니다. 자세한 내용은 Kubernetes 웹 사이트에서 둘 이상의 ServiceAccount 사용을 참조하세요. -
서비스 계정에 예상한 이름이 있는지 확인합니다. 또한 role-arn 주석의 형식이 올바른지 확인합니다. 예를 들면, 다음과 같습니다.
apiVersion: v1 kind: ServiceAccount metadata: annotations: eks.amazonaws.com/role-arn: arn:aws:iam::012345678912:role/my-example-iam-role name: my-example-serviceaccount namespace: my-test-namespace
테스트 포드를 사용하여 서비스 계정이 작동하는지 확인
테스트 포드를 실행하여 서비스 계정이 제대로 작동하는지 확인합니다. 그런 다음 포드가 환경 변수를 올바르게 마운트할 수 있고 지정된 IAM 역할을 가정할 수 있는지 확인합니다.
-
awscli-pod.yaml이라는 로컬 YAML 파일을 생성합니다. 예를 들면, 다음과 같습니다.
apiVersion: v1 kind: Pod metadata: name: awscli labels: app: awscli spec: serviceAccountName: YOUR_SERVICE_ACCOUNT containers: - image: amazon/aws-cli command: - "sleep" - "604800" imagePullPolicy: IfNotPresent name: awscli restartPolicy: Always
참고: YOUR_SERVICE_ACCOUNT를 Kubernetes 서비스 계정 이름으로 바꿉니다.
-
(YAML 파일에서) 네임스페이스에 테스트 포드 생성:
$ kubectl apply -f ./awscli-pod.yaml -n YOUR_NAMESPACE
참고: YOUR_NAMESPACE를 자신의 네임스페이스로 바꿉니다.
-
awscli 포드에 올바른 환경 변수가 있는지 확인:
$ kubectl exec -n YOUR_NAMESPACE awscli -- env | grep AWS
다음과 같은 출력이 나타납니다.
AWS_ROLE_ARN=arn:aws:iam::ACCOUNT_ID:role/IAM_ROLE_NAME AWS_WEB_IDENTITY_TOKEN_FILE=/var/run/secrets/eks.amazonaws.com/serviceaccount/token
-
테스트 포드의 IAM 역할이 올바른지 확인:
$ kubectl exec -it awscli -n YOUR_NAMESPACE -- aws sts get-caller-identity
다음과 같은 출력이 나타납니다.
{ "UserId": "REDACTEDY471234567890:botocore-session-1632772568", "Account": "012345678912", "Arn": "arn:aws:sts::012345678912:assumed-role/your-iam-role/botocore-session-1632772568" }
이 출력에서 수신한 IAM 역할 이름을 포함한 Arn 값을 기록해 둡니다.
-
IAM 역할을 확인한 후 awscli 포드 삭제:
$ kubectl delete -f ./awscli-pod.yaml -n YOUR_NAMESPACE
awscli 포드에 올바른 IAM 역할이 표시되면 서비스 계정에 대한 IAM 역할 기능이 올바르게 작동합니다.
이전 단계에서는 IAM 토큰이 포드에 올바르게 마운트되었는지 확인합니다. 애플리케이션에서 여전히 토큰 파일을 제대로 사용할 수 없다면 애플리케이션 또는 SDK 수준에서 문제가 있을 수 있습니다. 이 문제는 애플리케이션이 AWS 자격 증명을 수집하는 방식 또는 SDK 버전이 지원되지 않기 때문일 수 있습니다. 자세한 내용은 기본 자격 증명 공급자 체인 사용, Boto3 웹 사이트의 자격 증명 및 지원되는 AWS SDK 사용을 참조하세요.

관련 콘텐츠
- 질문됨 2달 전lg...
- AWS 공식업데이트됨 일 년 전
- AWS 공식업데이트됨 3년 전
- AWS 공식업데이트됨 2년 전