リージョン シークレットに CMEK 暗号化を追加する

このページでは、顧客管理の暗号鍵(CMEK)を使用して新しいシークレットを作成し、CMEK 鍵を使用するように既存のシークレットを更新する方法について説明します。

概要

CMEK を使用すると、リージョン シークレットとして保存される機密データに対するセキュリティと制御が強化されます。CMEK を使用すると、次の目標を達成できます。

  • シークレットの保護に使用される暗号鍵を完全に制御できます。
  • 独自の鍵管理システムを使用して、より厳格なセキュリティ ポリシー、監査機能、コンプライアンス機能を利用できます。
  • 鍵を独自のインフラストラクチャ内に保持することで、データ主権規制に準拠します。
  • 暗号鍵に対するきめ細かいアクセス制御を定義し、鍵を使用できるユーザーと使用目的を指定します。

制限事項:

リージョン シークレットと一緒に CMEK を使用する場合、次の制限があります。

  • Cloud Key Management Service Autokeyプレビュー版)は、リージョン シークレットではサポートされていません。
  • CMEK 鍵のロケーションは、リージョン シークレットと同じロケーションにする必要があります。

始める前に

  1. プロジェクトごとに、Secret Manager API を有効にします
  2. プロジェクト、フォルダ、または組織に対する Secret Manager 管理者ロール(roles/secretmanager.admin)を割り当てます。
  3. 次のいずれかの方法で Secret Manager API への認証を行います。

    • クライアント ライブラリを使用して Secret Manager API にアクセスする場合は、アプリケーションのデフォルト認証情報を設定します。
    • Google Cloud CLI を使用して Secret Manager API にアクセスする場合は、Google Cloud CLI 認証情報を使用して認証します。
    • REST 呼び出しを認証するには、Google Cloud CLI 認証情報またはアプリケーションのデフォルト認証情報のいずれかを使用します。
  4. CMEK を有効にして、この手順に必要な CMEK 鍵とキーリングを作成するには、Secret Manager の顧客管理の暗号鍵を有効にするをご覧ください。

CMEK 暗号化を使用してリージョン シークレットを作成する

CMEK 暗号化を使用して新しいシークレットを作成するには、次のいずれかの方法を使用します。

Console

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

    Secret Manager に移動

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

  3. [リージョン シークレットを作成] ページの [名前] フィールドに、シークレットの名前を入力します。シークレット名には、大文字と小文字、数字、ハイフン、アンダースコアを使用できます。名前の最大長は 255 文字です。

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

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

  6. [暗号化] で [顧客管理の暗号鍵(CMEK)] を選択し、[暗号鍵] リストから CMEK 鍵を選択します。CMEK 鍵が指定されたロケーションに存在し、鍵を使用するのに必要な権限が Secret Manager のプロジェクトにあることを確認します。

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

gcloud

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

  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • LOCATION: シークレットを作成する Google Cloud のロケーション
  • CMEK_KEY: シークレットを保護する Cloud Key Management Service の特定の CMEK 鍵への完全修飾パス

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

Linux、macOS、Cloud Shell

gcloud secrets create SECRET_ID --location=LOCATION \
    --regional-kms-key-name=CMEK_KEY

Windows(PowerShell)

gcloud secrets create SECRET_ID --location=LOCATION `
    --regional-kms-key-name=CMEK_KEY

Windows(cmd.exe)

gcloud secrets create SECRET_ID --location=LOCATION ^
    --regional-kms-key-name=CMEK_KEY

REST

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

  • LOCATION: シークレットを作成する Google Cloud のロケーション
  • PROJECT_ID: Google Cloud プロジェクト ID。
  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子。
  • KMS_PROJECT_ID: Cloud Key Management Service を実行している Google Cloud プロジェクトの ID。
  • KMS_KEY_LOCATION: Cloud KMS 鍵のロケーション名。これは、シークレットと同じロケーションに存在する必要があります。
  • YOUR_KEY_RING: CMEK 鍵を保存した Cloud KMS のキーリングの名前。
  • YOUR_CMEK_KEY: Cloud KMS で選択したキーリング内に作成した特定の顧客管理の暗号鍵(CMEK)。

HTTP メソッドと URL:

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

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

{"customer_managed_encryption": {"kms_key_name": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"}}

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

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-03-27T13:30:07.437859Z",
  "etag": "\"1614a467b60423\""
  "customerManagedEncryption": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
  }
}

CMEK を使用するように既存のシークレットを更新する

CMEK を使用するように既存のシークレットを更新するには、次のいずれかの方法を使用します。

Console

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

    Secret Manager に移動

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

  3. シークレットを編集するには、次のいずれかの方法を使用します。

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

    • シークレット名をクリックして、シークレットの詳細ページに移動します。シークレットの詳細ページで、[シークレットを編集する] をクリックします。

  4. [シークレットを編集する] ページで、[暗号化] セクションに移動します。

  5. [暗号化] で [顧客管理の暗号鍵(CMEK)] を選択し、[暗号鍵] リストから CMEK 鍵を選択します。CMEK 鍵が指定されたロケーションに存在し、鍵を使用するのに必要な権限が Secret Manager のプロジェクトにあることを確認します。

  6. [シークレットを更新する] をクリックします。

gcloud

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

  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子
  • LOCATION: シークレットの Google Cloud ロケーション
  • CMEK_KEY: シークレットを保護する Cloud Key Management Service の特定の CMEK 鍵への完全修飾パス

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

Linux、macOS、Cloud Shell

gcloud secrets update SECRET_ID --location=LOCATION \
    --regional-kms-key-name=CMEK_KEY

Windows(PowerShell)

gcloud secrets update SECRET_ID --location=LOCATION `
    --regional-kms-key-name=CMEK_KEY

Windows(cmd.exe)

gcloud secrets update SECRET_ID --location=LOCATION ^
    --regional-kms-key-name=CMEK_KEY

REST

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

  • LOCATION: シークレットの Google Cloud ロケーション
  • PROJECT_ID: Google Cloud プロジェクト ID。
  • SECRET_ID: シークレットの ID またはシークレットの完全修飾識別子。
  • KMS_PROJECT_ID: Cloud Key Management Service を実行している Google Cloud プロジェクトの ID。
  • KMS_KEY_LOCATION: Cloud KMS 鍵のロケーション。これは、シークレットと同じロケーションに存在する必要があります。
  • YOUR_KEY_RING: CMEK 鍵を保存した Cloud KMS のキーリングの名前。
  • YOUR_CMEK_KEY: Cloud KMS で選択したキーリング内に作成した特定の顧客管理の暗号鍵(CMEK)。

HTTP メソッドと URL:

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

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

{"customer_managed_encryption": {"kms_key_name": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/YOUR_KEY_RING/cryptoKeys/YOUR_CMEK_KEY"}}"

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

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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=customer_managed_encryption"

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.LOCATION.rep.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID?updateMask=customer_managed_encryption" | Select-Object -Expand Content

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

{
  "name": "projects/PROJECT_ID/locations/LOCATION/secrets/SECRET_ID",
  "createTime": "2024-03-27T13:30:07.437859Z",
  "etag": "\"16211daf5f29c5\""
  "customerManagedEncryption": {
    "kmsKeyName": "projects/KMS_PROJECT_ID/locations/KMS_KEY_LOCATION/keyRings/secret-manager-cmek/cryptoKeys/my-cmek-key"
  }
}

次のステップ