클러스터의 보안 키 순환

키 순환

키 순환은 키 암호화 키(KEK)에 포함된 기본 암호화 자료를 변경하는 작업입니다. 예약된 순환에 따라 자동으로 또는 키가 손상되었을 수 있는 보안 사고가 발생한 후 수동으로 키 순환을 트리거할 수 있습니다. 키 순환을 수행하면 키에서 원시 암호화/복호화 키 데이터가 포함된 단일 필드만 바뀝니다.

자동 키 순환

AWS 키 관리 서비스(KMS)는 KMS 키의 자동 순환을 지원합니다. 사용 설정하면 AWS에서 키에 대한 새 암호화 키 자료를 1년에 한 번 자동으로 생성합니다. 직접 조치를 취할 필요는 없습니다.

키 순환 다음에는 AWS용 GKE가 새 키를 사용해서 새로운 보안 비밀을 암호화합니다. 이전에 생성된 보안 비밀은 여전히 원래 키를 사용하여 복호화됩니다. 따라서 AWS는 CMK의 이전 키 자료를 영구적으로 보관해서 이전 보안 비밀이 읽혀질 때 이전 DEK를 복호화할 수 있게 해줍니다.

다음 명령어를 사용해서 KMS 키의 자동 순환이 사용 설정되었는지 여부를 확인할 수 있습니다.

aws kms get-key-rotation --key-id KMS_KEY_ID

KMS_KEY_ID를 AWS KMS 키 ID로 바꿉니다.

다음 명령어를 실행하여 자동 키 순환을 사용 설정할 수 있습니다.

aws kms enable-key-rotation --key-id KMS_KEY_ID

수동 키 순환

이 섹션에서는 제어 영역 또는 노드 풀 구성 키를 수동으로 순환하는 방법을 설명합니다.

제어 영역 구성 키

제어 영역 구성 키를 수동으로 순환하려면 다음 단계를 수행하세요.

  1. 새 Cloud Key Management Service 키를 만듭니다. KMS 키 ARN의 값을 저장합니다. 이 값은 나중에 사용하게 됩니다.

  2. 클러스터와 연결된 IAM 역할에 새 키를 사용한 암호화 및 복호화 권한이 있는지 확인합니다.

  3. gcloud container aws clusters update 명령어를 사용하여 암호화 키를 업데이트합니다.

     gcloud container aws clusters update CLUSTER_NAME \
        --location=GOOGLE_CLOUD_LOCATION \
        --config-encryption-kms-key-arn=CONFIG_ENCRYPTION_KMS_KEY_ARN
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 클러스터 이름
    • GOOGLE_CLOUD_LOCATION: 클러스터를 관리하는 지원되는 Google Cloud 리전(예: us-west1)
    • CONFIG_ENCRYPTION_KMS_KEY_ARN: 새 KMS 키 ARN

제어 영역 루트 볼륨

제어 영역 루트 볼륨 키를 수동으로 순환하려면 다음 단계를 수행하세요.

  1. 새 Cloud Key Management Service 키를 만듭니다. KMS 키 ARN의 값을 저장합니다. 이 값은 나중에 사용하게 됩니다.

  2. 클러스터와 연결된 IAM 역할에 새 키를 사용한 암호화 및 복호화 권한이 있는지 확인합니다.

  3. gcloud container aws clusters update 명령어를 사용하여 암호화 키를 업데이트합니다.

     gcloud container aws clusters update CLUSTER_NAME \
        --location=GOOGLE_CLOUD_LOCATION \
        --root-volume-kms-key-arn=ROOT_VOLUME_KMS_KEY_ARN
    

    다음을 바꿉니다.

    • CLUSTER_NAME: 클러스터 이름
    • GOOGLE_CLOUD_LOCATION: 클러스터를 관리하는 지원되는 Google Cloud 리전(예: us-west1)
    • ROOT_VOLUME_KMS_KEY_ARN: 루트 볼륨을 암호화하는 AWS KMS 키의 Amazon 리소스 이름(ARN)

노드 풀 구성 키

노드 풀 구성 키를 수동으로 순환하려면 다음 단계를 수행하세요.

  1. 새 Cloud Key Management Service 키를 만듭니다.

  2. 클러스터와 연결된 IAM 역할에 새 키를 사용한 암호화 및 복호화 권한이 있는지 확인합니다.

  3. 사용 중인 KMS 별칭을 업데이트합니다.

     aws kms update-alias --alias-name KEY_ALIAS \
         --target-key-id CONFIG_ENCRYPTION_KMS_KEY_ARN
    

    다음을 바꿉니다.

    • KEY_ALIAS: 기존 키의 별칭
    • CONFIG_ENCRYPTION_KMS_KEY_ARN: 새 KMS 키 ARN
  4. 새 암호화 키를 사용해서 모든 클러스터 보안 비밀을 다시 암호화하도록 클러스터를 설정합니다.

     kubectl get secrets --all-namespaces -o json | \
     kubectl annotate --overwrite -f - encryption-key-rotation-time=`date +"%Y%m%d-%H%M%S"`
    
  5. 이전 AWS KMS 키를 사용 중지합니다. 자세한 내용은 키 사용 설정 및 사용 중지를 참조하세요.

노드 풀 루트 볼륨

노드 풀 루트 볼륨 키를 수동으로 순환하려면 다음 단계를 수행하세요.

  1. 새 Cloud Key Management Service 키를 만듭니다.

  2. 클러스터와 연결된 IAM 역할에 새 키를 사용한 암호화 및 복호화 권한이 있는지 확인합니다.

  3. 사용 중인 KMS 별칭을 업데이트합니다.

     aws kms update-alias --alias-name KEY_ALIAS \
         --target-key-id ROOT_VOLUME_KMS_KEY_ARN
    

    다음을 바꿉니다.

    • KEY_ALIAS: 기존 키의 별칭
    • ROOT_ENCRYPTION_KMS_KEY_ARN: 새 KMS 키 ARN
  4. 노드 풀을 업데이트합니다.

     gcloud container aws node-pools update NODE_POOL_NAME \
         --root-volume-kms-key-arn=ROOT_VOLUME_KMS_KEY_ARN
    

    다음을 바꿉니다.

    • NODE_POOL_NAME: 노드 풀의 이름
    • ROOT_VOLUME_KMS_KEY_ARN: 루트 볼륨을 암호화하는 AWS KMS 키의 Amazon 리소스 이름(ARN)
  5. 이전 AWS KMS 키를 사용 중지합니다. 자세한 내용은 키 사용 설정 및 사용 중지를 참조하세요.