このページでは、新しいシークレットまたは既存のシークレットの有効期限を設定する方法、既存のシークレットの有効期限を変更する方法、以前に設定した有効期限をシークレットから削除する方法について説明します。
概要
デフォルトでは、Secret Manager に保存されているシークレットは、ユーザーが削除するまで存在します。シークレットを既知の限られた時間だけ保存すべき場合は、シークレットに有効期限を設定できます。シークレットに構成された時間になると、シークレットは自動的に削除されます。
シークレットを削除しなければならない要件がない場合は、IAM Conditions またはバージョン状態の無効化を使用して、安全な方法でアクセスを取り消すことを検討してください。
有効期限は、タイムスタンプまたは期間のいずれかとして入力できます。シークレット メタデータが取得されると、指定方法に関係なく、有効期限は常にタイムスタンプとして返されます。
有効期限は、いつでもシークレットに対して追加、更新、削除できます。
制限事項
-
シークレットの有効期限は 60 秒未満、100 年以上にはできません。
有効期限付きシークレットの安全な使用
Secret Manager でシークレットが期限切れになると、削除され、元に戻すことはできません。期限切れが近いシークレットを検出する最善の方法は、期限切れになる前に IAM Conditions を使用して、そのシークレットを使用するアカウントから権限を削除することです。
シークレットへのアクセスを効果的に管理するには、付与された権限に時間ベースの条件を設定します。
-
有効期限を設定する: シークレット自体の設定された有効期限が切れる直前に、権限の有効期限が切れる必要があります。これにより、シークレットを予期せず使用しているワークフローやプロセスを特定できます。
-
中断をモニタリングする: 権限が取り消された後にワークフローが停止した場合は、アクセス権をすばやく復元して影響を最小限に抑えることができます。
-
必要に応じて調整する: 時間が足りない場合は、シークレットの有効期限を延長できます。また、不要になった場合はシークレットを完全に削除することもできます。
また、まもなく期限切れになるシークレットのログ警告に基づいてアラートを作成することもできます。詳細については、このドキュメントの有効期限のロギングをご覧ください。
タイムスタンプと期間の指定
-
タイムスタンプ値は、RFC 3339 形式にする必要があります(例:
2100-01-01T09:00:00-05:00
)。 -
期間の値は、「s」接尾辞を含む秒数の形式にする必要があります(例:
86400s
)。
シークレットの有効期限の設定
シークレットの有効期限を設定するには、Google Cloud コンソール、Google Cloud CLI、または Secret Manager API を使用します。
Console
-
Google Cloud コンソールの [Secret Manager] ページに移動します。
-
[Secret Manager] ページで、[リージョン シークレット] タブをクリックし、[リージョン シークレットを作成] をクリックします。
-
[リージョン シークレットを作成] ページの [名前] フィールドに、シークレットの名前を入力します。
-
シークレットの値を入力します(例:
abcd1234
)。[ファイルをアップロード] オプションを使用して、シークレット値を含むテキスト ファイルをアップロードすることもできます。このアクションにより、シークレット バージョンが自動的に作成されます。 -
[リージョン] リストから、リージョン シークレットを保存するロケーションを選択します。
-
[有効期限] に移動し、[有効期限を設定する] チェックボックスをオンにします。
-
有効期限の日時を 月/日/年、時:分 AM/PM の形式で入力します(例:
7/31/20, 1:00 AM
)。日付と時刻の選択ツールを使用して、有効期限の日時を入力することもできます。 -
[シークレットの作成] をクリックします。
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
-
Google Cloud コンソールの [Secret Manager] ページに移動します。
-
[Secret Manager] ページで、[リージョン シークレット] タブをクリックします。
-
シークレットを編集するには、リストでシークレットを見つけて、そのシークレットに関連付けられている
[アクション] メニューをクリックします。[操作] メニューで [編集] をクリックします。 -
[有効期限] セクションに移動します。有効期限の日時を更新し、[シークレットを更新] をクリックします。
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
-
Google Cloud コンソールの [Secret Manager] ページに移動します。
-
[Secret Manager] ページで、[リージョン シークレット] タブをクリックします。
-
シークレットを編集するには、リストでシークレットを見つけて、そのシークレットに関連付けられている
[アクション] メニューをクリックします。[操作] メニューで [編集] をクリックします。 -
[有効期限] セクションに移動します。[有効期限を設定する] チェックボックスをオフにして、[シークレットを更新] をクリックします。
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 クイックスタート ガイドをご覧ください。ログベースの指標を作成し、それらを使用して以降の有効期限のアラートを作成できます。