

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# 1단계: Amazon EKS 클러스터 구성 및 IAM 권한 설정
<a name="EKS-tutorial-step1"></a>

**Amazon EKS 클러스터를 구성하고 Amazon EKS 서비스 계정이 Amazon Keyspaces 테이블에 연결되도록 허용하는 데 필요한 IAM 리소스를 생성합니다.**

1. Amazon EKS 클러스터에 대한 Open ID Connect(OIDC) 공급자를 생성합니다. 이는 서비스 계정에 IAM 역할을 사용하는 데 필요합니다. OIDC 공급자 및 이를 생성하는 방법에 대한 자세한 내용은 **Amazon EKS 사용 설명서의 [클러스터에 대한 IAM OIDC 공급자 생성](https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html)을 참조하세요.

   1. 다음 명령을 사용하여 클러스터의 IAM OIDC ID 공급자를 생성합니다. 이 예제에서는 클러스터 이름을 `my-eks-cluster`라고 가정합니다. 이름이 다른 클러스터가 있는 경우 향후 모든 명령에서 이름을 업데이트해야 합니다.

      ```
      eksctl utils associate-iam-oidc-provider --cluster my-eks-cluster --approve 
      ```

   1. OIDC ID 공급자가 다음 명령을 사용하여 IAM에 등록되었는지 확인합니다.

      ```
      aws iam list-open-id-connect-providers --region us-east-1
      ```

      결과는 다음과 비슷해야 합니다. OIDC의 Amazon 리소스 이름(ARN)을 기록해 둡니다. 서비스 계정에 대한 신뢰 정책을 생성할 때 다음 단계에서 필요합니다.

      ```
      {
          "OpenIDConnectProviderList": [
              ..
              {
                  "Arn": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
              }
          ]
      }
      ```

1. Amazon EKS 클러스터의 서비스 계정을 생성합니다. 서비스 계정은 *포드*에서 실행되는 프로세스의 ID를 제공합니다. 포드는 컨테이너화된 애플리케이션을 배포하는 데 사용할 수 있는 가장 작고 간단한 Kubernetes 객체입니다. 그런 다음 서비스 계정이 리소스에 대한 권한을 얻기 위해 수임할 수 있는 IAM 역할을 생성합니다. 해당 AWS 서비스에 대한 액세스 권한이 있는 IAM 역할을 수임할 수 있는 서비스 계정을 사용하도록 구성된 포드에서 모든 서비스에 액세스할 수 있습니다.

   1. 서비스 계정의 새 네임스페이스를 생성합니다. 네임스페이스는 이 자습서를 위해 생성된 클러스터 리소스를 격리하는 데 도움이 됩니다. 다음 명령을 사용하여 새 네임스페이스를 생성할 수 있습니다.

      ```
      kubectl create namespace my-eks-namespace
      ```

   1. 사용자 지정 네임스페이스를 사용하려면 이를 Fargate 프로필과 연결해야 합니다. 다음 코드는 이에 대한 예입니다.

      ```
      eksctl create fargateprofile \
          --cluster my-eks-cluster \
          --name my-fargate-profile \
          --namespace my-eks-namespace \
          --labels *=*
      ```

   1. 다음 명령을 사용하여 Amazon EKS 클러스터의 네임스페이스 `my-eks-namespace`에 이름이 `my-eks-serviceaccount`인 서비스 계정을 생성합니다.

      ```
      cat >my-serviceaccount.yaml <<EOF
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: my-eks-serviceaccount
        namespace: my-eks-namespace
      EOF
      kubectl apply -f my-serviceaccount.yaml
      ```

   1. 다음 명령을 실행하여 IAM 역할에 서비스 계정을 신뢰하도록 지시하는 신뢰 정책 파일을 생성합니다. 위탁자가 역할을 수임하려면 먼저 이 신뢰 관계가 필요합니다. 파일을 다음과 같이 편집해야 합니다.
      + `Principal`에 IAM이 `list-open-id-connect-providers` 명령으로 반환한 ARN을 입력합니다. ARN에는 계정 번호와 리전이 포함됩니다.
      + `condition` 문에서 AWS 리전 및 OIDC ID를 바꿉니다.
      + 서비스 계정 이름과 네임스페이스가 올바른지 확인합니다.

      IAM 역할을 생성할 때 다음 단계에서 신뢰 정책 파일을 연결해야 합니다.

      ```
      cat >trust-relationship.json <<EOF
      {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
                  },
                  "Action": "sts:AssumeRoleWithWebIdentity",
                  "Condition": {
                      "StringEquals": {
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:my-eks-namespace:my-eks-serviceaccount",
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com"
                      }
                  }
              }
          ]
      }
      EOF
      ```

      선택 사항: 여러 서비스 계정 또는 네임스페이스가 역할을 수임할 수 있도록 `StringEquals` 또는 `StringLike` 조건에 여러 항목을 추가할 수도 있습니다. 서비스 계정이 다른 AWS 계정에서 IAM 역할을 수임하도록 허용하려면 **Amazon EKS 사용 설명서의 [교차 계정 IAM 권한](https://docs.aws.amazon.com/eks/latest/userguide/cross-account-access.html)을 참조하세요.

1. 수임할 Amazon EKS 서비스 계정의 이름 `my-iam-role`로 IAM 역할을 생성합니다. 마지막 단계에서 생성된 신뢰 정책 파일을 역할에 연결합니다. 신뢰 정책은 IAM 역할이 신뢰할 수 있는 서비스 계정 및 OIDC 공급자를 지정합니다.

   ```
   aws iam create-role --role-name my-iam-role --assume-role-policy-document file://trust-relationship.json --description "EKS service account role"
   ```

1. 액세스 정책을 연결하여 Amazon Keyspaces에 IAM 역할 권한을 할당합니다.

   1. 액세스 정책을 연결하여 특정 Amazon Keyspaces 리소스에서 IAM 역할이 수행할 수 있는 작업을 정의합니다. 이 자습서에서는 애플리케이션이 Amazon Keyspaces 테이블에 데이터를 쓰기 `AmazonKeyspacesFullAccess`때문에 AWS 관리형 정책를 사용합니다. 하지만 가장 좋은 방법은 최소 권한 원칙을 구현하는 사용자 지정 액세스 정책을 생성하는 것입니다. 자세한 내용은 [Amazon Keyspaces에서 IAM을 사용하는 방법](security_iam_service-with-iam.md) 단원을 참조하십시오.

      ```
      aws iam attach-role-policy --role-name my-iam-role --policy-arn=arn:aws:iam::aws:policy/AmazonKeyspacesFullAccess
      ```

      다음 문을 사용하여 정책이 IAM 역할에 성공적으로 연결되었는지 확인합니다.

      ```
      aws iam list-attached-role-policies --role-name my-iam-role
      ```

      결과는 다음과 같아야 합니다.

      ```
      {
          "AttachedPolicies": [
              {
                  "PolicyName": "AmazonKeyspacesFullAccess",
                  "PolicyArn": "arn:aws:iam::aws:policy/AmazonKeyspacesFullAccess"
              }
          ]
      }
      ```

   1. 서비스 계정에 해당 계정이 수임할 수 있는 IAM 역할의 Amazon 리소스 이름(ARN)을 주석으로 추가합니다. 계정 ID로 역할 ARN을 업데이트해야 합니다.

      ```
      kubectl annotate serviceaccount -n my-eks-namespace my-eks-serviceaccount eks.amazonaws.com/role-arn=arn:aws:iam::111122223333:role/my-iam-role
      ```

1. IAM 역할과 서비스 계정이 올바르게 구성되었는지 확인합니다.

   1. 다음 문을 사용하여 IAM 역할의 신뢰 정책이 올바르게 구성되었는지 확인합니다.

      ```
      aws iam get-role --role-name my-iam-role --query Role.AssumeRolePolicyDocument
      ```

      결과는 다음과 비슷해야 합니다.

      ```
      {
          "Version": "2012-10-17",		 	 	 
          "Statement": [
              {
                  "Effect": "Allow",
                  "Principal": {
                      "Federated": "arn:aws:iam::111122223333:oidc-provider/oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE"
                  },
                  "Action": "sts:AssumeRoleWithWebIdentity",
                  "Condition": {
                      "StringEquals": {
                          "oidc.eks.us-east-1/id/EXAMPLED539D4633E53DE1B71EXAMPLE:aud": "sts.amazonaws.com",
                          "oidc.eks.us-east-1.amazonaws.com/id/EXAMPLED539D4633E53DE1B71EXAMPLE:sub": "system:serviceaccount:my-eks-namespace:my-eks-serviceaccount"
                      }
                  }
              }
          ]
      }
      ```

   1. Amazon EKS 서비스 계정에 IAM 역할이 주석으로 달렸는지 확인합니다.

      ```
      kubectl describe serviceaccount my-eks-serviceaccount -n my-eks-namespace
      ```

      결과는 다음과 비슷해야 합니다.

      ```
      Name: my-eks-serviceaccount 
      Namespace:my-eks-namespace
      Labels: <none>
      Annotations: eks.amazonaws.com/role-arn: arn:aws:iam::111122223333:role/my-iam-role 
      Image pull secrets: <none> 
      Mountable secrets: <none> 
      Tokens: <none> 
      [...]
      ```

Amazon EKS 서비스 계정, IAM 역할을 생성하고 필요한 관계 및 권한을 구성한 후 [2단계: 애플리케이션 구성](EKS-tutorial-step2.md)로 진행합니다.