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

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

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

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

  • 클러스터에 대한 기존 IAM OpenID Connect(OIDC) 제공업체입니다. 이미 있는지 확인하거나 생성하는 방법을 알아보려면 클러스터에 대한 IAM OIDC 공급자 생성 섹션을 참조하세요.

  • IAM 역할과 연결된 기존 Kubernetes 서비스 계정. 서비스 계정에 IAM 역할의 Amazon 리소스 이름(ARN)을 주석으로 달아야 합니다. Pods가 AWS 서비스를 사용하는 데 필요한 권한을 포함하는 연결된 IAM 정책이 역할에 있어야 합니다. 서비스 계정 및 역할을 만들고 구성하는 방법에 대한 자세한 내용을 알아보려면 IAM 역할을 수임하도록 Kubernetes 서비스 계정 구성 섹션을 참조하세요.

  • AWS Command Line Interface(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 Command Line Interface 사용 설명서의 AWS CLI 설치, 업데이트 및 제거aws configure를 통한 빠른 구성을 참조하세요. AWS CloudShell에 설치된 AWS CLI 버전도 최신 버전보다 여러 버전 이전일 수도 있습니다. 업데이트하려면 AWS CloudShell 사용 설명서의 홈 디렉터리에 AWS CLI 설치를 참조하세요.

  • 디바이스 또는 AWS CloudShell에 설치된 kubectl 명령줄 도구. 버전은 클러스터의 Kubernetes 버전과 동일하거나 최대 하나 이전 또는 이후의 마이너 버전일 수 있습니다. 예를 들어 클러스터 버전이 1.28인 경우 kubectl 버전 1.27, 1.28 또는 1.29를 함께 사용할 수 있습니다. 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가 사용 중인 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과 일치해야 합니다. 서비스 계정에 주석 달기에 대한 자세한 내용을 알아보려면 IAM 역할을 수임하도록 Kubernetes 서비스 계정 구성 섹션을 참조하세요.

    3. 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 버전은 자격 증명 체인 제공자에서 이 환경 변수를 먼저 찾습니다. 역할 자격 증명은 이 기준을 충족하는 Pods에 사용됩니다.

  4. 역할에 연결된 IAM 정책에서 할당한 권한을 사용하여 Pods가 AWS 서비스와 상호 작용할 수 있는지 확인합니다.

    참고

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

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

    1. Pods에서 OpenID Connect 웹 ID 토큰 파일을 통해 IAM 역할을 수임할 수 있도록 지원하는 AWS SDK 버전을 사용하는지 확인합니다. 자세한 내용은 지원되는 AWS SDK 사용 단원을 참조하십시오.

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

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

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

      Service Account:  my-service-account
    3. Pods가 여전히 서비스에 액세스할 수 없는 경우 IAM 역할을 수임하도록 Kubernetes 서비스 계정 구성에 설명된 단계를 검토하여 역할 및 서비스 계정이 제대로 구성되었는지 확인합니다.