Kubernetes 서비스 계정을 사용하도록 Pods 구성
Pod가 AWS 서비스에 액세스해야 하는 경우 Kubernetes 서비스 계정을 사용하도록 구성해야 합니다. 서비스 계정은 AWS 서비스에 액세스할 수 있는 권한이 있는 AWS ID 및 액세스 관리(IAM) 역할에 연결되어야 합니다.
-
기존 클러스터가 있어야 합니다. 아직 없는 경우 Amazon EKS 시작하기 가이드 중 하나를 사용하여 생성할 수 있습니다.
-
클러스터에 대한 기존 IAM OpenID Connect(OIDC) 제공업체입니다. 이미 있는지 확인하거나 생성하는 방법을 알아보려면 클러스터에 대한 IAM OIDC 공급자 생성 섹션을 참조하세요.
-
IAM 역할과 연결된 기존 Kubernetes 서비스 계정. 서비스 계정에 IAM 역할의 Amazon 리소스 이름(ARN)을 주석으로 달아야 합니다. Pods가 AWS 서비스를 사용하는 데 필요한 권한을 포함하는 연결된 IAM 정책이 역할에 있어야 합니다. 서비스 계정 및 역할을 만들고 구성하는 방법에 대한 자세한 내용을 알아보려면 Kubernetes 서비스 계정에 IAM 역할 할당 섹션을 참조하세요.
-
장치에 설치 및 구성된 AWS 명령줄 인터페이스(AWS CLI)의 버전
2.12.3
이상 또는 버전1.27.160
이상 또는 AWS CloudShell. 현재 버전을 확인하려면aws --version | cut -d / -f2 | cut -d ' ' -f1
을 사용합니다. macOS용yum
,apt-get
또는 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 클러스터에 연결 섹션을 참조하세요.-
다음 명령을 사용하여 구성을 확인할 Pod를 배포할 수 있는 배포 매니페스트를 생성합니다.
예제 값
을 사용자의 값으로 바꿉니다.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
-
Pod에 필요한 환경 변수가 있는지 확인합니다.
-
이전 단계에서 배포와 함께 배포된 Pods를 봅니다.
kubectl get pods | grep my-app
예제 출력은 다음과 같습니다.
my-app-6f4dfff6cb-76cv9 1/1 Running 0 3m28s
-
Pod가 사용 중인 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 역할 할당 섹션을 참조하세요.
-
Pod에 웹 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
은 Pod를 대신하여 토큰을 요청하고 저장합니다. 기본적으로kubelet
은 총 TTL(Time To Live)의 80% 또는 24시간보다 오래된 토큰을 새로 고칩니다. Pod 사양의 설정을 사용하여 기본 서비스 계정을 제외한 모든 계정의 만료 기간을 수정할 수 있습니다. 자세한 내용은 Kubernetes 설명서의 서비스 계정 토큰 볼륨 예측(Service Account Token Volume Projection)을 참조하세요. 클러스터의 Amazon EKS Pod Identity 웹후크
는 다음 주석을 이용해 서비스 계정을 사용하는 Pods를 관찰합니다. eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/my-role
웹후크는 이전 환경 변수를 해당 Pods에 적용합니다. 클러스터는 환경 변수 및 토큰 파일 탑재를 구성하기 위해 웹후크를 사용할 필요가 없습니다. 이러한 환경 변수를 갖도록 Pods를 수동으로 구성할 수 있습니다. AWS SDK와 함께 IRSA 사용지원되는 AWS SDK 버전은 자격 증명 체인 제공자에서 이 환경 변수를 먼저 찾습니다. 역할 자격 증명은 이 기준을 충족하는 Pods에 사용됩니다.
-
-
역할에 연결된 IAM 정책에서 할당한 권한을 사용하여 Pods가 AWS 서비스와 상호 작용할 수 있는지 확인합니다.
참고
Pod가 서비스 계정과 연결된 IAM 역할의 AWS 자격 증명을 사용하는 경우 해당 AWS CLI의 컨테이너에 있는 Pod 또는 기타 SDK에서는 이 역할이 제공하는 자격 증명을 사용합니다. Amazon EKS 노드 IAM 역할Amazon EKS 노드 IAM 역할에 제공된 자격 증명에 대한 액세스를 제한하지 않으면 Pod는 계속해서 해당 자격 증명에 액세스할 수 있습니다. 자세한 내용은 작업자 노드에 할당된 인스턴스 프로파일에 대한 액세스 제한
부분을 참조하세요. Pods가 예상대로 서비스와 상호 작용할 수 없으면 다음 단계를 완료하여 모두 제대로 구성되었는지 확인합니다.
-
Pods에서 OpenID Connect 웹 ID 토큰 파일을 통해 IAM 역할을 수임할 수 있도록 지원하는 AWS SDK 버전을 사용하는지 확인합니다. 자세한 내용은 AWS SDK와 함께 IRSA 사용 단원을 참조하십시오.
-
배포에서 서비스 계정을 사용하고 있는지 확인합니다.
kubectl describe deployment my-app | grep "Service Account"
예제 출력은 다음과 같습니다.
Service Account: my-service-account
-
Pods가 여전히 서비스에 액세스할 수 없는 경우, Kubernetes 서비스 계정에 IAM 역할 할당에 설명된 3단계: 구성 확인 단계을 검토하여 역할과 서비스 계정이 올바르게 구성되었는지 확인합니다.IAM 역할을 쿠버네티스 서비스 계정에 할당하기.
-
-