このページでは、Secret Manager で Cloud SQL データベース認証情報の自動ローテーションを構成する方法について説明します。
始める前に
- Cloud SQL インスタンスが、PostgreSQL や SQL Server などのサポートされているデータベース エンジンのフレーバーを使用していることを確認します。
- リージョン シークレットを使用していることを確認します。Cloud SQL 認証情報の自動ローテーションは、Secret Manager のリージョン シークレットでのみ使用できます。グローバル シークレットは、この機能をサポートしていません。
- 既存の Cloud SQL インスタンスとデータベース ユーザーがあることを確認します。詳細については、インスタンスを作成するとユーザーを作成して管理するをご覧ください。
- Cloud SQL インスタンスの IAM ポリシーを管理する権限があることを確認します。詳細については、ロールと権限をご覧ください。
必要なロール
自動ローテーションを有効にするために必要な権限を取得するには、次の権限を含むロールを付与するよう管理者に依頼してください。
cloudsql.users.listcloudsql.users.update
これらの権限は、事前定義ロールまたはカスタムロールで取得できます。どのロールがどの権限に関連付けられているかを確認するには、Cloud SQL に適用される IAM のロールをご覧ください。
ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。
Cloud SQL データベース認証情報のシークレットを作成する
自動ローテーションを有効にするには、Cloud SQL DB credentials タイプのシークレットを作成する必要があります。
コンソール
-
Cloud de Confiance コンソールで、[Secret Manager] ページに移動します。
-
[Secret Manager] ページで、[リージョン シークレット] タブをクリックし、 [リージョン シークレットを作成] をクリックします。
-
[リージョン シークレットを作成] ページの [名前] フィールドに、シークレットの名前を入力します。
-
[シークレットのタイプを設定] チェックボックスをオンにして、シークレットのタイプとして [
Cloud SQL DB credentials] を選択します。 -
[リージョン] リストから、リージョン シークレットを保存するロケーションを選択します。
-
(省略可)[ローテーション] セクションで、シークレットのローテーション スケジュールを構成します。ローテーション スケジュールを構成しない場合は、シークレットを手動でローテーションする必要があります。
[ローテーション期間を設定する] チェックボックスをオンにします。
[ローテーション期間] リストで、デフォルトのオプションから選択するか、[カスタム] を選択して独自のローテーション スケジュールを構成します。
[開始日] フィールドに、ローテーション期間の開始日時を入力します。
-
[シークレットの作成] をクリックします。
gcloud
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_ID: シークレットの ID
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud secrets create SECRET_ID \ --location=LOCATION \ --secret-type=CLOUD_SQL_DB_CREDENTIALS
Windows(PowerShell)
gcloud secrets create SECRET_ID ` --location=LOCATION ` --secret-type=CLOUD_SQL_DB_CREDENTIALS
Windows(cmd.exe)
gcloud secrets create SECRET_ID ^ --location=LOCATION ^ --secret-type=CLOUD_SQL_DB_CREDENTIALS
次のようなレスポンスが返されます。
Created secret [projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID].
REST
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
- PROJECT_ID: Cloud de Confiance by S3NS プロジェクト ID
- SECRET_ID: シークレットの ID
HTTP メソッドと URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets?secretId=SECRET_ID
リクエストの本文(JSON):
{
"secretType": "CLOUD_SQL_DB_CREDENTIALS"
}
リクエストを送信するには、次のいずれかのオプションを選択します。
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_NUMBER/locations/LOCATION/secrets/SECRET_ID",
"createTime": "2026-07-28T05:00:00Z",
"secretType": "CLOUD_SQL_DB_CREDENTIALS",
"etag": "\"1a2b3c4d\"",
"policyMember": {
"iamPolicyUidPrincipal": "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
}
}
組み込みのシークレット ID に権限を付与する
各シークレットには、 Cloud de Confiance by S3NS プロジェクト内の他のすべてのリソースと区別するための一意の識別子があります。Cloud SQL インスタンスの認証情報を更新するために必要な権限を、組み込み ID に付与する必要があります。詳細については、組み込み ID を持つリソースにロールを付与するをご覧ください。
コンソール
-
シークレットの詳細ページで、[概要] タブに移動します。
-
シークレットの IAM プリンシパル ID をメモします。
指標 ID は次の形式になります。
principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID -
Cloud de Confiance コンソールで、[IAM] ページに移動します。
-
[アクセス権を付与] をクリックします。
[アクセスを許可] パネルが表示されます。
-
[新しいプリンシパル] フィールドに、シークレットの IAM プリンシパル ID を入力します。
-
[ロールを選択] リストから、必要な権限を付与するロールを選択します。
詳細については、必要なロールをご覧ください。
-
[保存] をクリックします。
gcloud
シークレット ID を取得する
IAM 権限を付与する前に、シークレットを記述して iamPolicyUidPrincipal 組み込み ID を取得します。この ID 文字列は、IAM ポリシー バインディングを追加するときに --member フラグで指定します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_ID: シークレットの ID
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud secrets describe SECRET_ID \ --location=LOCATION \ --format="value(policyMember.iamPolicyUidPrincipal)"
Windows(PowerShell)
gcloud secrets describe SECRET_ID ` --location=LOCATION ` --format="value(policyMember.iamPolicyUidPrincipal)"
Windows(cmd.exe)
gcloud secrets describe SECRET_ID ^ --location=LOCATION ^ --format="value(policyMember.iamPolicyUidPrincipal)"
次のようなレスポンスが返されます。
principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID
シークレット ID に IAM ロールを付与する
必要な Cloud SQL 権限(cloudsql.users.update や cloudsql.users.list など、または事前定義ロール roles/cloudsql.admin)を含む IAM ロールを、前の手順で取得したシークレット ID プリンシパルに付与します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Cloud de Confiance by S3NS プロジェクト ID
- PROJECT_NUMBER: 数値形式の Cloud de Confiance by S3NS プロジェクト番号
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
- SECRET_UID: シークレット リソースのシステム生成の一意の識別子
- ROLE: シークレット ID に付与された IAM ロール
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" \ --role="ROLE"
Windows(PowerShell)
gcloud projects add-iam-policy-binding PROJECT_ID ` --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" ` --role="ROLE"
Windows(cmd.exe)
gcloud projects add-iam-policy-binding PROJECT_ID ^ --member="principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID" ^ --role="ROLE"
REST
シークレット ID を取得する
IAM 権限を付与する前に、シークレットの詳細を取得して iamPolicyUidPrincipal 組み込み ID を取得します。この ID 文字列は、IAM ポリシーを設定するときにリクエスト JSON で指定します。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
- PROJECT_ID: Cloud de Confiance by S3NS プロジェクト ID
- SECRET_ID: シークレットの ID
HTTP メソッドと URL:
GET https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID
リクエストの本文(JSON):
{
"policy": {
"bindings": [
{
"role": "ROLE",
"members": [
"principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
]
}
]
}
}
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
curl -X GET \
-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"
PowerShell
リクエスト本文を request.json という名前のファイルに保存して、次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-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" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID",
"createTime": "2026-07-28T05:00:00Z",
"secretType": "CLOUD_SQL_DB_CREDENTIALS",
"etag": "\"1a2b3c4d\"",
"policyMember": {
"iamPolicyUidPrincipal": "principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
}
}
シークレット ID に IAM ロールを付与する
必要な Cloud SQL 権限(cloudsql.users.update や cloudsql.users.list など、または事前定義ロール roles/cloudsql.admin)を含む IAM ロールを、前の手順で取得したシークレット ID プリンシパルに付与します。
リクエストのデータを使用する前に、次のように置き換えます。
- PROJECT_ID: Cloud de Confiance by S3NS プロジェクト ID
- ROLE: シークレット ID に付与された IAM ロール
- PROJECT_NUMBER: 数値形式の Cloud de Confiance by S3NS プロジェクト番号
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
- SECRET_UID: シークレット リソースのシステム生成の一意の識別子
HTTP メソッドと URL:
POST https://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy
リクエストの本文(JSON):
{
"policy": {
"bindings": [
{
"role": "ROLE",
"members": [
"principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
]
}
]
}
}
リクエストを送信するには、次のいずれかのオプションを選択します。
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://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy"
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://cloudresourcemanager.googleapis.com/v1/projects/PROJECT_ID:setIamPolicy" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{
"version": 1,
"etag": "BwWWv0I7vBw=",
"bindings": [
{
"role": "roles/cloudsql.admin",
"members": [
"principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID"
]
}
]
}
シークレットをローテーションする
新しく作成された Cloud SQL シークレットのローテーション ステータスは、最初のローテーションが成功するまで Disabled です。権限を確認して自動ローテーション スケジュールを開始するには、シークレットを手動でローテーションする必要があります。
コンソール
-
Cloud de Confiance コンソールで、[Secret Manager] ページに移動します。
-
[Secret Manager] ページで、[リージョン シークレット] タブをクリックします。
-
シークレット名をクリックして、シークレットの詳細ページに移動します。
-
[回転] をクリックします。
[シークレットのローテーション] パネルが表示されます。
-
更新する Cloud SQL インスタンスのインスタンス ID とユーザー名を指定します。
-
(省略可)[その他の設定] セクションを開いて、特定のパスワードを入力します。空白のままにすると、Secret Manager によって強力なランダム パスワードが自動的に生成されます。
-
[ローテーション] をクリックします。
gcloud
マネージド ローテーションを有効にする
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_ID: シークレットの ID
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
- INSTANCE_ID: Cloud SQL インスタンス ID
- USERNAME: Cloud SQL データベース ユーザー アカウント名
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud secrets enable-managed-rotation SECRET_ID \ --location=LOCATION \ --instance-id=INSTANCE_ID \ --username=USERNAME
Windows(PowerShell)
gcloud secrets enable-managed-rotation SECRET_ID ` --location=LOCATION ` --instance-id=INSTANCE_ID ` --username=USERNAME
Windows(cmd.exe)
gcloud secrets enable-managed-rotation SECRET_ID ^ --location=LOCATION ^ --instance-id=INSTANCE_ID ^ --username=USERNAME
シークレットを手動でローテーションする
手動ローテーションをすぐにトリガーして、最初のシークレット バージョンを生成し、接続を確認します。
後述のコマンドデータを使用する前に、次のように置き換えます。
- SECRET_ID: シークレットの ID
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
次のコマンドを実行します。
Linux、macOS、Cloud Shell
gcloud secrets rotate-secret SECRET_ID \ --location=LOCATION
Windows(PowerShell)
gcloud secrets rotate-secret SECRET_ID ` --location=LOCATION
Windows(cmd.exe)
gcloud secrets rotate-secret SECRET_ID ^ --location=LOCATION
次のようなレスポンスが返されます。
Name: projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1 State: ENABLED
REST
マネージド ローテーションを有効にする
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
- PROJECT_ID: Cloud de Confiance by S3NS プロジェクト ID
- SECRET_ID: シークレットの ID
- INSTANCE_ID: Cloud SQL インスタンス ID
- USERNAME: Cloud SQL データベース ユーザー アカウント名
HTTP メソッドと URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:enableManagedRotation
リクエストの本文(JSON):
{
"cloudSqlSingleUserCredentials": {
"instanceId": "INSTANCE_ID",
"username": "USERNAME"
}
}
リクエストを送信するには、次のいずれかのオプションを選択します。
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/SECRET_ID:enableManagedRotation"
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/SECRET_ID:enableManagedRotation" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
"createTime": "2026-07-28T05:00:00Z",
"state": "ENABLED"
}
シークレットを手動でローテーションする
手動ローテーションをすぐにトリガーして、最初のシークレット バージョンを生成し、接続を確認します。
リクエストのデータを使用する前に、次のように置き換えます。
- LOCATION: シークレットの Cloud de Confiance by S3NS ロケーション
- PROJECT_ID: Cloud de Confiance by S3NS プロジェクト ID
- SECRET_ID: シークレットの ID
HTTP メソッドと URL:
POST https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret
リクエストを送信するには、次のいずれかのオプションを選択します。
curl
次のコマンドを実行します。
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d "" \
"https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret"
PowerShell
次のコマンドを実行します。
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-Uri "https://secretmanager.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID:rotateSecret" | Select-Object -Expand Content
次のような JSON レスポンスが返されます。
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/secrets/SECRET_ID/versions/1",
"createTime": "2026-07-28T05:00:00Z",
"state": "ENABLED"
}
Secret Manager は、Cloud SQL インスタンスの認証情報の更新を試みます。成功すると、ローテーション ステータスが Enabled に変わり、スケジュールされた自動ローテーション タイマーが開始されます。