このページでは、顧客管理の暗号鍵(CMEK)を使用して新しいシークレットを作成し、CMEK 鍵を使用するように既存のシークレットを更新する方法について説明します。
概要
CMEK を使用すると、リージョン シークレットとして保存される機密データに対するセキュリティと制御が強化されます。CMEK を使用すると、次の目標を達成できます。
- シークレットの保護に使用される暗号鍵を完全に制御できます。
- 独自の鍵管理システムを使用して、より厳格なセキュリティ ポリシー、監査機能、コンプライアンス機能を利用できます。
- 鍵を独自のインフラストラクチャ内に保持することで、データ主権規制に準拠します。
- 暗号鍵に対するきめ細かいアクセス制御を定義し、鍵を使用できるユーザーと使用目的を指定します。
制限事項:
リージョン シークレットと一緒に CMEK を使用する場合、次の制限があります。
- Cloud Key Management Service Autokey(プレビュー版)は、リージョン シークレットではサポートされていません。
- CMEK 鍵のロケーションは、リージョン シークレットと同じロケーションにする必要があります。
始める前に
- プロジェクトごとに、Secret Manager API を有効にします。
- プロジェクト、フォルダ、または組織に対する Secret Manager 管理者ロール(
roles/secretmanager.admin
)を割り当てます。 次のいずれかの方法で Secret Manager API への認証を行います。
- クライアント ライブラリを使用して Secret Manager API にアクセスする場合は、アプリケーションのデフォルト認証情報を設定します。
- Google Cloud CLI を使用して Secret Manager API にアクセスする場合は、Google Cloud CLI 認証情報を使用して認証します。
- REST 呼び出しを認証するには、Google Cloud CLI 認証情報またはアプリケーションのデフォルト認証情報のいずれかを使用します。
CMEK を有効にして、この手順に必要な CMEK 鍵とキーリングを作成するには、Secret Manager の顧客管理の暗号鍵を有効にするをご覧ください。
CMEK 暗号化を使用してリージョン シークレットを作成する
CMEK 暗号化を使用して新しいシークレットを作成するには、次のいずれかの方法を使用します。
Console
-
Google Cloud コンソールの [Secret Manager] ページに移動します。
-
[Secret Manager] ページで、[リージョン シークレット] タブをクリックし、[リージョン シークレットを作成] をクリックします。
-
[リージョン シークレットを作成] ページの [名前] フィールドに、シークレットの名前を入力します。シークレット名には、大文字と小文字、数字、ハイフン、アンダースコアを使用できます。名前の最大長は 255 文字です。
-
シークレットの値を入力します(例:
abcd1234
)。シークレット値の形式は任意ですが、64 KiB 以下にする必要があります。[ファイルをアップロード] オプションを使用して、シークレット値を含むテキスト ファイルをアップロードすることもできます。この操作により、シークレット バージョンが自動的に作成されます。 -
[リージョン] リストから、リージョン シークレットを保存するロケーションを選択します。
-
[暗号化] で [顧客管理の暗号鍵(CMEK)] を選択し、[暗号鍵] リストから CMEK 鍵を選択します。CMEK 鍵が指定されたロケーションに存在し、鍵を使用するのに必要な権限が Secret Manager のプロジェクトにあることを確認します。
-
[シークレットの作成] をクリックします。
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
-
Google Cloud コンソールの [Secret Manager] ページに移動します。
-
[Secret Manager] ページで、[リージョン シークレット] タブをクリックします。
-
シークレットを編集するには、次のいずれかの方法を使用します。
-
リストでシークレットを見つけて、そのシークレットに関連付けられている
[操作] メニューをクリックします。[操作] メニューで [編集] をクリックします。 -
シークレット名をクリックして、シークレットの詳細ページに移動します。シークレットの詳細ページで、
[シークレットを編集する] をクリックします。
-
-
[シークレットを編集する] ページで、[暗号化] セクションに移動します。
-
[暗号化] で [顧客管理の暗号鍵(CMEK)] を選択し、[暗号鍵] リストから CMEK 鍵を選択します。CMEK 鍵が指定されたロケーションに存在し、鍵を使用するのに必要な権限が Secret Manager のプロジェクトにあることを確認します。
-
[シークレットを更新する] をクリックします。
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" } }