서비스 계정으로 Pod가 AWS 서비스에 액세스하도록 구성
서비스 계정으로 Pod가 AWS 서비스에 액세스하도록 구성
EKS Pod Identity를 사용해 AWS 서비스에 액세스해야 하는 Pod가 Kubernetes 서비스 계정을 사용하도록 구성하는 방법을 설명합니다.
출처: 문서
본문
Pod가 AWS 서비스에 액세스해야 한다면 Kubernetes 서비스 계정을 사용하도록 구성해야 합니다. 서비스 계정은 AWS 서비스에 액세스할 권한이 있는 AWS Identity and Access Management(IAM) 역할과 연결되어 있어야 합니다.
전제 조건
- 기존 클러스터. 없다면 "Amazon EKS 시작하기"의 안내 중 하나를 따라 생성할 수 있습니다.
- 기존 Kubernetes 서비스 계정과, 그 서비스 계정을 IAM 역할과 연결하는 EKS Pod Identity 연결. 역할에는 Pod가 AWS 서비스를 사용할 때 갖기를 원하는 권한이 포함된 IAM 정책이 연결되어 있어야 합니다. 서비스 계정과 역할을 만들고 구성하는 방법은 "Kubernetes 서비스 계정에 IAM 역할 할당"을 참고하세요.
- 사용 기기나 AWS CloudShell에 최신 버전의 AWS CLI가 설치되어 구성되어 있어야 합니다. 현재 버전은
aws --version | cut -d / -f2 | cut -d ' ' -f1으로 확인할 수 있습니다.yum,apt-get, macOS용 Homebrew 같은 패키지 관리자는 AWS CLI 최신 버전보다 몇 버전 뒤처져 있는 경우가 많습니다. 최신 버전 설치 방법은 AWS Command Line Interface 사용 설명서의 "Installing" 및 "aws configure를 사용한 빠른 구성"을 참고하세요. AWS CloudShell에 설치된 AWS CLI 버전도 최신 버전보다 몇 버전 뒤처져 있을 수 있습니다. 업데이트 방법은 AWS CloudShell 사용 설명서의 "홈 디렉터리에 AWS CLI 설치"를 참고하세요. - 사용 기기나 AWS CloudShell에
kubectl명령줄 도구가 설치되어 있어야 합니다. 버전은 클러스터의 Kubernetes 버전과 같거나 최대 한 개의 부 버전 앞뒤가 될 수 있습니다. 예를 들어 클러스터 버전이1.29라면kubectl버전1.28,1.29,1.30을 사용할 수 있습니다.kubectl설치 또는 업그레이드 방법은 "kubectl 및 eksctl 설정"을 참고하세요. - 클러스터 구성이 포함된 기존
kubectlconfig파일.kubectlconfig파일을 만들려면 "kubeconfig 파일을 만들어 kubectl을 EKS 클러스터에 연결"을 참고하세요.
다음 명령으로 배포 매니페스트를 생성해 구성을 확인하기 위한 Pod를 배포할 수 있습니다. 예제 값을 자신의 값으로 바꾸세요.
cat >my-deployment.yaml
- 이전 단계의 배포로 배포된 Pod를 확인합니다.
kubectl get pods | grep my-app
예제 출력은 다음과 같습니다.
my-app-6f4dfff6cb-76cv9 1/1 Running 0 3m28s
- Pod에 서비스 계정 토큰 파일 마운트가 있는지 확인합니다.
kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE:
예제 출력은 다음과 같습니다.
AWS_CONTAINER_AUTHORIZATION_TOKEN_FILE: /var/run/secrets/pods.eks.amazonaws.com/serviceaccount/eks-pod-identity-token
- Pod가 역할에 연결된 IAM 정책에서 할당한 권한으로 AWS 서비스와 상호작용할 수 있는지 확인합니다.
참고: Pod가 서비스 계정과 연결된 IAM 역할의 AWS 자격 증명을 사용할 때, 해당 Pod의 컨테이너에 있는 AWS CLI나 다른 SDK는 그 역할이 제공하는 자격 증명을 사용합니다. Amazon EKS 노드 IAM 역할에 제공되는 자격 증명에 대한 액세스를 제한하지 않으면 Pod가 여전히 이 자격 증명에 액세스할 수 있습니다. 자세한 내용은 "워커 노드에 할당된 인스턴스 프로파일 액세스 제한"을 참고하세요.
Pod가 예상대로 서비스와 상호작용할 수 없다면 다음 단계를 완료해 모든 것이 올바르게 구성되었는지 확인하세요.
- Pod가 EKS Pod Identity 연결을 통해 IAM 역할 수임을 지원하는 AWS SDK 버전을 사용하는지 확인합니다. 자세한 내용은 "AWS SDK와 함께 pod identity 사용"을 참고하세요.
- 배포가 서비스 계정을 사용하는지 확인합니다.
kubectl describe deployment my-app | grep "Service Account"
예제 출력은 다음과 같습니다.
Service Account: my-service-account