KSA 서명 키 순환

Kubernetes 서비스 계정(KSA)은 포드에서 실행되는 프로세스 ID를 제공합니다.

Kubernetes 서비스 계정은 애플리케이션이 Google Cloud API에 승인된 호출을 수행하기 위해 사용하는 Google Cloud 서비스 계정과 다릅니다.

Google Distributed Cloud는 포드에 발급하는 KSA 토큰에 서명하기 위해 비공개 암호화 키를 사용합니다. 포드가 Kubernetes API 서버에 요청을 보낼 때 해당 토큰을 검증하기 위해 대응되는 공개 키를 사용합니다. 포드가 워크로드 아이덴티티를 사용해 Google Cloud API를 호출할 때 Google Cloud 는 동일한 공개 키를 사용하여 포드의 ID를 인증합니다.

사용자 클러스터 생성 중에 Google Distributed Cloud는 비공개 키와 공개 키를 생성합니다. 또한 클러스터 생성 중에 Google Distributed Cloud는 클러스터를 Fleet에 등록하고 Google Cloud에 공개 키를 제공합니다.

나중에 비공개/공개 키 쌍을 순환할 수 있습니다. 순환 시 새로운 비공개 키로 서명된 새로운 토큰이 자동으로 발급됩니다. 순환이 끝나면 클러스터는 새로운 비공개 키, 새로운 공개 키, 갱신된 토큰을 갖게 됩니다. 또한Google Cloud 에 새로운 공개 키가 포함됩니다.

바인딩된 토큰 및 기존 토큰

포드는 Kubernetes API 서버를 호출할 때 인증 및 승인에 기존 토큰 또는 바인딩된 토큰을 사용할 수 있습니다. 바인딩된 토큰은 기간이 제한되며 예상 볼륨을 사용하여 포드에 분산됩니다. 기존 토큰은 만료되지 않으며 Kubernetes 보안 비밀에 보관됩니다. 바인딩된 토큰은 더 안전하므로 권장됩니다.

바인딩된 토큰과 기존 토큰 모두 키 순환 중에 새로고침됩니다.

제한사항

키 순환 시작

키 순환을 시작하기 전에 다음 사항을 고려하세요.

  • 키 순환 중에는 다른 키 순환, 인증 기관 순환 또는 클러스터 업데이트를 시작할 수 없습니다.

  • 키 순환은 일시중지하거나 롤백할 수 없습니다. 모든 이전 키가 삭제됩니다.

  • 키 순환을 수행하면 기존 클러스터 노드가 삭제되고 새 노드가 생성됩니다.

키 순환을 시작하려면 다음 안내를 따르세요.

gkectl update credentials ksa-signing-key rotate \
    --config USER_CLUSTER_CONFIG \
    --kubeconfig ADMIN_CLUSTER_KUBECONIFG \
    [--skip-prompt]

다음을 바꿉니다.

  • USER_CLUSTER_CONFIG: 사용자 클러스터 구성 파일의 경로입니다.

  • ADMIN_KUBECONFIG_FILE: 관리자 클러스터 kubeconfig 파일의 경로입니다.

메시지를 표시하지 않으려면 --skip-prompt를 포함합니다.

키 순환 상태 보기

키 순환 상태를 보려면 다음 안내를 따르세요.

gkectl update credentials ksa-signing-key status \
    --config USER_CLUSTER_CONFIG \
    --kubeconfig ADMIN_CLUSTER_KUBECONIFG

키 순환이 이미 완료되었으면 다음과 비슷한 메시지가 표시됩니다.

State of KSASigningKeyRotation with KSASigningKeyVersion 2 is -
status: True,
reason: KSASigningKeyRotationCompleted,
message:{"tokenVersion":2,"privateKeyVersion":2,"publicKeyVersions":[2]}

KSA 서명 키 순환이 아직 진행 중이면 다음과 비슷한 메시지가 표시됩니다.

State of KSASigningKeyRotation with KSASigningKeyVersion 2 is -
status: False,
reason: KSASigningKeyRotationProcessedReason,
message:{"tokenVersion":2,"privateKeyVersion":2,"publicKeyVersions":[1,2]}