애플리케이션 레이어 보안 비밀 암호화는 Google Kubernetes Engine (GKE)에서 사용자 인증 정보 및 키와 같은 민감한 정보에 구성 가능한 보호 레이어를 추가합니다. 이 구성에 문제가 있으면 이 추가 보안 레이어가 올바르게 작동하지 않을 수 있습니다.
이 문서를 사용하여 GKE API 클러스터 객체에서 사용할 수 있는 디버깅 필드를 검사하여 애플리케이션 레이어 보안 비밀 암호화를 해결합니다. 이러한 필드는 업데이트 실패 또는 Cloud KMS 키 문제와 같은 일반적인 오류의 근본 원인을 진단하는 데 도움이 됩니다.
이 정보는 GKE 클러스터에 저장된 민감한 정보를 보호하는 플랫폼 관리자, 운영자, 보안 엔지니어에게 중요합니다. 콘텐츠에서 참조하는 일반적인 역할과 예시 태스크에 대한 자세한 내용은 일반 GKE 사용자 역할 및 태스크를 참조하세요. Google Cloud
업데이트 실패
애플리케이션 레이어 보안 비밀 암호화의 암호화 구성을 업데이트하면 GKE는 Kubernetes 클러스터의 모든 보안 비밀 객체를 다시 작성해야 합니다. GKE는 모든 보안 비밀이 새 Cloud KMS 키로 암호화되거나 사용자가 구성한 경우 암호화되지 않은 상태로 작성되도록 이를 수행합니다.
다음과 같은 조건으로 인해 이 업데이트 작업이 실패할 수 있습니다.
- 업데이트가 진행되는 동안 Kubernetes 컨트롤 플레인을 일시적으로 사용할 수 없습니다.
- 사용자 정의
AdmissionWebhook은 GKE에서 보안 비밀 객체를 업데이트할 수 없도록 합니다. - 업데이트 작업이 완료되기 전에 업데이트된 Cloud KMS 키 또는 이전 Cloud KMS 키가 사용 중지됩니다.
업데이트 작업이 성공할 때까지 업데이트된 Cloud KMS 키 또는 이전 Cloud KMS 키와 상호작용하지 마세요.
디버깅 필드
버전 1.29 이상을 실행하는 새 GKE 클러스터에는 Cluster.DatabaseEncryption에 대한 업데이트를 추적하고 오류를 복구하는 데 도움이 되는 추가 필드가 포함됩니다.
다음 단계는 DatabaseEncryption.CurrentState 필드가 비어 있지 않은 클러스터에만 적용됩니다. CurrentState 필드가 비어 있으면 이 클러스터 버전에서 이 기능이 아직 사용 설정되지 않은 것입니다.
이러한 필드에 적용되는 한도는 다음과 같습니다.
- 출력 전용입니다. 즉, 클러스터 생성 또는 업데이트 요청 중에 설정할 수 없습니다.
CurrentState 필드
Cluster.DatabaseEncryption의 CurrentState 필드를 검사하여 DatabaseEncryption 업데이트 작업의 현재 상태를 검사할 수 있습니다.
CurrentState의 값 |
설명 |
|---|---|
|
|
최신 업데이트 작업이 성공했습니다. 추가 작업이 필요하지 않습니다. 이전에 사용한 키는 삭제할 수 있습니다. |
|
|
업데이트가 진행 중입니다. |
|
|
최근 업데이트에 오류가 발생했습니다. 이전에 사용한 Cloud KMS 키는 GKE에서 계속 사용 중일 수 있으므로 사용 중지하거나 폐기하지 마세요.
자세한 내용은 |
LastOperationErrors 필드
업데이트 작업이 실패하면 GKE 컨트롤 플레인의 기본 오류가 gcloud container clusters update의 출력에 표시됩니다.
가장 최근에 실패한 두 업데이트 작업의 오류 메시지는 Cluster.DatabaseEncryption.LastOperationErrors에서도 확인할 수 있습니다.
DecryptionKeys 필드
새 암호화 작업에 사용되는 Cloud KMS 키는 DatabaseEncryption.KeyName에 표시됩니다. 일반적으로 클러스터에서 사용하는 키는 이 키뿐입니다.
하지만 DatabaseEncryption.DecryptionKeys에는 업데이트가 진행 중이거나 실패한 뒤에 클러스터에서 사용되는 추가 키가 포함됩니다.
실패한 업데이트에서 복구
실패한 업데이트에서 복구하려면 다음 단계를 따르세요.
- 오류 메시지를 검사하고 표시된 문제를 해결합니다.
gcloud container clusters update ... --database-encryption-key와 같이 실패한 명령어를 실행하여 업데이트 요청을 다시 시도합니다. 원래 수행한 것과 동일한 업데이트 요청으로 다시 시도하거나 클러스터를 이전 상태로 다시 업데이트하는 것이 좋습니다. GKE는 하나 이상의 보안 비밀을 읽을 수 없는 경우 다른 키 또는 암호화 상태로 전환하지 못할 수 있습니다.
다음 섹션에는 일반적인 오류 이유가 나와 있습니다.
Cloud KMS 키 오류
오류 메시지에 하나 이상의 Cloud KMS 키에 대한 참조가 포함되어 있으면 Cloud KMS 키 구성을 검사하여 관련 키 버전을 사용할 수 있는지 확인합니다.
Cloud KMS 키가 사용 중지되었거나 폐기되었다는 오류가 표시되면 키 또는 키 버전을 다시 사용 설정합니다.
오류: 애플리케이션 수준 암호화에 구성된 CloudKMS 키를 사용할 수 없음
GKE의 기본 서비스 계정이 Cloud KMS 키에 액세스할 수 없으면 다음 오류 메시지가 표시됩니다.
Cluster problem detected (Kubernetes Engine Service Agent account unable to use CloudKMS key configured for Application Level encryption).
이 문제를 해결하려면 사용 중지된 키 다시 사용 설정을 수행합니다.
보안 비밀을 업데이트할 수 없음
허용 웹훅으로 인해 Kubernetes API에서 업데이트 요청을 거부한 경우 다음 오류가 발생할 수 있습니다.
error admission webhook WEBHOOK_NAME denied the request
이 오류를 해결하려면 웹훅을 삭제하거나 수정하여 GKE가 주요 업데이트 중에 모든 네임스페이스의 보안 비밀을 업데이트할 수 있도록 합니다.
오류: 네임스페이스가 관리됨
Autopilot 클러스터에서 kube-system과 같은 GKE 관리 네임스페이스에 있는 보안 비밀을 다시 암호화하려고 하면 다음 오류가 발생합니다. 오류 메시지는 다음과 비슷합니다.
Error from server (Forbidden): secrets "alertmanager" is
forbidden: User cannot patch resource "secrets" in API group "" in the namespace "gke-gmp-system":
GKE Warden authz [denied by managed-namespaces-limitation]: the namespace "gke-gmp-system"
is managed and the request's verb "patch" is denied'
GKE Autopilot 클러스터에서는 관리 네임스페이스에서 보안 비밀을 비롯한 Kubernetes 리소스를 수정할 수 없습니다.
이 오류를 해결하려면 다음 안내를 따르세요.
kubectl명령어를 사용하여 보안 비밀을 다시 암호화하는 경우--namespace플래그를 사용하여 명령어를 관리하는 네임스페이스로 범위를 지정합니다.- CronJob을 사용하여 보안 비밀을 다시 암호화하는 경우 관리하는 네임스페이스에만 배포합니다.
다음 단계
문서에서 문제 해결 방법을 찾을 수 없으면 지원 받기를 참조하여 다음 주제에 대한 조언을 포함한 추가 도움을 요청하세요.
- Cloud Customer Care에 문의하여 지원 케이스를 엽니다.
- StackOverflow에서 질문하고
google-kubernetes-engine태그를 사용하여 유사한 문제를 검색해 커뮤니티의 지원을 받습니다.#kubernetes-engineSlack 채널에 가입하여 더 많은 커뮤니티 지원을 받을 수도 있습니다. - 공개 Issue Tracker를 사용하여 문제 또는 기능 요청을 엽니다.