보안 비밀 순환

이 주제에서는 Secret Manager를 통해 보안 비밀에 대해 예약된 순환 알림을 관리하는 방법을 설명합니다.

개요

Secret Manager는 보안 비밀의 순환 일정을 지원합니다. Secret Manager는 제공된 순환 빈도와 순환 시간을 기준으로 보안 비밀에 구성된 Pub/Sub 주제로 메시지를 보냅니다. 이 가이드에서는 보안 비밀을 순환할 때 알림을 수신하도록 보안 비밀에 일회성 또는 주기적인 일정을 설정하는 방법을 보여줍니다.

보안 비밀을 주기적으로 순환하면 다음과 같은 이점이 있습니다.

  • 보안 비밀이 유효하게 유지되고 취약점을 노출하는 기간을 제한합니다.
  • 순환 흐름을 지속적으로 수행하여 프로세스 안정성을 보장합니다.

기본 원리

Secret Manager는 보안 비밀의 next_rotation_time에 있는 보안 비밀에 구성된 Pub/Sub 주제로 SECRET_ROTATE 메시지를 보냅니다. 이 타임스탬프는 다음 두 가지 방법 중 하나로 설정됩니다.

  1. 보안 비밀을 만들거나 업데이트할 때 사용자가 제공합니다.

  2. rotation_period가 제공되면 Secret Manager는 경과된 rotation_period 후에 SECRET_ROTATE 메시지를 전송합니다. next_rotation_time이 새로운 다음 순환 시간을 반영하도록 업데이트됩니다.

SECRET_ROTATE 메시지를 수신하고 조치를 취하도록 Pub/Sub 구독자를 구성해야 합니다. 필요한 경우 새 보안 비밀 버전 추가 및 애플리케이션 배포 트리거와 같은 추가 워크플로를 구현하세요.

참고

  • 순환 정책은 Secret Manager v1 API 및 gcloud 명령줄 도구에서만 관리할 수 있습니다.

  • Pub/Sub 주제는 보안 비밀에 구성해야 합니다. Pub/Sub 주제 및 구독을 만드는 방법은 Pub/Sub 빠른 시작을 참조하세요. 보안 비밀의 주제를 구성하는 방법은 Secret Manager의 이벤트 알림을 참조하세요.

  • rotation_period가 지정된 경우 next_rotation_time을 설정해야 합니다.

  • next_rotation_time은 향후 5분 미만으로 설정할 수 없습니다. rotation_period는 1시간 이상이어야 합니다. 타임스탬프 형식 지정 안내는 gcloud 날짜/시간 참조를 확인하세요.

  • 전송 오류: Secret Manager는 실패한 메시지 전송 시도를 자동으로 재시도합니다. Secret Manager는 보안 비밀 또는 주제 구성, 권한, 할당량에 구성 오류가 있는 경우 전송을 보장하지 않습니다.

  • 동시 순환이 예기치 않은 동작이 발생하지 않도록 하려면 진행 중인 순환은 다른 순환을 시작하기 전에 완료되어야 합니다. Secret Manager가 메시지를 Pub/Sub로 보내려고 시도하는 중에는 알림이 진행 중인 것으로 간주됩니다. 진행 중인 순환이 있는 경우 예약된 순환을 건너뜁니다. Secret Manager는 순환이 중단된 후 최대 7일 동안 실패한 메시지 전송 시도를 자동으로 재시도합니다.

예시

보안 비밀에 순환 구성

2021년 6월 1일부터 30일마다 순환되는 next_rotation_time으로 보안 비밀을 만듭니다.

gcloud

$ gcloud secrets create secret-id \
    --replication-policy "automatic" \
    --next-rotation-time="2021-06-01T09:00:00Z" \
    --rotation-period="2592000s" \
    --topics=full-topic-name"

API

 curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets?secretId=${SECRET_ID}" \
  --request "POST" \
  --header "Content-Type: application/json" \
  --header "Authorization: Bearer $(gcloud auth print-access-token)" \
  --data-binary @- <<EOF
{
"replication":{
  "automatic":{}
},
"topics": {"name" : "projects/${PROJECT_ID}/topics/${TOPIC_NAME}"},
"rotation":
  {
    "next_rotation_time": "2021-06-01T09:00:00Z",
    "rotation_period" : '2592000s'
  },
}
EOF

보안 비밀 순환 설정 업데이트

순환에 유효한 updateMask 경로에는 rotation, rotation.next_rotation_time, rotation.rotation_period가 있습니다.

보안 비밀의 next_rotation_time을 업데이트하려면 다음 안내를 따르세요.

gcloud

$ gcloud secrets update secret-id \
  --next-rotation-time "2022-06-01T09:00:00Z"

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {
    "next_rotation_time": "2040-06-01T09:00:00Z"
  }
  EOF

보안 비밀의 순환 사용 중지

보안 비밀의 next_rotation_time을 삭제하려면 다음 안내를 따르세요.

gcloud

$ gcloud secrets update secret-id \
  --remove-next-rotation-time

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation.next_rotation_time" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {}
  EOF

보안 비밀의 순환 일정을 삭제하려면 다음 안내를 따르세요. 이렇게 하면 next_rotation_timerotation_period가 모두 삭제됩니다.

gcloud

$ gcloud secrets update secret-id \
  --remove-rotation-schedule

API

  $ curl "https://secretmanager.googleapis.com/v1/projects/${PROJECT_ID}/secrets/${SECRET_ID}?updateMask=rotation" \
      --request "PATCH" \
      --header "Authorization: Bearer $(gcloud auth print-access-token)" \
      --header "Content-Type: application/json" \
      --data-binary @- <<EOF
  {}
  EOF