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 및 Google Cloud CLI에서만 관리할 수 있습니다.

  • 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
  {
    "rotation": {"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

다음 단계