이 페이지 개선에 도움 주기
이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 GitHub에서 이 페이지 편집 링크를 선택합니다.
Kubernetes 서비스 계정을 사용하도록 포드 구성
포드가 AWS 서비스에 액세스해야 하는 경우 Kubernetes 서비스 계정을 사용하도록 구성해야 합니다. 서비스 계정은 AWS 서비스에 액세스할 수 있는 권한이 있는 AWS ID 및 액세스 관리(IAM) 역할에 연결되어야 합니다.
-
기존 클러스터가 있어야 합니다. 아직 없는 경우 Amazon EKS 시작하기 가이드 중 하나를 사용하여 생성할 수 있습니다.
-
클러스터에 대한 기존 IAM OpenID Connect(OIDC) 공급자. 이미 있는지 확인하거나 생성하는 방법을 알아보려면 클러스터에 대한 IAM OIDC 공급자 생성 섹션을 참조하세요.
-
IAM 역할과 연결된 기존 Kubernetes 서비스 계정. 서비스 계정에 IAM 역할의 Amazon 리소스 이름(ARN)을 주석으로 달아야 합니다. 포드가 AWS 서비스를 사용하는 데 필요한 권한을 포함하는 연결된 IAM 정책이 역할에 있어야 합니다. 서비스 계정 및 역할을 만들고 구성하는 방법에 대한 자세한 내용을 알아보려면 Kubernetes 서비스 계정에 IAM 역할 할당 섹션을 참조하세요.
-
장치에 설치 및 구성된 AWS 명령줄 인터페이스(AWS CLI)의 버전
2.12.3
이상 또는 버전1.27.160
이상 또는 AWS CloudShell. 현재 버전을 확인하려면aws --version | cut -d / -f2 | cut -d ' ' -f1
을 사용합니다.yum
,apt-get
또는 macOS용 Homebrew와 같은 패키지 관리자는 최신 버전의 AWS CLI 이전에 나온 버전이 몇 가지 있을 때도 있습니다. 최신 버전을 설치하려면 AWS 명령줄 인터페이스 사용 설명서에서 설치 및 aws config를 사용하여 빠른 구성을 참조하세요. AWS CloudShell에 설치된 AWS CLI 버전도 최신 버전보다 여러 버전 이전일 수도 있습니다. 업데이트하려면 AWS CloudShell 사용 설명서의 홈 디렉터리에 AWS CLI 설치하기를 참조하세요. -
kubectl
명령줄 도구는 장치 또는 AWS CloudShell에 설치됩니다. 버전은 클러스터의 Kubernetes 버전과 동일하거나 최대 하나 이전 또는 이후의 마이너 버전일 수 있습니다. 예를 들어, 클러스터 버전이1.29
인 경우kubectl
버전1.28
,1.29
또는1.30
를 함께 사용할 수 있습니다.kubectl
을 설치하거나 업그레이드하려면 kubectl 및 eksctl 설정 부분을 참조하세요. -
클러스터 구성이 포함된 기존
kubectl
config
파일입니다.kubectl
config
파일을 생성하려면 Kubeconfig 파일을 생성하여 kubectl을 EKS 클러스터에 연결 섹션을 참조하세요.-
다음 명령을 사용하여 구성을 확인할 포드를 배포할 수 있는 배포 매니페스트를 생성합니다.
예제 값
을 사용자의 값으로 바꿉니다.cat >my-deployment.yaml <<EOF apiVersion: apps/v1 kind: Deployment metadata: name: my-app spec: selector: matchLabels: app: my-app template: metadata: labels: app: my-app spec: serviceAccountName: my-service-account containers: - name: my-app image: public.ecr.aws/nginx/nginx:X.XX EOF
-
클러스터에 매니페스트를 배포합니다.
kubectl apply -f my-deployment.yaml
-
포드에 필요한 환경 변수가 있는지 확인합니다.
-
이전 단계에서 배포와 함께 배포된 포드를 봅니다.
kubectl get pods | grep my-app
예제 출력은 다음과 같습니다.
my-app-6f4dfff6cb-76cv9 1/1 Running 0 3m28s
-
포드가 사용 중인 IAM 역할의 ARN을 봅니다.
kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_ROLE_ARN:
예제 출력은 다음과 같습니다.
AWS_ROLE_ARN: arn:aws:iam::111122223333:role/my-role
역할 ARN이 기존 서비스 계정에 주석으로 단 역할 ARN과 일치해야 합니다. 서비스 계정에 주석 달기에 대한 자세한 내용을 알아보려면 Kubernetes 서비스 계정에 IAM 역할 할당 섹션을 참조하세요.
-
포드에 웹 ID 토큰 파일 탑재가 있는지 확인합니다.
kubectl describe pod my-app-6f4dfff6cb-76cv9 | grep AWS_WEB_IDENTITY_TOKEN_FILE:
예제 출력은 다음과 같습니다.
AWS_WEB_IDENTITY_TOKEN_FILE: /var/run/secrets/eks.amazonaws.com/serviceaccount/token
kubelet
은 포드를 대신하여 토큰을 요청하고 저장합니다. 기본적으로kubelet
은 총 TTL(Time To Live)의 80% 또는 24시간보다 오래된 토큰을 새로 고칩니다. 포드 사양의 설정을 사용하여 기본 서비스 계정을 제외한 모든 계정의 만료 기간을 수정할 수 있습니다. 자세한 내용은 Kubernetes 문서의 서비스 계정 토큰 볼륨 예측(Service Account Token Volume Projection)을 참조하세요. 클러스터의 Amazon EKS Pod Identity 웹후크
는 다음 주석을 이용해 서비스 계정을 사용하는 포드를 관찰합니다. eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/my-role
웹후크는 이전 환경 변수를 해당 포드에 적용합니다. 클러스터는 환경 변수 및 토큰 파일 탑재를 구성하기 위해 웹후크를 사용할 필요가 없습니다. 이러한 환경 변수를 갖도록 포드를 수동으로 구성할 수 있습니다. 지원되는 AWS SDK 버전은 자격 증명 체인 제공자에서 이 환경 변수를 먼저 찾습니다. 역할 자격 증명은 이 기준을 충족하는 포드에 사용됩니다.
-
-
역할에 연결된 IAM 정책에서 할당한 권한을 사용하여 포드가 AWS 서비스와 상호 작용할 수 있는지 확인합니다.
참고
포드가 서비스 계정과 연결된 IAM 역할의 AWS 자격 증명을 사용하는 경우 해당 포드의 컨테이너에 있는 AWS CLI나 다른 SDK는 역할이 제공하는 자격 증명을 사용합니다. Amazon EKS 노드 IAM 역할에 제공된 자격 증명에 대한 액세스를 제한하지 않으면 포드는 계속해서 해당 자격 증명에 액세스할 수 있습니다. 자세한 내용은 작업자 노드에 할당된 인스턴스 프로필에 대한 액세스 제한
부분을 참조하세요. 포드가 예상대로 서비스와 상호 작용할 수 없으면 다음 단계를 완료하여 모두 제대로 구성되었는지 확인합니다.
-
포드에서 OpenID Connect 웹 ID 토큰 파일을 통해 IAM 역할을 수임할 수 있도록 지원하는 AWS SDK 버전을 사용하는지 확인합니다. 자세한 내용은 AWS SDK와 함께 IRSA 사용 단원을 참조하십시오.
-
배포에서 서비스 계정을 사용하고 있는지 확인합니다.
kubectl describe deployment my-app | grep "Service Account"
예제 출력은 다음과 같습니다.
Service Account: my-service-account
-
포드가 여전히 서비스에 액세스할 수 없는 경우 IAM 역할을 쿠버네티스 서비스 계정에 할당하기에 설명된 단계를 검토하여 역할과 서비스 계정이 올바르게 구성되었는지 확인합니다.
-
-