このページでは、シークレット バージョンの破棄の遅延の設定、破棄の遅延期間の更新または削除、破棄がスケジュールされているシークレット バージョンの復元の方法について説明します。
シークレット バージョンを破棄すると、シークレット マテリアルは即時かつ完全に破棄されます。Secret Manager 管理者は、シークレット バージョンがリクエスト後すぐに破棄されず、構成可能な期間まで復元可能な状態になるように、シークレット バージョンの破棄の遅延を設定できます。
シークレットで破棄の遅延が有効になっている場合、シークレット バージョンを破棄すると、次のようになります。
- バージョンが無効になり、使用できなくなります。
- システムは、遅延期間の終了時にバージョンを完全に破棄するようにスケジュールします。
- 遅延期間が終了すると、シークレット バージョンは完全に破棄され、復元できなくなります。
利点
この機能には次のメリットがあります。
重要なシークレット マテリアルの偶発的または悪意のある破壊に対する保護の追加レイヤ。Secret Manager のシークレット バージョン マネージャーのロールを持つユーザーは、シークレット バージョンを破棄できます。この操作は元に戻せません。破棄の遅延を設定することで、シークレット バージョンが即座に破棄されることを防止できます。センシティブ データの偶発的な破棄をモニタリングし、防止できるため、シークレット バージョンのライフサイクルを管理するために必要な最小限のアクセス権をユーザーに付与できます。
シークレット バージョンを破棄すると、シークレットで構成されている Pub/Sub トピックへの SECRET_VERSION_DESTROY_SCHEDULED 通知がトリガーされます。Secret Manager 管理者は、スケジュールされた破棄をキャンセルし、シークレット バージョンを有効または無効にすることで復元できます。
始める前に
Secret Manager API を有効にします。
認証を設定する。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
このページの gcloud CLI のサンプルは、次のいずれかの開発環境から使用できます。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
必要なロール
シークレット バージョンの破棄を設定するために必要な権限を取得するには、シークレットに対する Secret Manager 管理者 (roles/secretmanager.admin
)IAM ロールを付与するように管理者に依頼してください。ロールの付与の詳細については、アクセス権の管理をご覧ください。
必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。
破棄の遅延を設定する
シークレット バージョンの破棄の遅延は、シークレットを作成するとき、またはシークレットを更新するときに有効にできます。
コンソール
Google Cloud コンソールで、[Secret Manager] ページに移動します。
シークレットを作成するために必要な手順を行います。
シークレット バージョンの破棄を遅延させるセクションに移動します。
[破棄の遅延を設定する] チェックボックスをオンにします。
[破棄の遅延期間] フィールドに、期間を日数で入力します。入力できる最小値は 1 日、最大値は 1,000 日です。
[シークレットの作成] をクリックします。
既存のシークレットでこの機能を有効にするには、[シークレットを編集] ページに移動し、破棄の遅延期間を構成します。
gcloud
シークレットの破棄の遅延期間を構成するには、gcloud beta secrets create コマンドを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID。
- TTL_DURATION: シークレット バージョンの破棄の遅延期間。期間は、日、時間、秒などの任意の形式で入力できます。必要な最小期間は 1 日ですが、最大期間は 1,000 日に設定できます。
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta secrets create SECRET_ID --version-destroy-ttl=TTL_DURATION
Windows(PowerShell)
gcloud beta secrets create SECRET_ID --version-destroy-ttl=TTL_DURATION
Windows(cmd.exe)
gcloud beta secrets create SECRET_ID --version-destroy-ttl=TTL_DURATION
レスポンスには、新しく作成されたシークレットが含まれます。
REST
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: シークレットを作成する Google Cloud プロジェクト ID
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID。
- TTL_DURATION: シークレット バージョンの破棄の遅延期間。期間を秒単位で入力します。必要な最小期間は 1 日ですが、最大期間は 1,000 日に設定できます。
HTTP メソッドと URL:
POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID
リクエストの本文(JSON):
{"replication": {"automatic": {}}, "version_destroy_ttl":"TTL_DURATION"}
リクエストを送信するには、次のいずれかのオプションを選択します。
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.googleapis.com/v1/projects/PROJECT_ID/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.googleapis.com/v1/projects/PROJECT_ID/secrets?secretId=SECRET_ID" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name":"projects/PROJECT_ID/secrets/SECRET_ID", "replication":{ "automatic":{ } }, "createTime":"2023-10-16T17:10:16.345401Z", "etag":"\"1607d90ee3d84c\"", "versionDestroyTtl":"TTL_DURATION" }
破棄の遅延は、以下のシナリオには適用されません。
- シークレットが削除されると、すべてのシークレット マテリアル、関連するシークレット バージョンが直ちに削除されます。
- シークレットに有効期限が設定され、シークレットが期限切れになると、シークレットで破棄の遅延が有効になっていても、すべてのシークレット バージョンが直ちに破棄されます。
破棄の遅延期間を更新する
コンソール
Google Cloud コンソールで、[Secret Manager] ページに移動します。
次のいずれかの方法でシークレットを編集します。
- 編集するシークレットに関連付けられた [その他の操作] をクリックし、メニューから [編集] を選択します。
- シークレット名をクリックして [シークレットの詳細] ページに移動します。[シークレットの詳細] ページで、[ シークレットを編集する] をクリックします。
シークレット バージョンの破棄を遅延させるセクションに移動します。
[破棄の遅延期間] フィールドに、更新された期間を入力します。
[シークレットを更新する] をクリックします。
gcloud
破棄の遅延期間を更新するには、gcloud beta secrets update コマンドを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
- TTL_DURATION: シークレット バージョンの破棄の遅延期間
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta secrets update SECRET_ID --version-destroy-ttl=TTL_DURATION
Windows(PowerShell)
gcloud beta secrets update SECRET_ID --version-destroy-ttl=TTL_DURATION
Windows(cmd.exe)
gcloud beta secrets update SECRET_ID --version-destroy-ttl=TTL_DURATION
レスポンスには、更新されたシークレットが含まれます。
REST
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクト ID
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
- TTL_DURATION: シークレット バージョンの破棄の遅延期間
HTTP メソッドと URL:
PATCH https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl
リクエストの本文(JSON):
{ "version_destroy_ttl":"TTL_DURATION" }
リクエストを送信するには、次のいずれかのオプションを選択します。
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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl"
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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name":"projects/PROJECT_ID/secrets/SECRET_ID", "replication":{ "automatic":{ } }, "createTime":"2023-10-16T17:10:16.345401Z", "etag":"\"1607d90ee3d84c\"", "versionDestroyTtl":"TTL_DURATION" }
破棄の遅延期間の影響を受けるシークレット バージョンは、以下によって異なります。
- シークレットで破棄の遅延が初めて設定される場合、破棄の遅延期間は、シークレットのすべてのアクティブな(有効と無効)バージョンに影響します。
- 破棄の遅延期間を更新または削除すると、変更は破棄のアクションが試行された新しいシークレット バージョンにのみ反映されます。すでに破棄がスケジュールされているシークレット バージョンは、破棄がスケジュールされている時刻に引き続き破棄されます。
破棄の遅延を無効にする
コンソール
Google Cloud コンソールで、[Secret Manager] ページに移動します。
次のいずれかの方法でシークレットを編集します。
- 編集するシークレットに関連付けられた [その他の操作] をクリックし、メニューから [編集] を選択します。
- シークレット名をクリックして [シークレットの詳細] ページに移動します。[シークレットの詳細] ページで、[ シークレットを編集する] をクリックします。
シークレット バージョンの破棄を遅延させるセクションに移動します。
[破棄の遅延を設定する] チェックボックスをオフにします。
[シークレットを更新する] をクリックします。
gcloud
破棄の遅延期間を削除するには、gcloud beta secrets update コマンドを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta secrets update SECRET_ID --remove-version-destroy-ttl
Windows(PowerShell)
gcloud beta secrets update SECRET_ID --remove-version-destroy-ttl
Windows(cmd.exe)
gcloud beta secrets update SECRET_ID --remove-version-destroy-ttl
レスポンスには、更新されたシークレットが含まれます。
REST
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクト ID
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
HTTP メソッドと URL:
PATCH https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl
リクエストの本文(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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl"
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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID?updateMask=version_destroy_ttl" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name":"projects/PROJECT_ID/secrets/SECRET_ID", "replication":{ "automatic":{ } }, "createTime":"2023-10-16T17:10:16.345401Z", "etag":"\"1607d90ee3d84c\"" }
シークレット バージョンの破棄の遅延をテストする
コンソール
Google Cloud コンソールで、[Secret Manager] ページに移動します。
シークレット名をクリックします。[シークレットの詳細] ページが表示されます。
[シークレットの詳細] ページの [バージョン] テーブルで、シークレットのバージョンを選択します。
[操作] 列で、
[もっと見る] をクリックし、[破棄] をクリックします。表示されたダイアログで、[選択したバージョンの破棄をスケジュール] をクリックします。
gcloud
シークレット バージョンを破棄するには、gcloud beta secrets versions destroy コマンドを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_VERSION_ID: バージョンの ID またはバージョンの完全修飾識別子
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID
Windows(PowerShell)
gcloud beta secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID
Windows(cmd.exe)
gcloud beta secrets versions destroy SECRET_VERSION_ID --secret=SECRET_ID
レスポンスには、シークレットの破棄されたバージョンが含まれます。
REST
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクト ID
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
- VERSION_ID: バージョンの ID またはバージョンの完全修飾識別子
HTTP メソッドと URL:
POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:destroy
リクエストの本文(JSON):
{}
リクエストを送信するには、次のいずれかのオプションを選択します。
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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:destroy"
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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:destroy" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name":"projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID", "createTime":"2023-10-16T17:21:55.920036Z", "state":"DISABLED", "replicationStatus":{ "automatic":{ } }, "etag":"\"1607d8b2fc1cf4\"", "scheduledDestroyTime":"2023-10-16T17:26:57.459395960Z" }
シークレット バージョンは直ちに無効になり、破棄の遅延期間が経過すると破棄がスケジュールされます。バージョンの正確な破棄日時は、[バージョン] テーブルの [破棄予定日時] 列で確認できます。
シークレット バージョンを復元する
シークレット バージョンを有効または無効にすることで、破棄がスケジュール設定されているシークレット バージョンを復元できます。
破棄がスケジュール設定されているシークレット バージョンを有効にする
コンソール
Google Cloud コンソールで、[Secret Manager] ページに移動します。
シークレット名をクリックします。[シークレットの詳細] ページが表示されます。
[シークレットの詳細] ページの [バージョン] テーブルで、破棄がスケジュール設定されているシークレット バージョンを選択します。
[操作] 列で、
[さらに表示] をクリックし、[有効にする] をクリックします。表示されたダイアログで、[選択したバージョンを有効にする] をクリックします。
gcloud
破棄がスケジュール設定されているシークレット バージョンを有効にするには、gcloud beta secrets versions enable コマンドを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_VERSION_ID: バージョンの ID またはバージョンの完全修飾識別子
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID
Windows(PowerShell)
gcloud beta secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID
Windows(cmd.exe)
gcloud beta secrets versions enable SECRET_VERSION_ID --secret=SECRET_ID
レスポンスには、有効なバージョンのシークレットが含まれます。
REST
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクト ID
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
- VERSION_ID: バージョンの ID またはバージョンの完全修飾識別子
HTTP メソッドと URL:
POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:enable
リクエストの本文(JSON):
{}
リクエストを送信するには、次のいずれかのオプションを選択します。
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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:enable"
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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:enable" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name":"projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID", "createTime":"2023-10-16T17:21:55.920036Z", "state":"ENABLED", "replicationStatus":{ "automatic":{ } }, "etag":"\"1607d8b3e8e1bc\"" }
破棄がスケジュール設定されているシークレット バージョンを無効にする
コンソール
Google Cloud コンソールで、[Secret Manager] ページに移動します。
シークレット名をクリックします。[シークレットの詳細] ページが表示されます。
[シークレットの詳細] ページの [バージョン] テーブルで、破棄がスケジュール設定されているシークレット バージョンを選択します。
[操作] 列で、
[さらに表示] をクリックし、[無効にする] をクリックします。表示されるダイアログで、[選択したバージョンを無効にする] をクリックします。
gcloud
破棄がスケジュール設定されているシークレット バージョンを無効にするには、gcloud beta secrets versions disable コマンドを使用します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_VERSION_ID: バージョンの ID またはバージョンの完全修飾識別子
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud beta secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID
Windows(PowerShell)
gcloud beta secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID
Windows(cmd.exe)
gcloud beta secrets versions disable SECRET_VERSION_ID --secret=SECRET_ID
レスポンスには、無効なバージョンのシークレットが含まれます。
REST
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Google Cloud プロジェクト ID
- SECRET_ID: シークレットの ID またはシークレットの完全修飾 ID
- VERSION_ID: バージョンの ID またはバージョンの完全修飾識別子
HTTP メソッドと URL:
POST https://secretmanager.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:disable
リクエストの本文(JSON):
{}
リクエストを送信するには、次のいずれかのオプションを選択します。
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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:disable"
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.googleapis.com/v1/projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID/:disable" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{ "name":"projects/PROJECT_ID/secrets/SECRET_ID/versions/VERSION_ID", "createTime":"2023-10-16T17:21:55.920036Z", "state":"DISABLED", "replicationStatus":{ "automatic":{ } }, "etag":"\"1607d8b3e8e1bc\"" }
次のステップ
- データの整合性を確保する方法を学習する。
- ベスト プラクティスについて確認する。