リージョン シークレットの有効期限を設定する

このページでは、新しいシークレットまたは既存のシークレットの有効期限を設定する方法、既存のシークレットの有効期限を変更する方法、以前に設定した有効期限をシークレットから削除する方法について説明します。

概要

デフォルトでは、Secret Manager に保存されているシークレットは、ユーザーが削除するまで存在します。シークレットを既知の限られた時間だけ保存すべき場合は、シークレットに有効期限を設定できます。シークレットに構成された時間になると、シークレットは自動的に削除されます。

シークレットを削除しなければならない要件がない場合は、IAM Conditions またはバージョン状態の無効化を使用して、安全な方法でアクセスを取り消すことを検討してください。

有効期限は、タイムスタンプまたは期間のいずれかとして入力できます。シークレット メタデータが取得されると、指定方法に関係なく、有効期限は常にタイムスタンプとして返されます。

有効期限は、いつでもシークレットに対して追加、更新、削除できます。

制限事項

  • シークレットの有効期限は 60 秒未満、100 年以上にはできません。

有効期限付きシークレットの安全な使用

Secret Manager でシークレットが期限切れになると、削除され、元に戻すことはできません。期限切れが近いシークレットを検出する最善の方法は、期限切れになる前に IAM Conditions を使用して、そのシークレットを使用するアカウントから権限を削除することです。

シークレットへのアクセスを効果的に管理するには、付与された権限に時間ベースの条件を設定します。

  • 有効期限を設定する: シークレット自体の設定された有効期限が切れる直前に、権限の有効期限が切れる必要があります。これにより、シークレットを予期せず使用しているワークフローやプロセスを特定できます。

  • 中断をモニタリングする: 権限が取り消された後にワークフローが停止した場合は、アクセス権をすばやく復元して影響を最小限に抑えることができます。

  • 必要に応じて調整する: 時間が足りない場合は、シークレットの有効期限を延長できます。また、不要になった場合はシークレットを完全に削除することもできます。

このアプローチにより、シークレットへのアクセスが厳密に制御され、必要な期間のみ使用できるため、不正アクセスや不正使用のリスクを軽減できます。

たとえば、サービス アカウントが 30 日間毎日シークレットにアクセスする必要があるシナリオを考えてみましょう。シークレットは、作成から 60 日後に期限切れになるように構成できます。これにより、想定される使用量の後にバッファ期間が設けられます。条件付き IAM バインディングを設定して、サービス アカウントに Secret Accessor のロールを 45 日間付与することもできます。サービス アカウントが 45 日経過後にシークレットにアクセスしようとすると、権限が拒否されます。このシークレットに依存するワークフローは機能しなくなります。管理者は、シークレット アクセサーのロールをサービス アカウントに再び付与することで、アクセスをすばやく復元できます。シークレット自体は 15 日間は削除されないため、30 日間の予定期間が経過してもシークレットが必要な理由を調査できます。

また、まもなく期限切れになるシークレットのログ警告に基づいてアラートを作成することもできます。詳細については、このドキュメントの有効期限のロギングをご覧ください。

タイムスタンプと期間の指定

  • タイムスタンプ値は、RFC 3339 形式にする必要があります(例: 2100-01-01T09:00:00-05:00)。

  • 期間の値は、「s」接尾辞を含む秒数の形式にする必要があります(例: 86400s)。

シークレットの有効期限の設定

シークレットの有効期限を設定するには、Google Cloud コンソール、Google Cloud CLI、または Secret Manager API を使用します。

Console

  1. Google Cloud コンソールの [Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [Secret Manager] ページで、[リージョン シークレット] タブをクリックし、[リージョン シークレットを作成] をクリックします。

  3. [リージョン シークレットを作成] ページの [名前] フィールドに、シークレットの名前を入力します。

  4. シークレットの値を入力します(例: abcd1234)。[ファイルをアップロード] オプションを使用して、シークレット値を含むテキスト ファイルをアップロードすることもできます。このアクションにより、シークレット バージョンが自動的に作成されます。

  5. [リージョン] リストから、リージョン シークレットを保存するロケーションを選択します。

  6. [有効期限] に移動し、[有効期限を設定する] チェックボックスをオンにします。

  7. 有効期限の日時を 月/日/年、時:分 AM/PM の形式で入力します(例: 7/31/20, 1:00 AM)。日付と時刻の選択ツールを使用して、有効期限の日時を入力することもできます。

  8. [シークレットの作成] をクリックします。

gcloud

タイムスタンプを使用して有効期限付きシークレットを作成する

後述のコマンドデータを使用する前に、次のように置き換えます。

  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • LOCATION: シークレットの Google Cloud ロケーション
  • TIMESTAMP: 有効期限(RFC 3339 形式)。例: 2100-01-01T09:00:00-05:00

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION \
    --expire-time "TIMESTAMP"

Windows(PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION `
    --expire-time "TIMESTAMP"

Windows(cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION ^
    --expire-time "TIMESTAMP"

期間を使用して有効期限付きシークレットを作成する

後述のコマンドデータを使用する前に、次のように置き換えます。

  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • LOCATION: シークレットの Google Cloud ロケーション
  • DURATION: 有効期限の継続時間(秒単位)。例: 86400s

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION \
  --ttl "DURATION"

Windows(PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION `
  --ttl "DURATION"

Windows(cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION ^
  --ttl "DURATION"

REST

タイムスタンプを使用して有効期限付きシークレットを作成する

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION: シークレットの Google Cloud ロケーション
  • PROJECT_ID: Google Cloud プロジェクト ID
  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • TIMESTAMP: 有効期限(RFC 3339 形式)。例: 2100-01-01T09:00:00-05:00

HTTP メソッドと URL:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/$PROJECT_ID/locations/LOCATION/secrets?secretId=$SECRET_ID

リクエストの本文(JSON):

{"expire_time": "TIMESTAMP"}

リクエストを送信するには、次のいずれかのオプションを選択します。

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-04T03:58:38.200877Z",
  "expireTime": "2024-09-04T09:25:39Z",
  "etag": "\"162143305d282d\""
}

期間を使用して有効期限付きシークレットを作成する

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION: シークレットの Google Cloud ロケーション
  • PROJECT_ID: Google Cloud プロジェクト ID
  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • DURATION: 有効期限の継続時間(秒単位)。例: 86400s

HTTP メソッドと URL:

POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID

リクエストの本文(JSON):

{"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.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-04T03:58:38.200877Z",
  "expireTime": "2024-09-04T09:25:39Z",
  "etag": "\"162143305d282d\""
}

シークレットの有効期限の更新

シークレットの有効期限の日時を更新するには、次のいずれかの方法を使用します。

Console

  1. Google Cloud コンソールの [Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [Secret Manager] ページで、[リージョン シークレット] タブをクリックします。

  3. シークレットを編集するには、リストでシークレットを見つけて、そのシークレットに関連付けられている [アクション] メニューをクリックします。[操作] メニューで [編集] をクリックします。

  4. [有効期限] セクションに移動します。有効期限の日時を更新し、[シークレットを更新] をクリックします。

gcloud

タイムスタンプを使用してシークレットの有効期限を更新する

後述のコマンドデータを使用する前に、次のように置き換えます。

  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • LOCATION: シークレット データを保存した Google Cloud リージョン
  • TIMESTAMP: 有効期限(RFC 3339 形式)。例: 2100-01-01T09:00:00-05:00

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
  --expire-time "TIMESTAMP"

Windows(PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
  --expire-time "TIMESTAMP"

Windows(cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
  --expire-time "TIMESTAMP"

期間を使用してシークレットの有効期限を更新する

後述のコマンドデータを使用する前に、次のように置き換えます。

  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • LOCATION: シークレットの Google Cloud ロケーション
  • DURATION: 有効期限の継続時間(秒単位)。例: 86400s

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
    --ttl "DURATION"

Windows(PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
    --ttl "DURATION"

Windows(cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
    --ttl "DURATION"

REST

タイムスタンプを使用してシークレットの有効期限を更新する

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION: シークレットの Google Cloud ロケーション
  • PROJECT_ID: Google Cloud プロジェクト ID
  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • TOKEN: 独自の Oauth2.0 アクセス トークン
  • TIMESTAMP: 有効期限(RFC 3339 形式)。例: 2100-01-01T09:00:00-05:00

HTTP メソッドと URL:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=expire_time

リクエストの本文(JSON):

{"expire_time": "TIMESTAMP"}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X PATCH \
-H "Authorization: Bearer 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=expire_time"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$headers = @{ "Authorization" = "Bearer TOKEN" }

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=expire_time" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T03:58:38.200877Z",
  "expireTime": "2024-09-04T09:25:39Z",
  "etag": "\"162143305d282d\""
}

期間を使用してシークレットの有効期限を更新する

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION: シークレットの Google Cloud ロケーション
  • PROJECT_ID: Google Cloud プロジェクト ID
  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • DURATION: 有効期限の継続時間(秒単位)。例: 86400s

HTTP メソッドと URL:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=ttl

リクエストの本文(JSON):

{"ttl": "DURATION"}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X PATCH \
-H "Authorization: Bearer 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=ttl"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$headers = @{ "Authorization" = "Bearer TOKEN" }

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=ttl" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T03:58:38.200877Z",
  "expireTime": "2024-09-04T09:25:39Z",
  "etag": "\"162143305d282d\""
}

シークレットの有効期限の削除

シークレットの有効期限の日時を削除するには、次のいずれかの方法を使用します。

Console

  1. Google Cloud コンソールの [Secret Manager] ページに移動します。

    Secret Manager に移動

  2. [Secret Manager] ページで、[リージョン シークレット] タブをクリックします。

  3. シークレットを編集するには、リストでシークレットを見つけて、そのシークレットに関連付けられている [アクション] メニューをクリックします。[操作] メニューで [編集] をクリックします。

  4. [有効期限] セクションに移動します。[有効期限を設定する] チェックボックスをオフにして、[シークレットを更新] をクリックします。

gcloud

後述のコマンドデータを使用する前に、次のように置き換えます。

  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • LOCATION: シークレットの Google Cloud ロケーション

次のコマンドを実行します。

Linux、macOS、Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
  --remove-expiration

Windows(PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
  --remove-expiration

Windows(cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
  --remove-expiration

REST

リクエストのデータを使用する前に、次のように置き換えます。

  • LOCATION: シークレットの Google Cloud ロケーション
  • PROJECT_ID: Google Cloud プロジェクト ID
  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • TOKEN: 独自の Oauth2.0 アクセス トークン

HTTP メソッドと URL:

PATCH https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=ttl

リクエストの本文(JSON):

{}

リクエストを送信するには、次のいずれかのオプションを選択します。

curl

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

curl -X PATCH \
-H "Authorization: Bearer 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=ttl"

PowerShell

リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。

$headers = @{ "Authorization" = "Bearer TOKEN" }

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=ttl" | Select-Object -Expand Content

次のような JSON レスポンスが返されます。

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-09-04T03:58:38.200877Z",
  "etag": "\"162143305d282d\""
}

有効期限のロギング

シークレットが自動的に期限切れになると、Cloud Audit Logs は生成されません。代わりに、Secret Manager は、シークレットの有効期限までの特定の間隔で、Secret Manager シークレット リソースにログを書き込みます。

ログのタイミング シークレット イベントのタイプ
有効期限の 30 日前 EXPIRES_IN_30_DAYS
有効期限の 7 日前 EXPIRES_IN_7_DAYS
有効期限の 1 日前 EXPIRES_IN_1_DAY
有効期限の 6 時間前 EXPIRES_IN_6_HOURS
有効期限の 1 時間前 EXPIRES_IN_1_HOUR
有効期限 EXPIRED

これらのログを表示する方法については、Logging クイックスタート ガイドをご覧ください。ログベースの指標を作成し、それらを使用して以降の有効期限のアラートを作成できます。

次のステップ