Secret Manager를 사용하면 보안 비밀을 주기적으로 순환하도록 예약할 수 있습니다. Secret Manager는 지정된 순환 빈도 및 시간에 따라 보안 비밀과 연관된 Pub/Sub 주제로 알림을 전송하여 이 작업을 수행합니다. 이 페이지에서는 이러한 순환 일정을 설정하는 방법을 설명합니다.
보안 비밀 순환 알림의 작동 방법
Secret Manager는 보안 비밀의 next_rotation_time
에 도달하면 지정된 Pub/Sub 주제로 SECRET_ROTATE
메시지를 트리거합니다. 이 타임스탬프를 확인하는 방법은 두 가지입니다.
-
사용자 정의: 보안 비밀을 만들거나 업데이트할 때
next_rotation_time
을 지정할 수 있습니다. -
순환 기간:
rotation_period
를 정의하면 Secret Manager가next_rotation_time
을 자동으로 계산합니다. Secret Manager는 지정된rotation_period
가 경과된 후SECRET_ROTATE
메시지를 보내고, 이후next_rotation_time
을 업데이트하여 다음 순환을 예약합니다.
SECRET_ROTATE
메시지를 수신하고 조치를 취하도록 Pub/Sub 구독자를 구성해야 합니다.
이러한 알림에 대한 응답으로 보안 비밀의 새 버전 만들기 및 애플리케이션에 변경사항 배포와 같은 추가 워크플로를 설정해야 할 수도 있습니다.
보안 비밀 순환 일정의 요구사항 및 고려사항
-
Pub/Sub 주제는 보안 비밀에 구성해야 합니다. Pub/Sub 주제 및 구독을 만드는 방법은 Pub/Sub 빠른 시작을 참조하세요. 보안 비밀의 주제를 구성하는 방법은 Secret Manager의 이벤트 알림을 참조하세요.
-
rotation_period
가 지정된 경우next_rotation_time
을 설정해야 합니다. -
next_rotation_time
은 앞으로 5분 이내로 설정할 수 없습니다. -
rotation_period
는 1시간 미만일 수 없습니다. 타임스탬프 형식에 대한 안내는 Google Cloud 날짜/시간 참조를 확인하세요 -
Secret Manager는 실패한 메시지 전송 시도를 자동으로 재시도하지만 보안 비밀, 주제 구성, 권한, 할당량 등과 관련된 잘못된 구성이 있으면 전송 성공을 보장할 수 없습니다.
-
동시 순환이 예기치 않은 동작이 발생하지 않도록 하려면 진행 중인 순환은 다른 순환을 시작하기 전에 완료되어야 합니다. Secret Manager가 메시지를 Pub/Sub로 보내려고 시도하는 중에는 알림이 진행 중인 것으로 간주됩니다. 진행 중인 순환이 있는 경우 예약된 순환을 건너뜁니다. Secret Manager는 순환이 취소된 후 최대 7일까지 실패한 메시지 전송을 자동으로 재시도합니다.
보안 비밀의 순환 구성
Google Cloud 콘솔, Google Cloud CLI, Secret Manager API를 사용하여 순환 일정을 구성할 수 있습니다.
콘솔
-
Google Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.
-
Secret Manager 페이지에서 리전 보안 비밀 탭을 클릭한 후 리전 보안 비밀 만들기를 클릭합니다.
-
리전 보안 비밀 만들기 페이지에서 이름 필드에 보안 비밀 이름을 입력합니다.
-
보안 비밀 값을 입력합니다(예:
abcd1234
). 또한 파일 업로드 옵션을 사용하여 보안 비밀 값이 포함된 텍스트 파일을 업로드할 수 있습니다. 이 작업은 보안 비밀 버전을 자동으로 만듭니다. -
리전 목록에서 리전 보안 비밀을 저장하려는 위치를 선택합니다.
-
순환 섹션으로 이동한 후 순환 기간 설정 체크박스를 선택합니다.
-
순환 기간 목록에서 기본 옵션 중에서 선택하거나 커스텀을 선택하여 자체 순환 일정을 구성합니다.
-
시작 시간 필드에서 순환 기간 시작 날짜와 시간을 입력합니다.
-
보안 비밀 만들기를 클릭합니다.
gcloud
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
- SECRET_ID: 보안 비밀의 ID 또는 보안 비밀의 정규화된 식별자입니다.
- LOCATION: 보안 비밀의 Google Cloud 위치입니다.
- NEXT_ROTATION_TIME: 첫 번째 순환을 완료할 ISO 8601 형식의 타임스탬프입니다(예:
2021-06-01T09:00:00Z
). - ROTATION_PERIOD: 키를 순환할 간격(초)입니다. 예를 들어 키를 2592000초 간격으로 순환하려면 값을
2592000s
로 설정합니다. - FULL_TOPIC_NAME:
projects/your-project-id/topics/your-topic-name
형식의 Pub/Sub 주제의 전체 이름입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud secrets create SECRET_ID --location=LOCATION \ --next-rotation-time="NEXT_ROTATION_TIME" \ --rotation-period="ROTATION_PERIOD" \ --topics="FULL_TOPIC_NAME"
Windows(PowerShell)
gcloud secrets create SECRET_ID --location=LOCATION ` --next-rotation-time="NEXT_ROTATION_TIME" ` --rotation-period="ROTATION_PERIOD" ` --topics="FULL_TOPIC_NAME"
Windows(cmd.exe)
gcloud secrets create SECRET_ID --location=LOCATION ^ --next-rotation-time="NEXT_ROTATION_TIME" ^ --rotation-period="ROTATION_PERIOD" ^ --topics="FULL_TOPIC_NAME"
REST
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- LOCATION: 보안 비밀의 Google Cloud 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- SECRET_ID: 보안 비밀의 ID 또는 보안 비밀의 정규화된 식별자입니다.
- TOPIC_NAME: 주제 이름입니다.
HTTP 메서드 및 URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID
JSON 요청 본문:
{ "topics": {"name" : "projects/$PROJECT_ID/topics/$TOPIC_NAME"}, "rotation": { "next_rotation_time": "2021-06-01T09:00:00Z", "rotation_period" : '2592000s' }, }
요청을 보내려면 다음 옵션 중 하나를 선택합니다.
curl
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID"
PowerShell
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID" | Select-Object -Expand Content
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"1621434abc8dc4\"", "rotation": { "nextRotationTime": "2024-09-10T09:00:00Z", "rotationPeriod": "2592000s" } }
보안 비밀 순환 설정 업데이트
업데이트를 요청할 때 다음 순환 설정을 업데이트할 수 있습니다.
-
rotation
: 보안 비밀의 전체 순환 구성을 나타냅니다. -
rotation.next_rotation_time
: 특히 다음 순환이 발생할 때를 나타내는 타임스탬프를 대상으로 합니다. -
rotation.rotation_period
: 각 순환 사이의 기간을 지정합니다.
보안 비밀의 순환 설정을 업데이트하려면 다음 방법 중 하나를 사용합니다.
콘솔
-
Google Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.
-
Secret Manager 페이지에서 리전 보안 비밀 탭을 클릭합니다.
-
수정하려는 보안 비밀을 찾고 해당 보안 비밀과 연결된
작업 메뉴를 클릭합니다. 작업 메뉴에서 수정을 클릭합니다. -
순환 섹션으로 이동합니다. 필요에 따라 순환 기간을 업데이트하고 보안 비밀 업데이트를 클릭합니다.
gcloud
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
- SECRET_ID: 보안 비밀의 ID 또는 보안 비밀의 정규화된 식별자입니다.
- LOCATION: 보안 비밀의 Google Cloud 위치입니다.
- NEXT_ROTATION_TIME: 첫 번째 순환을 완료할 ISO 8601 형식의 타임스탬프입니다(예:
2021-06-01T09:00:00Z
).
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --next-rotation-time="NEXT_ROTATION_TIME"
Windows(PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --next-rotation-time="NEXT_ROTATION_TIME"
Windows(cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --next-rotation-time="NEXT_ROTATION_TIME"
REST
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- LOCATION: 보안 비밀의 Google Cloud 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- SECRET_ID: 보안 비밀의 ID 또는 보안 비밀의 정규화된 식별자입니다.
- NEXT_ROTATION_TIME: 첫 번째 순환을 완료할 ISO 8601 형식의 타임스탬프입니다(예:
2021-06-01T09:00:00Z
).
HTTP 메서드 및 URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time
JSON 요청 본문:
{ "rotation": {"next_rotation_time": "NEXT_ROTATION_TIME"} }
요청을 보내려면 다음 옵션 중 하나를 선택합니다.
curl
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"
PowerShell
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"1621434abc8dc4\"", "rotation": { "nextRotationTime": "2024-09-10T09:00:00Z", "rotationPeriod": "2592000s" } }
보안 비밀의 순환 사용 중지
보안 비밀 순환을 사용 중지하려면 다음 방법 중 하나를 사용하세요.
콘솔
-
Google Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.
-
Secret Manager 페이지에서 리전 보안 비밀 탭을 클릭합니다.
-
수정하려는 보안 비밀을 찾고 해당 보안 비밀과 연결된
작업 메뉴를 클릭합니다. 작업 메뉴에서 수정을 클릭합니다. -
순환 섹션으로 이동합니다. 순환 주기 설정 체크박스를 선택 취소한 후 보안 비밀 업데이트를 클릭합니다.
gcloud
보안 비밀의 next_rotation_time
삭제
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
- SECRET_ID: 보안 비밀의 ID 또는 보안 비밀의 정규화된 식별자입니다.
- LOCATION: 보안 비밀의 Google Cloud 위치입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --remove-next-rotation-time
Windows(PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --remove-next-rotation-time
Windows(cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --remove-next-rotation-time
보안 비밀의 순환 일정을 삭제하려면 다음 안내를 따르세요. 이렇게 하면 next_rotation_time
및 rotation_period
가 모두 삭제됩니다.
아래의 명령어 데이터를 사용하기 전에 다음을 바꿉니다.
- SECRET_ID: 보안 비밀의 ID 또는 보안 비밀의 정규화된 식별자입니다.
- LOCATION: 보안 비밀의 Google Cloud 위치입니다.
다음 명령어를 실행합니다.
Linux, macOS 또는 Cloud Shell
gcloud secrets update SECRET_ID --location=LOCATION \ --remove-rotation-schedule
Windows(PowerShell)
gcloud secrets update SECRET_ID --location=LOCATION ` --remove-rotation-schedule
Windows(cmd.exe)
gcloud secrets update SECRET_ID --location=LOCATION ^ --remove-rotation-schedule
REST
보안 비밀의 다음 순환 시간 삭제
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- LOCATION: 보안 비밀의 Google Cloud 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- SECRET_ID: 보안 비밀의 ID 또는 보안 비밀의 정규화된 식별자입니다.
HTTP 메서드 및 URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time
JSON 요청 본문:
{}
요청을 보내려면 다음 옵션 중 하나를 선택합니다.
curl
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time"
PowerShell
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation.next_rotation_time" | Select-Object -Expand Content
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"16214530fa18d3\"" }
보안 비밀의 순환 일정을 삭제하려면 다음 안내를 따르세요. 이렇게 하면 다음 순환 시간과 순환 주기가 모두 삭제됩니다.
요청 데이터를 사용하기 전에 다음을 바꿉니다.
- LOCATION: 보안 비밀의 Google Cloud 위치입니다.
- PROJECT_ID: Google Cloud 프로젝트 ID입니다.
- SECRET_ID: 보안 비밀의 ID 또는 보안 비밀의 정규화된 식별자입니다.
HTTP 메서드 및 URL:
PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation
JSON 요청 본문:
{}
요청을 보내려면 다음 옵션 중 하나를 선택합니다.
curl
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
curl -X PATCH \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation"
PowerShell
요청 본문을 request.json
파일에 저장하고 다음 명령어를 실행합니다.
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method PATCH `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets/$SECRET_ID?updateMask=rotation" | Select-Object -Expand Content
다음과 비슷한 JSON 응답이 표시됩니다.
{ "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID", "createTime": "2024-09-04T04:06:00.660420Z", "topics": [ { "name": "projects/PROJECT_ID/topics/TOPIC_NAME" } ], "etag": "\"16214530fa18d3\"" }