순환 일정 만들기

Secret Manager를 사용하면 보안 비밀을 주기적으로 순환하도록 예약할 수 있습니다. Secret Manager는 지정된 순환 빈도 및 시간에 따라 보안 비밀과 연관된 Pub/Sub 주제로 알림을 전송하여 이 작업을 수행합니다. 이 페이지에서는 이러한 순환 일정을 설정하는 방법을 설명합니다.

보안 비밀 순환 알림의 작동 방법

Secret Manager는 보안 비밀의 next_rotation_time에 도달하면 지정된 Pub/Sub 주제로 SECRET_ROTATE 메시지를 트리거합니다. 이 타임스탬프를 확인하는 방법은 두 가지입니다.

  1. 사용자 정의: 보안 비밀을 만들거나 업데이트할 때 next_rotation_time을 지정할 수 있습니다.

  2. 순환 기간: 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를 사용하여 순환 일정을 구성할 수 있습니다.

콘솔

  1. Google Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.

    Secret Manager로 이동

  2. Secret Manager 페이지에서 리전 보안 비밀 탭을 클릭한 후 리전 보안 비밀 만들기를 클릭합니다.

  3. 리전 보안 비밀 만들기 페이지에서 이름 필드에 보안 비밀 이름을 입력합니다.

  4. 보안 비밀 값을 입력합니다(예: abcd1234). 또한 파일 업로드 옵션을 사용하여 보안 비밀 값이 포함된 텍스트 파일을 업로드할 수 있습니다. 이 작업은 보안 비밀 버전을 자동으로 만듭니다.

  5. 리전 목록에서 리전 보안 비밀을 저장하려는 위치를 선택합니다.

  6. 순환 섹션으로 이동한 후 순환 기간 설정 체크박스를 선택합니다.

  7. 순환 기간 목록에서 기본 옵션 중에서 선택하거나 커스텀을 선택하여 자체 순환 일정을 구성합니다.

  8. 시작 시간 필드에서 순환 기간 시작 날짜와 시간을 입력합니다.

  9. 보안 비밀 만들기를 클릭합니다.

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: 각 순환 사이의 기간을 지정합니다.

보안 비밀의 순환 설정을 업데이트하려면 다음 방법 중 하나를 사용합니다.

콘솔

  1. Google Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.

    Secret Manager로 이동

  2. Secret Manager 페이지에서 리전 보안 비밀 탭을 클릭합니다.

  3. 수정하려는 보안 비밀을 찾고 해당 보안 비밀과 연결된 작업 메뉴를 클릭합니다. 작업 메뉴에서 수정을 클릭합니다.

  4. 순환 섹션으로 이동합니다. 필요에 따라 순환 기간을 업데이트하고 보안 비밀 업데이트를 클릭합니다.

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"
  }
}

보안 비밀의 순환 사용 중지

보안 비밀 순환을 사용 중지하려면 다음 방법 중 하나를 사용하세요.

콘솔

  1. Google Cloud 콘솔에서 Secret Manager 페이지로 이동합니다.

    Secret Manager로 이동

  2. Secret Manager 페이지에서 리전 보안 비밀 탭을 클릭합니다.

  3. 수정하려는 보안 비밀을 찾고 해당 보안 비밀과 연결된 작업 메뉴를 클릭합니다. 작업 메뉴에서 수정을 클릭합니다.

  4. 순환 섹션으로 이동합니다. 순환 주기 설정 체크박스를 선택 취소한 후 보안 비밀 업데이트를 클릭합니다.

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_timerotation_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\""
}

다음 단계