Secret Manager는 보안 비밀의 순환 일정을 지원합니다. Secret Manager는 제공된 순환 빈도와 순환 시간을 기준으로 보안 비밀에 구성된 Pub/Sub 주제로 메시지를 보냅니다. 이 주제에서는 보안 비밀을 순환할 때 알림을 수신하도록 보안 비밀에 일회성 또는 주기적인 일정을 설정하는 방법을 보여줍니다.
보안 비밀을 주기적으로 순환하면 다음과 같은 이점이 있습니다.
- 보안 비밀이 유효하게 유지되고 취약점을 노출하는 기간을 제한합니다.
- 순환 흐름을 지속적으로 수행하여 프로세스 안정성을 보장합니다.
기본 원리
Secret Manager는 보안 비밀의 next_rotation_time
에 있는 보안 비밀에 구성된 Pub/Sub 주제로 SECRET_ROTATE
메시지를 보냅니다. 이 타임스탬프는 다음 두 가지 방법 중 하나로 설정됩니다.
보안 비밀을 만들거나 업데이트할 때 사용자가 제공합니다.
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_time
및 rotation_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