Kubernetes 서비스 계정을 사용하도록 Pods 구성 - Amazon EKS

이 페이지 개선에 도움 주기

이 사용자 설명서에 기여하고 싶으신가요? 이 페이지 하단으로 스크롤하여 GitHub에서 이 페이지 편집을 선택하세요. 여러분의 기여는 모두를 위한 더 나은 사용자 설명서를 만드는 데 도움이 됩니다.

Kubernetes 서비스 계정을 사용하도록 Pods 구성

Pod가 AWS 서비스에 액세스해야 하는 경우 Kubernetes 서비스 계정을 사용하도록 구성해야 합니다. 서비스 계정은 AWS 서비스에 액세스할 수 있는 권한이 있는 AWS Identity and Access Management(IAM) 역할에 연결되어야 합니다.

필수 조건
  • 기존 클러스터가 있어야 합니다. 아직 없는 경우 Amazon EKS 시작하기 가이드 중 하나를 사용하여 생성할 수 있습니다.

  • 기존 Kubernetes 서비스 계정 및 서비스 계정을 IAM 역할에 연결하는 EKS Pod Identity 연결 Pods가 AWS 서비스를 사용하는 데 필요한 권한을 포함하는 연결된 IAM 정책이 역할에 있어야 합니다. 서비스 계정 및 역할을 만들고 구성하는 방법에 대한 자세한 내용을 알아보려면 EKS Pod Identity 관련 IAM 역할을 수임하도록 Kubernetes 서비스 계정 구성 섹션을 참조하세요.

  • AWS CLI의 최신 버전이 디바이스나 AWS CloudShell에 설치 및 구성되어 있어야 합니다. aws --version | cut -d / -f2 | cut -d ' ' -f1을 사용하여 현재 버전을 확인할 수 있습니다. macOS용 yum, apt-get 또는 Homebrew와 같은 패키지 관리자는 최신 버전의 AWS CLI보다 여러 버전 이전인 경우가 많습니다. 최신 버전을 설치하려면 AWS Command Line Interface 사용 설명서의 AWS CLI 설치, 업데이트 및 제거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 설치 또는 업데이트 부분을 참조하세요.

  • 클러스터 구성이 포함된 기존 kubectl config 파일입니다. kubectl config 파일을 생성하려면 Amazon EKS 클러스터용 kubeconfig 파일 생성 또는 업데이트 섹션을 참조하세요.

서비스 계정을 사용하도록 Pod 구성
  1. 다음 명령을 사용하여 구성을 확인할 Pod를 배포할 수 있는 배포 매니페스트를 생성합니다. example values를 고유한 값으로 바꿉니다.

    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
  2. 클러스터에 매니페스트를 배포합니다.

    kubectl apply -f my-deployment.yaml
  3. Pod에 필요한 환경 변수가 있는지 확인합니다.

    1. 이전 단계에서 배포와 함께 배포된 Pods를 봅니다.

      kubectl get pods | grep my-app

      예제 출력은 다음과 같습니다.

      my-app-6f4dfff6cb-76cv9   1/1     Running   0          3m28s
    2. 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
  4. 역할에 연결된 IAM 정책에서 할당한 권한을 사용하여 Pods가 AWS 서비스와 상호 작용할 수 있는지 확인합니다.

    참고

    Pod가 서비스 계정과 연결된 IAM 역할의 AWS 자격 증명을 사용하는 경우 해당 AWS CLI의 컨테이너에 있는 Pod 또는 기타 SDK에서는 이 역할이 제공하는 자격 증명을 사용합니다. Amazon EKS 노드 IAM 역할에 제공된 자격 증명에 대한 액세스를 제한하지 않으면 Pod는 계속해서 해당 자격 증명에 액세스할 수 있습니다. 자세한 내용은 작업자 노드에 할당된 인스턴스 프로파일에 대한 액세스 제한 부분을 참조하세요.

    Pods가 예상대로 서비스와 상호 작용할 수 없으면 다음 단계를 완료하여 모두 제대로 구성되었는지 확인합니다.

    1. Pods에서 EKS Pod Identity 연결을 통해 IAM 역할을 수임할 수 있도록 지원하는 AWS SDK 버전을 사용하는지 확인합니다. 자세한 내용은 지원되는 AWS SDK 사용 단원을 참조하십시오.

    2. 배포에서 서비스 계정을 사용하고 있는지 확인합니다.

      kubectl describe deployment my-app | grep "Service Account"

      예제 출력은 다음과 같습니다.

      Service Account:  my-service-account