このページでは、バケットでデフォルトの鍵を設定する方法や個々のオブジェクトに鍵を追加するなど、Cloud Storage で Cloud Key Management Service の暗号鍵を使用する方法について説明します。Cloud KMS 暗号鍵は、Cloud KMS によって作成され、ユーザーによって管理される顧客管理の暗号鍵です。
Cloud KMS の詳細については、Cloud KMS をご覧ください。
前提条件
Cloud Storage でこの機能を使用する前に、以下の準備が必要です。
暗号鍵を格納するプロジェクトの Cloud KMS API を有効にする。
暗号鍵を格納するプロジェクトに対して十分な権限を持つ。
鍵が保存されるプロジェクトを所有している場合は、必要な権限があると考えられます。
新しい暗号キーリングと鍵を作成する予定がある場合は、
cloudkms.keyRings.create
とcloudkms.cryptoKey.create
の権限が必要です。キーリングと鍵を使用する予定がある場合は、それが新規か既存かを問わず、暗号化に使用する鍵に対する
cloudkms.cryptoKey.setIamPolicy
権限が必要です。この権限があると、Cloud Storage サービス アカウントに Cloud KMS 鍵へのアクセス権を付与できます。
上記の権限は、Cloud KMS 管理者ロールに含まれています。
このロールを含め、Cloud KMS のロールの取得方法については、IAM と Cloud KMS の使用をご覧ください。
Cloud Storage バケット内のオブジェクトを操作するための十分な権限を持つ。
バケットを含むプロジェクトを所有している場合は、必要な権限を持っていると考えられます。
IAM を使用する場合は、バケットにオブジェクトを書き込むための
storage.objects.create
権限とバケットからオブジェクトを読み取るためのstorage.objects.get
権限が必要です。これらの権限を持つロール(ストレージ オブジェクト管理者など)を取得する手順については、IAM 権限の使用をご覧ください。ACL を使用する場合は、バケットにオブジェクトを書き込むためのバケット範囲の
WRITER
権限とバケットからオブジェクトを読み取るためのオブジェクト範囲のREADER
権限が必要です。設定方法については、ACL の設定をご覧ください。
Cloud KMS キーリングと、キーリング内に少なくとも 1 つの鍵を持っている。
-
Cloud Storage バケットを含むプロジェクトに関連付けられているサービス アカウントのメールアドレスを取得する。
サービス アカウントへの Cloud KMS 鍵の割り当て
顧客管理の暗号鍵を使用するには、Cloud Storage サービス アカウントに Cloud KMS 鍵を使用する権限を付与する必要があります。
Console
- Google Cloud Console で Cloud Key Management Service 鍵ブラウザを開きます。
Cloud KMS 鍵のブラウザを開く 目的の鍵を含むキーリングの名前をクリックします。
使用する鍵のチェックボックスをオンにします。
右側のウィンドウの [権限] タブが有効になります。
[メンバーの追加] ダイアログで、アクセス権を付与する Cloud Storage サービス アカウントのメールアドレスを指定します。
[役割を選択] プルダウンで、[クラウド KMS 暗号鍵の暗号化 / 復号] を選択します。
[追加] をクリックします。
Cloud Storage ブラウザで失敗したオペレーションに関する詳細なエラー情報を確認する方法については、トラブルシューティングをご覧ください。
gsutil
gsutil kms authorize
コマンドを使用して、バケットに関連付けられたサービス アカウントに、Cloud KMS 鍵を使用してオブジェクトを暗号化、復号する権限を付与します。
gsutil kms authorize -p PROJECT_STORING_OBJECTS -k KEY_RESOURCE
ここで
PROJECT_STORING_OBJECTS
は、暗号化または復号するオブジェクトが含まれているプロジェクトの ID です。例:my-pet-project
KEY_RESOURCE
は Cloud KMS 鍵リソースです。例:projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
付与された権限を削除するには、gcloud
コマンドライン ツールまたは Google Cloud Console のいずれかを使用する必要があります。
コードサンプル
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
REST API
JSON API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
次の情報が含まれる .json ファイルを作成します。
{ "policy": { "bindings": { "role": "roles/cloudkms.cryptoKeyEncrypterDecrypter", "members": "SERVICE_ACCOUNT_EMAIL_ADDRESS" }, } }
ここで、
SERVICE_ACCOUNT_EMAIL_ADDRESS
はサービス アカウントに関連付けられたメールアドレスです。例:service-7550275089395@gs-project-accounts.iam.gserviceaccount.com
cURL
を使用して、POST setIamPolicy
リクエストで Cloud KMS API を呼び出します。curl -X POST --data-binary @JSON_FILE_NAME.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://cloudkms.googleapis.com/v1/KEY_RESOURCE:setIamPolicy"
ここで
JSON_FILE_NAME
は、手順 2 で作成したファイルの名前です。OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。KEY_RESOURCE
は Cloud KMS 鍵リソースです。例:projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
XML API
XML API を使用して、Cloud KMS をサービス アカウントに割り当てることはできません。代わりに、gsutil などの、他のいずれかの Cloud Storage ツールを使用してください。
デフォルトの暗号鍵の使用
バケットのデフォルトの鍵の追加または変更
オブジェクトがバケットに書き込まれたときにデフォルトで使用される Cloud KMS 鍵を追加または変更するには:
Console
- Google Cloud Console で Cloud Storage ブラウザを開きます。
Cloud Storage ブラウザを開く バケットのリストで、目的のバケットをクリックします。
バケットの詳細ページで、[構成] タブをクリックします。
暗号化タイプのエントリに関連付けられた鉛筆アイコンをクリックします。
現在、バケットで Cloud KMS 鍵が使用されていない場合は、[顧客管理の暗号鍵] ラジオボタンをオンにします。
顧客管理の鍵のプルダウン メニューで、選択可能な鍵のいずれかを選択します。
[保存] をクリックします。
Cloud Storage ブラウザで失敗したオペレーションに関する詳細なエラー情報を確認する方法については、トラブルシューティングをご覧ください。
gsutil
gsutil kms encryption
コマンドを使用します。
gsutil kms encryption -k KEY_RESOURCE gs://BUCKET_NAME
ここで
KEY_RESOURCE
は Cloud KMS 鍵リソースです。例:projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
BUCKET_NAME
は、関連するバケットの名前です。例:my-bucket
成功した場合、レスポンスは次のようになります。
Setting default KMS key for bucket gs://my-bucket...
コードサンプル
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
REST API
JSON API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
次の情報が含まれる .json ファイルを作成します。
{ "encryption": { "defaultKmsKeyName": "KEY_RESOURCE" } }
ここで、
KEY_RESOURCE
は Cloud KMS 鍵リソースです。例:projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
cURL
を使用して JSON API を呼び出し、PATCH
Bucket リクエストを行います。curl -X PATCH --data-binary @JSON_FILE_NAME.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=encryption"
ここで
JSON_FILE_NAME
は、手順 2 で作成したファイルです。OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。BUCKET_NAME
は、関連するバケットの名前です。例:my-bucket
XML API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
次の情報を含む .xml ファイルを作成します。
<EncryptionConfiguration> <DefaultKmsKeyName>KEY_RESOURCE</DefaultKmsKeyName> </EncryptionConfiguration>
ここで、
KEY_RESOURCE
は Cloud KMS 鍵リソースです。例:projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
cURL
を使用して、PUT
Bucket リクエストとencryption
クエリ文字列パラメータを含めた XML API を呼び出します。curl -X PUT --data-binary @XML_FILE_NAME.xml \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?encryptionConfig"
ここで
XML_FILE_NAME
は、手順 2 で作成したファイルです。OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。BUCKET_NAME
は、関連するバケットの名前です。例:my-bucket
バケットのデフォルトの鍵の表示
バケットのデフォルトとして現在設定されている Cloud KMS 鍵を表示するには:
Console
- Google Cloud Console で Cloud Storage ブラウザを開きます。
Cloud Storage ブラウザを開く バケットのリストで、目的のバケットをクリックします。
バケットの詳細ページで、[構成] タブをクリックします。
バケットの現在のデフォルトの鍵が [暗号鍵] フィールドに表示されます。
Cloud Storage ブラウザで失敗したオペレーションに関する詳細なエラー情報を確認する方法については、トラブルシューティングをご覧ください。
gsutil
gsutil kms encryption
コマンドを使用します。
gsutil kms encryption gs://BUCKET_NAME
ここで、BUCKET_NAME
は鍵を表示するバケットの名前です。例: my-bucket
成功した場合、レスポンスは次のようになります。
Default encryption key for gs://my-bucket: KEY_RESOURCE
REST API
JSON API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
cURL
を使用して、目的のfields
を含むGET
Bucket リクエストで JSON API を呼び出します。curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=encryption"
ここで
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。BUCKET_NAME
は鍵を表示するバケットの名前です。例:my-bucket
次の例のようなレスポンスになります。
{ "encryption" : { "defaultKmsKeyName": "KEY_RESOURCE" }, }
XML API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
cURL
を使用して、encryption
クエリ パラメータが含まれるGET
Bucket リクエストで XML API を呼び出します。curl -X GET -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?encryptionConfig"
ここで
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。BUCKET_NAME
は鍵を表示するバケットの名前です。例:my-bucket
次の例のようなレスポンスになります。
<EncryptionConfiguration> <DefaultKmsKeyName>KEY_RESOURCE</DefaultKmsKeyName> </EncryptionConfiguration>
バケットからのデフォルトの鍵の削除
バケットに設定したデフォルトの Cloud KMS 鍵を削除するには:
Console
- Google Cloud Console で Cloud Storage ブラウザを開きます。
Cloud Storage ブラウザを開く バケットのリストで、目的のバケットをクリックします。
バケットの詳細ページで、[構成] タブをクリックします。
暗号化タイプのエントリに関連付けられた鉛筆アイコンをクリックします。
[Google が管理する鍵] ラジオボタンをオンにします。
[保存] をクリックします。
Cloud Storage ブラウザで失敗したオペレーションに関する詳細なエラー情報を確認する方法については、トラブルシューティングをご覧ください。
gsutil
gsutil kms encryption
コマンドを使用します。
gsutil kms encryption -d gs://BUCKET_NAME
BUCKET_NAME
は、該当するバケットの名前です。例: my-bucket
成功した場合、レスポンスは次のようになります。
Clearing default encryption key for gs://my-bucket...
コードサンプル
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
REST API
JSON API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
次の情報が含まれる .json ファイルを作成します。
{ "encryption": { "defaultKmsKeyName": null } }
cURL
を使用して JSON API を呼び出し、PATCH
Bucket リクエストを行います。curl -X PATCH --data-binary @JSON_FILE_NAME.json \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: application/json" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME?fields=encryption"
ここで
JSON_FILE_NAME
は、手順 2 で作成したファイルです。OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。BUCKET_NAME
は、関連するバケットの名前です。例:my-bucket
XML API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
次の情報を含む .xml ファイルを作成します。
<EncryptionConfiguration></EncryptionConfiguration>
cURL
を使用して、PUT
Bucket リクエストとencryption
クエリ文字列パラメータを含めた XML API を呼び出します。curl -X PUT --data-binary @XML_FILE_NAME.xml \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME?encryptionConfig"
ここで
XML_FILE_NAME
は、手順 2 で作成したファイルです。OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。BUCKET_NAME
は、関連するバケットの名前です。例:my-bucket
Cloud KMS 鍵を使用したオブジェクトの暗号化
Cloud KMS 鍵を使用してオブジェクトを個々に暗号化できます。これは、バケットに設定したデフォルトの鍵とは異なる鍵を使用する場合や、バケットにデフォルトの鍵が設定されていない場合に便利です。
Console
Cloud Console で個々のオブジェクトを暗号化することはできません。代わりに gsutil かクライアント ライブラリを使用してください。
gsutil
.boto 構成ファイルの
[GSUtil]
セクションに、次のオプションを追加します。encryption_key = KEY_RESOURCE
ここで、
KEY_RESOURCE
は Cloud KMS 鍵リソースです。例:projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
gsutil cp
やgsutil rewrite
などを使用して、通常どおりにバケットにオブジェクトを書き込みます。
コードサンプル
C++
詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。
C#
詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。
Go
詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。
Node.js
詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。
PHP
詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。
Python
詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。
Ruby
詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。
Java
詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。
次のサンプルでは、顧客管理の暗号鍵を使用してオブジェクトを暗号化します。
次のサンプルでは、オブジェクトの暗号化に使用する鍵を顧客指定の暗号鍵から顧客管理の暗号鍵に変更します。
REST API
JSON API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
オブジェクトのデータをリクエストの本文に追加します。
cURL
を使用して、POST
Object リクエストで JSON API を呼び出します。curl -X POST --data-binary @OBJECT \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ "https://storage.googleapis.com/upload/storage/v1/b/BUCKET_NAME/o?uploadType=media&name=OBJECT_NAME&kmsKeyName=KEY_RESOURCE"
ここで
OBJECT
は、アップロードするオブジェクトへのパスです。例:Desktop/dog.png
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。OBJECT_CONTENT_TYPE
は、オブジェクトのコンテンツ タイプです。例:image/png
BUCKET_NAME
は、オブジェクトをアップロードするバケットの名前です。例:my-bucket
OBJECT_NAME
は、アップロードするオブジェクトの名前です。例:pets/dog.png
KEY_RESOURCE
は Cloud KMS 鍵リソースです。例:projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
XML API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
オブジェクトのデータをリクエストの本文に追加します。
cURL
を使用して、PUT
Object リクエストで XML API を呼び出します。curl -X PUT --data-binary @OBJECT \ -H "Authorization: Bearer OAUTH2_TOKEN" \ -H "Content-Type: OBJECT_CONTENT_TYPE" \ -H "x-goog-encryption-kms-key-name: KEY_RESOURCE" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME"
ここで
OBJECT
は、アップロードするオブジェクトへのパスです。例:Desktop/dog.png
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。OBJECT_CONTENT_TYPE
は、オブジェクトのコンテンツ タイプです。例:image/png
BUCKET_NAME
は、オブジェクトをアップロードするバケットの名前です。例:my-bucket
OBJECT_NAME
は、アップロードするオブジェクトの名前です。例:pets/dog.png
KEY_RESOURCE
は Cloud KMS 鍵リソースです。例:projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key
オブジェクトを暗号化するために使用される鍵の特定
オブジェクトの暗号化に使用された Cloud KMS 鍵の名前を確認するには:
Console
- Google Cloud Console で Cloud Storage ブラウザを開きます。
Cloud Storage ブラウザを開く バケットのリストで、目的のオブジェクトが含まれるバケットの名前をクリックします。
[バケットの詳細] ページが開き、[オブジェクト ] タブが選択されています。
フォルダ内にあるオブジェクトに移動します。
[暗号化] 列でそのオブジェクトのエントリにカーソルを合わせます。
鍵名の形式は次のとおりです。
LOCATION/KEY_RING_NAME/KEY_NAME/KEY_VERSION
gsutil
gsutil stat
コマンドを使用します。
gsutil stat gs://BUCKET_NAME/OBJECT_NAME
ここで
BUCKET_NAME
は、暗号化されたオブジェクトが格納されているバケットの名前です。例:my-bucket
OBJECT_NAME
は暗号化されたオブジェクトの名前です。例:pets/dog.png
成功した場合、レスポンスに鍵の名前が含まれます。
gs://my-bucket/pets/dog.png: ... KMS key: projects/my-pet-project/locations/us-east1/keyRings/my-key-ring/cryptoKeys/my-key ...
REST API
JSON API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
cURL
を使用して、GET
Object リクエストで JSON API を呼び出します。curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/storage/v1/b/BUCKET_NAME/o/OBJECT_NAME?fields=kmsKeyName"
ここで
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。BUCKET_NAME
は、暗号化されたオブジェクトが格納されているバケットの名前です。例:my-bucket
OBJECT_NAME
は暗号化されたオブジェクトの名前です。例:pets/dog.png
XML API
- OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するように Playground を構成します。
cURL
を使用して、GET
Object リクエストで XML API を呼び出します。curl -X GET \ -H "Authorization: Bearer OAUTH2_TOKEN" \ "https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME?encryption"
ここで
OAUTH2_TOKEN
は、手順 1 で生成したアクセス トークンです。BUCKET_NAME
は、暗号化されたオブジェクトが格納されているバケットの名前です。例:my-bucket
OBJECT_NAME
は暗号化されたオブジェクトの名前です。例:pets/dog.png
オブジェクトの復号
顧客管理の暗号鍵で暗号化されたオブジェクトの復号は、関連するサービス アカウントがその鍵にアクセスできる限り、自動的に実行されます。詳細については、顧客管理の暗号鍵を使用したサービス アカウントをご覧ください。
次のステップ
- Cloud Storage の顧客管理の暗号鍵について学習する。
- Cloud Storage で使用可能な他の暗号化オプションについて学習する。
- Cloud KMS で動作できる他のプロダクトについて調べる。