

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

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

# 기존 클러스터에서 KMS를 사용하여 Kubernetes 비밀 암호화
<a name="enable-kms"></a>

**중요**  
이 절차는 Kubernetes 버전 1.27 이하가 실행되는 EKS 클러스터에만 적용됩니다. Kubernetes 버전 1.28 이상을 실행하는 경우 Kubernetes 비밀은 기본적으로 봉투 암호화로 보호됩니다. 자세한 내용은 [모든 Kubernetes API 데이터에 대한 기본 봉투 암호화](envelope-encryption.md) 섹션을 참조하세요.

[비밀 암호화](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/)를 사용 설정하는 경우 Kubernetes 비밀은 선택한 AWS KMS 키를 사용하여 암호화됩니다. KMS 키는 다음 조건을 충족해야 합니다.
+ 대칭
+ 데이터 암호화 및 해독 가능
+ 클러스터와 같은 AWS 리전에 생성됨
+ KMS 키가 다른 계정에서 생성된 경우 [IAM 보안 주체](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html#iam-term-principal)는 KMS 키에 액세스할 수 있어야 합니다.

자세한 내용은 * [AWS 키 관리 서비스 개발자 가이드](https://docs.aws.amazon.com/kms/latest/developerguide/)*에서 [다른 계정의 IAM 주체가 KMS 키를 사용하도록 허용하기](https://docs.aws.amazon.com/kms/latest/developerguide/key-policy-modifying-external-accounts.html)를 참조하세요.

**주의**  
비밀 암호화를 사용 설정한 후에는 사용 중지할 수 없습니다. 이 작업은 되돌릴 수 없습니다.

eksctl   
이 절차는 Kubernetes 버전 1.27 이하가 실행되는 EKS 클러스터에만 적용됩니다. 자세한 내용은 [모든 Kubernetes API 데이터에 대한 기본 봉투 암호화](envelope-encryption.md) 섹션을 참조하세요.

다음 두 가지 방법으로 암호화를 활성화할 수 있습니다.
+ 단일 명령으로 클러스터에 암호화를 추가합니다.

  비밀을 자동으로 다시 암호화하려면 다음 명령을 실행합니다.

  ```
  eksctl utils enable-secrets-encryption \
      --cluster my-cluster \
      --key-arn arn:aws:kms:region-code:account:key/key
  ```

  비밀을 자동으로 다시 암호화하는 것을 옵트아웃하려면 다음 명령을 실행합니다.

  ```
  eksctl utils enable-secrets-encryption
      --cluster my-cluster \
      --key-arn arn:aws:kms:region-code:account:key/key \
      --encrypt-existing-secrets=false
  ```
+ `kms-cluster.yaml` 파일을 사용하여 클러스터에 암호화를 추가합니다.

  ```
  apiVersion: eksctl.io/v1alpha5
  kind: ClusterConfig
  
  metadata:
    name: my-cluster
    region: region-code
  
  secretsEncryption:
    keyARN: arn:aws:kms:region-code:account:key/key
  ```

  비밀을 자동으로 다시 암호화하려면 다음 명령을 실행합니다.

  ```
  eksctl utils enable-secrets-encryption -f kms-cluster.yaml
  ```

  비밀을 자동으로 다시 암호화하는 것을 옵트아웃하려면 다음 명령을 실행합니다.

  ```
  eksctl utils enable-secrets-encryption -f kms-cluster.yaml --encrypt-existing-secrets=false
  ```  
 AWS Management Console   

  1. 이 절차는 Kubernetes 버전 1.27 이하가 실행되는 EKS 클러스터에만 적용됩니다. 자세한 내용은 [모든 Kubernetes API 데이터에 대한 기본 봉투 암호화](envelope-encryption.md) 섹션을 참조하세요.

  1. [Amazon EKS 콘솔](https://console.aws.amazon.com/eks/home#/clusters)을 엽니다.

  1. KMS 암호화를 추가하려는 클러스터를 선택합니다.

  1. **개요** 탭을 선택합니다(기본적으로 선택되어 있음).

  1. 아래로 스크롤하여 **비밀 암호화** 섹션으로 이동하고 **활성화**를 선택합니다.

  1. 드롭다운 목록에서 키를 선택하고 **활성화** 버튼을 선택합니다. 나열된 키가 없으면 먼저 키를 생성해야 합니다. 자세한 내용은 [키 생성](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)을 참조하세요.

  1. **확인** 버튼을 선택하고 선택한 키를 사용합니다.  
 AWS CLI  

  1. 이 절차는 Kubernetes 버전 1.27 이하가 실행되는 EKS 클러스터에만 적용됩니다. 자세한 내용은 [모든 Kubernetes API 데이터에 대한 기본 봉투 암호화](envelope-encryption.md) 섹션을 참조하세요.

  1. 다음 AWS CLI 명령을 사용하여 [비밀 암호화](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/) 구성을 클러스터와 연결합니다. 예제 값을 사용자의 값으로 바꿉니다.

     ```
     aws eks associate-encryption-config \
         --cluster-name my-cluster \
         --encryption-config '[{"resources":["secrets"],"provider":{"keyArn":"arn:aws:kms:region-code:account:key/key"}}]'
     ```

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

     ```
     {
       "update": {
         "id": "3141b835-8103-423a-8e68-12c2521ffa4d",
         "status": "InProgress",
         "type": "AssociateEncryptionConfig",
         "params": [
           {
             "type": "EncryptionConfig",
             "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"
           }
         ],
         "createdAt": 1613754188.734,
         "errors": []
       }
     }
     ```

  1. 다음 명령을 사용하여 암호화 업데이트의 상태를 모니터링할 수 있습니다. 이전 출력에서 반환된 특정 `cluster name` 및 `update ID`를 사용합니다. `Successful` 상태가 표시되면 업데이트가 완료됩니다.

     ```
     aws eks describe-update \
         --region region-code \
         --name my-cluster \
         --update-id 3141b835-8103-423a-8e68-12c2521ffa4d
     ```

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

     ```
     {
       "update": {
         "id": "3141b835-8103-423a-8e68-12c2521ffa4d",
         "status": "Successful",
         "type": "AssociateEncryptionConfig",
         "params": [
           {
             "type": "EncryptionConfig",
             "value": "[{\"resources\":[\"secrets\"],\"provider\":{\"keyArn\":\"arn:aws:kms:region-code:account:key/key\"}}]"
           }
         ],
         "createdAt": 1613754188.734>,
         "errors": []
       }
     }
     ```

  1. 클러스터에서 암호화가 활성화되었는지 확인하려면 `describe-cluster` 명령를 실행합니다. 응답에는 `EncryptionConfig` 문자열이 포함됩니다.

     ```
     aws eks describe-cluster --region region-code --name my-cluster
     ```

클러스터에서 암호화를 사용 설정한 후에는 기존 비밀을 모두 새 키로 암호화해야 합니다.

**참고**  
`eksctl`을 사용하면 비밀을 자동으로 다시 암호화하는 것을 옵트아웃하는 경우에만 다음 명령을 실행해야 합니다.

```
kubectl get secrets --all-namespaces -o json | kubectl annotate --overwrite -f - kms-encryption-timestamp="time value"
```

**주의**  
기존 클러스터에 대해 [비밀 암호화](https://kubernetes.io/docs/tasks/administer-cluster/encrypt-data/)를 사용 설정하고 사용하는 KMS 키가 삭제된 경우에는 클러스터 복구 경로가 없습니다. KMS 키를 삭제하면 클러스터가 영구적으로 성능 저하 상태가 됩니다. 자세한 내용은 [AWS KMS 키](https://docs.aws.amazon.com/kms/latest/developerguide/deleting-keys.html)를 참조하세요.

**참고**  
기본적으로 `create-key` 명령은 AWS KMS 작업 및 리소스에 대한 액세스 권한을 계정 루트 관리자에게 부여하는 키 정책으로 [대칭 암호화 KMS 키](https://docs.aws.amazon.com/kms/latest/developerguide/symmetric-asymmetric.html)를 생성합니다. 권한을 축소하려면 `create-cluster` API를 직접 호출할 보안 주체의 정책에서 `kms:DescribeKey` 및 `kms:CreateGrant` 작업이 허용되는지 확인합니다.  
KMS 봉투 암호화를 사용하는 클러스터의 경우 `kms:CreateGrant` 권한이 필요합니다. 조건 `kms:GrantIsForAWSResource`는 CreateCluster 작업에 대해 지원되지 않으며, CreateCluster를 수행하는 사용자에 대한 `kms:CreateGrant` 권한을 제어하기 위해 KMS 정책을 사용해서는 안 됩니다.