Cloud SQL シークレットの自動ローテーションを構成する

このページでは、Secret Manager で Cloud SQL データベース認証情報の自動ローテーションを構成する方法について説明します。

始める前に

  • Cloud SQL インスタンスが、PostgreSQL や SQL Server などのサポートされているデータベース エンジンのフレーバーを使用していることを確認します。
  • リージョン シークレットを使用していることを確認します。Cloud SQL 認証情報の自動ローテーションは、Secret Manager のリージョン シークレットでのみ使用できます。グローバル シークレットは、この機能をサポートしていません。
  • 既存の Cloud SQL インスタンスとデータベース ユーザーがあることを確認します。詳細については、インスタンスを作成するとユーザーを作成して管理するをご覧ください。
  • Cloud SQL インスタンスの IAM ポリシーを管理する権限があることを確認します。詳細については、ロールと権限をご覧ください。

必要なロール

自動ローテーションを有効にするために必要な権限を取得するには、次の権限を含むロールを付与するよう管理者に依頼してください。

  • cloudsql.users.list
  • cloudsql.users.update

これらの権限は、事前定義ロールまたはカスタムロールで取得できます。どのロールがどの権限に関連付けられているかを確認するには、Cloud SQL に適用される IAM のロールをご覧ください。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

Cloud SQL データベース認証情報のシークレットを作成する

自動ローテーションを有効にするには、Cloud SQL DB credentials タイプのシークレットを作成する必要があります。

コンソール

  1. Cloud de Confiance コンソールで、[Secret Manager] ページに移動します。

    Secret Manager に移動

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

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

  4. [シークレットのタイプを設定] チェックボックスをオンにして、シークレットのタイプとして [Cloud SQL DB credentials] を選択します。

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

  6. (省略可)[ローテーション] セクションで、シークレットのローテーション スケジュールを構成します。ローテーション スケジュールを構成しない場合は、シークレットを手動でローテーションする必要があります。

    1. [ローテーション期間を設定する] チェックボックスをオンにします。

    2. [ローテーション期間] リストで、デフォルトのオプションから選択するか、[カスタム] を選択して独自のローテーション スケジュールを構成します。

    3. [開始日] フィールドに、ローテーション期間の開始日時を入力します。

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

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 を持つリソースにロールを付与するをご覧ください。

コンソール

  1. シークレットの詳細ページで、[概要] タブに移動します。

  2. シークレットの IAM プリンシパル ID をメモします。

    指標 ID は次の形式になります。principal://secretmanager.googleapis.com/projects/PROJECT_NUMBER/uid/locations/LOCATION/secrets/SECRET_UID

  3. Cloud de Confiance コンソールで、[IAM] ページに移動します。

    [IAM] に移動

  4. [アクセス権を付与] をクリックします。

    [アクセスを許可] パネルが表示されます。

  5. [新しいプリンシパル] フィールドに、シークレットの IAM プリンシパル ID を入力します。

  6. [ロールを選択] リストから、必要な権限を付与するロールを選択します。

    詳細については、必要なロールをご覧ください。

  7. [保存] をクリックします。

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 です。権限を確認して自動ローテーション スケジュールを開始するには、シークレットを手動でローテーションする必要があります。

コンソール

  1. Cloud de Confiance コンソールで、[Secret Manager] ページに移動します。

    Secret Manager に移動

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

  3. シークレット名をクリックして、シークレットの詳細ページに移動します。

  4. [回転] をクリックします。

    [シークレットのローテーション] パネルが表示されます。

  5. 更新する Cloud SQL インスタンスのインスタンス ID とユーザー名を指定します。

  6. (省略可)[その他の設定] セクションを開いて、特定のパスワードを入力します。空白のままにすると、Secret Manager によって強力なランダム パスワードが自動的に生成されます。

  7. [ローテーション] をクリックします。

gcloud

マネージド ローテーションを有効にする

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

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

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

マネージド ローテーションを有効にする

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

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 に変わり、スケジュールされた自動ローテーション タイマーが開始されます。

次のステップ