

 **이 페이지 개선에 도움 주기** 

이 사용자 가이드에 기여하려면 모든 페이지의 오른쪽 창에 있는 **GitHub에서 이 페이지 편집** 링크를 선택합니다.

# Kubernetes 서비스 계정을 사용하도록 포드 구성
<a name="pod-configuration"></a>

포드가 AWS 서비스에 액세스해야 하는 경우 Kubernetes 서비스 계정을 사용하도록 구성해야 합니다. 서비스 계정은 AWS 서비스에 액세스할 수 있는 권한이 있는 AWS ID 및 액세스 관리(IAM) 역할에 연결되어야 합니다.
+ 기존 클러스터가 있어야 합니다. 아직 없는 경우 [Amazon EKS 시작하기](getting-started.md) 가이드 중 하나를 사용하여 생성할 수 있습니다.
+ 클러스터에 대한 기존 IAM OpenID Connect(OIDC) 공급자. 이미 있는지 확인하거나 생성하는 방법을 알아보려면 [클러스터에 대한 IAM OIDC 공급자 생성](enable-iam-roles-for-service-accounts.md) 섹션을 참조하세요.
+ IAM 역할과 연결된 기존 Kubernetes 서비스 계정. 서비스 계정에 IAM 역할의 Amazon 리소스 이름(ARN)을 주석으로 달아야 합니다. 포드가 AWS 서비스를 사용하는 데 필요한 권한을 포함하는 연결된 IAM 정책이 역할에 있어야 합니다. 서비스 계정 및 역할을 만들고 구성하는 방법에 대한 자세한 내용을 알아보려면 [Kubernetes 서비스 계정에 IAM 역할 할당](associate-service-account-role.md) 섹션을 참조하세요.
+ 장치에 설치 및 구성된 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 명령줄 인터페이스 사용 설명서*에서 [설치](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html) 및 [aws config를 사용하여 빠른 구성](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config)을 참조하세요. AWS CloudShell에 설치된 AWS CLI 버전도 최신 버전보다 여러 버전 이전일 수도 있습니다. 업데이트하려면 * AWS CloudShell 사용 설명서*의 [홈 디렉터리에 AWS CLI 설치하기](https://docs.aws.amazon.com/cloudshell/latest/userguide/vm-specs.html#install-cli-software)를 참조하세요.
+ `kubectl` 명령줄 도구는 장치 또는 AWS CloudShell에 설치됩니다. 버전은 클러스터의 Kubernetes 버전과 동일하거나 최대 하나 이전 또는 이후의 마이너 버전일 수 있습니다. 예를 들어, 클러스터 버전이 `1.29`인 경우 `kubectl` 버전 `1.28`, `1.29` 또는 `1.30`를 함께 사용할 수 있습니다. `kubectl`을 설치하거나 업그레이드하려면 [`kubectl` 및 `eksctl` 설정](install-kubectl.md) 부분을 참조하세요.
+ 클러스터 구성이 포함된 기존 `kubectl` `config` 파일입니다. `kubectl` `config` 파일을 생성하려면 [Kubeconfig 파일을 생성하여 kubectl을 EKS 클러스터에 연결](create-kubeconfig.md) 섹션을 참조하세요.

  1. 다음 명령을 사용하여 구성을 확인할 포드를 배포할 수 있는 배포 매니페스트를 생성합니다. 예제 값을 사용자의 값으로 바꿉니다.

     ```
     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
     ```

  1. 클러스터에 매니페스트를 배포합니다.

     ```
     kubectl apply -f my-deployment.yaml
     ```

  1. 포드에 필요한 환경 변수가 있는지 확인합니다.

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

        ```
        kubectl get pods | grep my-app
        ```

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

        ```
        my-app-6f4dfff6cb-76cv9   1/1     Running   0          3m28s
        ```

     1. 포드가 사용 중인 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 역할 할당](associate-service-account-role.md) 섹션을 참조하세요.

     1. 포드에 웹 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)](https://kubernetes.io/docs/tasks/configure-pod-container/configure-service-account/#serviceaccount-token-volume-projection)을 참조하세요.

        클러스터의 [Amazon EKS Pod Identity 웹후크](https://github.com/aws/amazon-eks-pod-identity-webhook#amazon-eks-pod-identity-webhook)는 다음 주석을 이용해 서비스 계정을 사용하는 포드를 관찰합니다.

        ```
        eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/my-role
        ```

        웹후크는 이전 환경 변수를 해당 포드에 적용합니다. 클러스터는 환경 변수 및 토큰 파일 탑재를 구성하기 위해 웹후크를 사용할 필요가 없습니다. 이러한 환경 변수를 갖도록 포드를 수동으로 구성할 수 있습니다. [지원되는 AWS SDK 버전](iam-roles-for-service-accounts-minimum-sdk.md)은 자격 증명 체인 제공자에서 이 환경 변수를 먼저 찾습니다. 역할 자격 증명은 이 기준을 충족하는 포드에 사용됩니다.

  1. 역할에 연결된 IAM 정책에서 할당한 권한을 사용하여 포드가 AWS 서비스와 상호 작용할 수 있는지 확인합니다.
**참고**  
포드가 서비스 계정과 연결된 IAM 역할의 AWS 자격 증명을 사용하는 경우 해당 포드의 컨테이너에 있는 AWS CLI나 다른 SDK는 역할이 제공하는 자격 증명을 사용합니다. [Amazon EKS 노드 IAM 역할](create-node-role.md)에 제공된 자격 증명에 대한 액세스를 제한하지 않으면 포드는 계속해서 해당 자격 증명에 액세스할 수 있습니다. 자세한 내용은 [작업자 노드에 할당된 인스턴스 프로필에 대한 액세스 제한](https://aws.github.io/aws-eks-best-practices/security/docs/iam/#restrict-access-to-the-instance-profile-assigned-to-the-worker-node) 부분을 참조하세요.

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

     1. 포드에서 OpenID Connect 웹 ID 토큰 파일을 통해 IAM 역할을 수임할 수 있도록 지원하는 AWS SDK 버전을 사용하는지 확인합니다. 자세한 내용은 [AWS SDK와 함께 IRSA 사용](iam-roles-for-service-accounts-minimum-sdk.md) 섹션을 참조하세요.

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

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

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

        ```
        Service Account:  my-service-account
        ```

     1. 포드가 여전히 서비스에 액세스할 수 없는 경우 [IAM 역할을 쿠버네티스 서비스 계정에 할당하기](associate-service-account-role.md)에 설명된 [단계](associate-service-account-role.md#irsa-confirm-role-configuration)를 검토하여 역할과 서비스 계정이 올바르게 구성되었는지 확인합니다.