このトピックでは、顧客指定の暗号鍵を使用してディスクを暗号化する方法について説明します。
ディスク暗号化の詳細については、ディスクの暗号化についてをご覧ください。
顧客管理の暗号鍵(CMEK)を使用したディスクの暗号化については、Cloud KMS 鍵を使用してリソースを保護するをご覧ください。
CSEK を使用すると、独自の暗号鍵を提供できます。Compute Engine はその鍵を使用して、データの暗号化と復号に使用される Google 生成の鍵を保護します。正しい鍵を提供できるお客様だけが、顧客指定の暗号鍵(CSEK)で保護されたリソースを使用できます。
Google は顧客指定の暗号鍵を保持していません。お客様が鍵を提供しない限り、保護されたデータにはアクセスできません。また、このことは、お客様が鍵を忘れたりなくしたりした場合、Google には失われた鍵または鍵で暗号化されているデータを復旧する手段がないことも意味します。
永続ディスクを削除すると、Google は暗号鍵を破棄し、データを回復不能にします。このプロセスは元に戻せません。
始める前に
- ディスク、イメージ、ディスクのスナップショットについて確認します。
-
まだ設定していない場合は、認証を設定します。認証とは、Google Cloud サービスと API にアクセスするために ID を確認するプロセスです。ローカル開発環境からコードまたはサンプルを実行するには、次のように Compute Engine に対する認証を行います。
このページのサンプルをどのように使うかに応じて、タブを選択してください。
コンソール
Google Cloud コンソールを使用して Google Cloud サービスと API にアクセスする場合、認証を設定する必要はありません。
gcloud
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- デフォルトのリージョンとゾーンを設定します。
Python
このページの Python サンプルをローカル開発環境から使用するには、gcloud CLI をインストールして初期化し、自身のユーザー認証情報を使用してアプリケーションのデフォルト認証情報を設定してください。
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
If you're using a local shell, then create local authentication credentials for your user account:
gcloud auth application-default login
You don't need to do this if you're using Cloud Shell.
詳細については、 ローカル開発環境の認証の設定 をご覧ください。
REST
このページの REST API サンプルをローカル開発環境で使用するには、gcloud CLI に指定した認証情報を使用します。
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
-
制限事項
CSEK の場合、次の制限が適用されます。
一般的な制限事項
顧客指定の暗号鍵を使用できるかどうかは、リソースのロケーションではなく、請求先アカウントのロケーションに応じて決まります。
次の国にある請求先アカウントでは、顧客指定の暗号鍵を使用できません。
- ブラジル
- インド
技術的な制限事項
顧客指定の暗号鍵で暗号化できるのは、新しい永続ディスクだけです。既存の永続ディスクを独自の鍵で暗号化することはできません。
ローカル SSD ディスクでは、鍵は Google インフラストラクチャにより管理され、VM が停止すると削除されるため、独自の鍵を使用することはできません。
Compute Engine はインスタンス テンプレートで暗号鍵を保存しないため、マネージド インスタンス グループ内のディスクを暗号化するには顧客指定の暗号鍵を KMS に保存する必要があります。
CSEK で保護されたディスクがアタッチされているインスタンスは一時停止できません。
仕様
このセクションでは、CSEK の暗号化仕様と形式について説明します。
暗号化
Compute Engine は顧客指定の暗号鍵を使用して、Google の暗号鍵を AES-256 暗号化で保護します。
必要な鍵の形式
顧客指定の暗号鍵の生成と管理はお客様自身が行う必要があります。RFC 4648 標準の Base64 でエンコードされた 256 ビットの文字列である鍵を、Compute Engine に提供する必要があります。
文字列「Hello from Google Cloud Platform」から生成された、Base64 でエンコードされた鍵の例を次に示します。
SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=
これは、次のスクリプトを使用して生成することができます。
read -sp "String:" ; \ [[ ${#REPLY} == 32 ]] && \ echo "$(echo -n "$REPLY" | base64)" || \ (>&2 echo -e "\nERROR:Wrong Size"; false)
RSA 鍵のラッピング
Base64 で鍵をエンコードするだけでなく、Google によって提供される RSA 公開鍵証明書を使って鍵をラップしたうえで Base64 でエンコードし、リクエストに使用できます。
RSA ラッピングは、公開鍵を使ってデータを暗号化するプロセスです。公開鍵で暗号化されたデータは、対応する秘密鍵によってのみ復号できます。この場合、秘密鍵は Google Cloud サービスのみが認識しています。RSA 証明書を使って鍵をラップすることにより、Google Cloud サービスのみが鍵のラッピングを解除し、その鍵を使ってデータを保護できるようになります。
詳しくは、RSA 暗号化についての記事をご覧ください。
Compute Engine 用に RSA でラップされた鍵を作成するには、次のようにします。
- Compute Engine が管理する証明書で提供される公開鍵を使って、鍵をラップします。鍵をラップする際は、PKCS #1 v1.5 パディングではなく、必ず OAEP パディングを使用してください。
- 標準の Base64 エンコードを使って、RSA でラップされた鍵をエンコードします。
Compute Engine によって管理される公開鍵証明書は、次の場所からダウンロードします。
https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem
鍵を生成して RSA でラップするにはさまざまな方法があるので、慣れた方法を使ってください。鍵を RSA でラップする 2 つの例を次に示します。
例 1
この方法では、openssl コマンドライン ユーティリティを使って、鍵の RSA ラッピングとエンコードを行います。
(省略可)256 ビット(32 バイト)のランダムな鍵を生成します。使用する鍵がすでにある場合は、このステップを省略できます。鍵を生成するにはさまざまな方法があります。次に例を示します。
$ head -c 32 /dev/urandom | LC_CTYPE=C tr '\n' = > mykey.txt
公開鍵証明書をダウンロードします。
$ curl -s -O -L https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem
証明書から公開鍵を抽出します。
$ openssl x509 -pubkey -noout -in google-cloud-csek-ingress.pem > pubkey.pem
鍵を RSA でラップします。
mykey.txt
は実際の鍵ファイルに置き換えてください。$ openssl rsautl -oaep -encrypt -pubin -inkey pubkey.pem -in mykey.txt -out rsawrappedkey.txt
RSA でラップした鍵を Base64 でエンコードします。
$ openssl enc -base64 -in rsawrappedkey.txt | tr -d '\n' | sed -e '$a\' > rsawrapencodedkey.txt
例 2
次に示す Python スクリプトの例は、256 ビット(32 バイト)のランダムな文字列を生成し、cryptography ライブラリを使って、RSA でラップされ Base64 でエンコードされた鍵を作成します。
鍵が使用できる状態になります。
RSA でラップされた鍵を使用する
Google Cloud CLI を使用すると、標準の鍵も、RSA でラップされた鍵も、同じ方法で指定できます。
API を使用する場合、RSA でラップされた鍵を代わりに使用するには、rawKey
ではなく sha256
プロパティを使用します。
コマンドライン ツールを使用して CSEK でリソースを暗号化する
設定
暗号鍵は Google Cloud CLI で使用できます。
鍵ファイル
gcloud compute
コマンドライン ツールを使って鍵を設定するときは、エンコードされた鍵が JSON リストとして含まれる鍵ファイルを使って、エンコードされた鍵を指定します。1 つの鍵ファイルに複数の鍵を格納し、多くの鍵を一元的に管理できます。または、鍵ごとにファイルを作成して鍵を個別に処理することもできます。鍵ファイルは gcloud CLI でのみ使用できます。REST を使用する場合は、リクエストでキーを直接指定する必要があります。
鍵ファイルの各エントリでは、次の情報を提供する必要があります。
- 鍵が保護するリソースの完全修飾 URI
- 対応する鍵
- 鍵の種類(
raw
またはrsa-encrypted
)
リクエストで鍵ファイルを指定すると、一致するリソースが検索され、それぞれの鍵が使用されます。一致するリソースが見つからない場合、リクエストは失敗します。
鍵ファイルの例を次に示します。
[ { "uri": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/example-disk", "key": "acXTX3rxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY+c=", "key-type": "raw" }, { "uri": "https://www.googleapis.com/compute/v1/projects/myproject/global/snapshots/my-private-snapshot", "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==", "key-type": "rsa-encrypted" } ]
鍵ファイルの管理に関するベスト プラクティス
鍵ファイルを使う場合は、必要なユーザーだけがファイルにアクセスできるように制限する必要があります。鍵ファイルに対する適切な権限を設定し、次のようなツールを使ってファイルを暗号化することを検討してください。
- Windows では、BitLocker または暗号化ファイル システム(EFS)。
- macOS では、FileVault 2。
- Linux では、Linux Unified Key Setup(LUKS)または eCryptfs。
CSEK で新しい永続ディスクを暗号化する
VM またはディスクの作成時に鍵を指定することにより、新しい永続ディスクを暗号化できます。
Console
[ディスク] ページに移動します。
[ディスクを作成] をクリックし、新しいディスクのプロパティを入力します。
[暗号化] で、[お客様が指定する鍵] を選択します。
テキスト ボックスにディスクの暗号鍵を入力し、鍵を公開 RSA 鍵でラップしてある場合は [ラップされている鍵] を選択します。
gcloud
gcloud compute
ツールで VM を作成する際に --csek-key-file
フラグを使ってディスクを暗号化します。RSA でラップされた鍵を使用している場合は、gcloud beta
コンポーネントを使用します。
gcloud (beta) compute instances create example-instance --csek-key-file example-file.json
スタンドアロンの永続ディスクを暗号化するには:
gcloud (beta) compute disks create example-disk --csek-key-file example-file.json
REST
ディスクを暗号化するには、diskEncryptionKey
プロパティを使用し、v1 API に未加工(RSA でラップされていない)鍵をリクエストするか、ベータ版 API に RSA でラップされた鍵をリクエストします。リクエストで次のいずれかのプロパティを指定します。
rawKey
: 鍵が Base64 でエンコードされている場合rsaEncryptedKey
- 鍵が RSA でラップされ、さらに Base64 でエンコードされている場合
たとえば、VM 作成時に RSA でラップされた鍵を使用して新しいディスクを暗号化するには、次のようにします。
POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/instances { "machineType": "zones/us-central1-a/machineTypes/e2-standard-2", "disks": [ { "type": "PERSISTENT", "diskEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" }, "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-9-stretch-v20170619" }, "boot": true } ], ... }
同様に、REST を使用して新しいスタンドアロンの永続ディスクを作成し、独自の鍵で暗号化することもできます。
POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/ us-central1-a/disks?sourceImage=https%3A%2F%2Fwww.googleapis.com%2Fcompute%2F alpha%2Fprojects%2Fdebian-cloud%2Fglobal%2Fimages%2Fdebian-9-stretch-v20170619 { "name": "new-encrypted-disk-key", "diskEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" }, "type": "zones/us-central1-a/diskTypes/pd-standard" }
CSEK で暗号化されたディスクからスナップショットを作成する
暗号化されたディスクからスナップショットを作成する場合は、スナップショットも暗号化されている必要があります。鍵を指定してスナップショットを暗号化する必要があります。暗号化されたディスクや暗号化されたスナップショットを変換して、Compute Engine のデフォルトの暗号化を使用することもできません。そのためには、新しいディスク イメージと新しい永続ディスクを作成する必要があります。
CSEK で暗号化されたディスクのスナップショットは、常に完全なスナップショットになります。これとは異なり、顧客管理の暗号鍵(CMEK)で暗号化されたディスクのスナップショットは増分になります。スナップショットの料金はその合計サイズに基づいて計算されるため、完全なスナップショットは増分スナップショットよりもコストがかかる場合があります。
暗号化されたディスクから永続ディスク スナップショットを作成するには、スナップショット作成リクエストで永続ディスクの暗号化に使用した暗号鍵を提供する必要があります。
スナップショットを作成する前に、永続ディスク スナップショットのベスト プラクティスを確認してください。
コンソール
[スナップショット] ページに移動
[スナップショットを作成] をクリックします。
[ソースディスク] で、スナップショットを作成する暗号化されたディスクを選択します。
テキスト ボックスにディスクの暗号鍵を入力し、鍵を公開 RSA 鍵でラップしてある場合は [ラップされている鍵] を選択します。
[暗号化] セクションで追加の暗号鍵を指定して、新しいスナップショットを暗号化します。
REST
リクエストを行うには、sourceDiskEncryptionKey
プロパティを指定してソース永続ディスクにアクセスします。snapshotEncryptionKey
プロパティを使用して、新しいスナップショットを暗号化する必要があります。
未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。
POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk/createSnapshot { "snapshotEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" }, "sourceDiskEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" }, "name": "snapshot-encrypted-disk" }
sourceDiskEncryptionKey
プロパティは、永続ディスクの暗号化に使用した鍵と一致している必要があります。それ以外の場合、リクエストは失敗します。
snapshotEncryptionKey
を使用すると、スナップショットを暗号化する鍵を指定できます。指定した場合は、スナップショットを使用して新しい永続ディスクを作成するときに、一致する鍵を提供する必要があります。この鍵は、前の鍵の形式に従っている必要があります。このプロパティを定義しないでおくこともでき、その場合は、鍵を提供しなくてもスナップショットで新しい永続ディスクを作成できます。
CSEK で暗号化されたディスクまたはカスタム イメージから新しいイメージを作成する
暗号化された永続ディスクからカスタム イメージを作成したり、暗号化されたイメージをコピーしたりできます。コンソールを使用してイメージをコピーすることはできません。イメージをコピーするには、Google Cloud CLI または REST を使用します。
コンソール
[イメージ] ページに移動します。
[イメージを作成] をクリックします。
[ソースディスク] で、イメージを作成する暗号化されたディスクを選択します。
[暗号化] で、暗号鍵管理ソリューションを選択します。
鍵が RSA 公開鍵でラップされている場合は [ラップされている鍵] を選択します。
gcloud
手順に沿ってイメージを作成します。その際、--csek-key-file
フラグを追加して暗号化されたソース オブジェクトの暗号鍵ファイルのパスを指定します。RSA でラップされた鍵を使用している場合は、gcloud beta
コンポーネントを使います。
gcloud (beta) compute images create .... --csek-key-file example-file.json
新しいイメージを鍵で暗号化する場合は、鍵を鍵ファイルに追加します。
[ { "uri": "https://www.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks/source-disk", "key": "acX3RqzxrKAFTF0tYVLvydU1riRZTvUNC4g5I11NY-c=", "key-type": "raw" }, { "uri": "https://www.googleapis.com/compute/v1/projects/myproject/global/snapshots/the-new-image", "key": "TF0t-cSfl7CT7xRF1LTbAgi7U6XXUNC4zU_dNgx0nQc=", "key-type": "raw" } ]
REST
API 作成リクエストでは、ソース オブジェクトの暗号鍵プロパティを指定する必要があります。たとえば、ソース オブジェクトのタイプに応じて、次のいずれかのプロパティを指定します。
- 永続ディスク:
sourceDiskEncryptionKey
- イメージ:
sourceImageEncryptionKey
また、鍵タイプに応じて、rawKey
プロパティまたは rsaEncryptedKey
プロパティを指定します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。次の例では、暗号化されて RSA でラップされた永続ディスクを、同じ暗号鍵を使用するイメージに変換します。
POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images { "name": "image-encrypted-disk", "sourceDiskEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" } "imageEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" }, "sourceDisk": "projects/myproject/zones/us-central1-a/disks/source-disks" }
オプションの imageEncryptionKey
プロパティを使用すると、鍵を指定してイメージを暗号化できます。指定した場合は、イメージを使用して新しい永続ディスクを作成するときに、一致する鍵を提供する必要があります。この鍵は、前に説明したものと同じ鍵の形式に従っている必要があります。このプロパティを定義しないでおくこともでき、その場合は、鍵を提供しなくてもイメージで新しい永続ディスクを作成できます。
インポートしたイメージを CSEK で暗号化する
Compute Engine へのカスタム イメージの手動でのインポート時に新しいイメージを暗号化できます。イメージをインポートする前に、ディスク イメージ ファイルを作成して圧縮し、圧縮したファイルを Cloud Storage にアップロードする必要があります。
暗号化する Compute Engine のカスタム イメージをインポートします。圧縮されたファイルへの URI を指定し、さらに暗号鍵ファイルへのパスを指定します。
Console
[イメージ] ページに移動します。
[イメージを作成] をクリックします。
[ソース] で、[Cloud Storage ファイル] を選択します。
[Cloud Storage ファイル] で、Cloud Storage URI を入力します。
[暗号化] で [お客様が指定する鍵] を選択し、イメージを暗号化するための暗号鍵をテキスト ボックスに入力します。
gcloud
compute images create
コマンドを使用して新しいイメージを作成し、--csek-key-file
フラグに暗号鍵ファイルを指定します。RSA でラップされた鍵を使用している場合は、gcloud beta
コンポーネントを使用します。
gcloud (beta) compute images create [IMAGE_NAME] \ --source-uri gs://[BUCKET_NAME]/[COMPRESSED_FILE] \ --csek-key-file [KEY_FILE]
次のように置き換えます。
[IMAGE_NAME]
: 新しいカスタム イメージの名前。[BUCKET_NAME]
: 圧縮されたイメージ ファイルを保持する Cloud Storage バケットの名前。[COMPRESSED_FILE]
: 圧縮されたイメージ ファイルの名前。[KEY_FILE]
: ローカル ワークステーション上にある暗号鍵ファイルのパス。
REST
未加工ファイルから作成された新しいイメージを暗号化するには、新しい imageEncryptionKey
プロパティとそれに続く rawKey
または rsaEncryptedKey
を、イメージ作成リクエストに追加します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。
POST https://compute.googleapis.com/compute/beta/projects/myproject/global/images { "rawDisk": { "source": "http://storage.googleapis.com/example-image/example-image.tar.gz" }, "name": "new-encrypted-image", "sourceType": "RAW", "imageEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" } }
CSEK で暗号化されたリソースから永続ディスクを作成する
CSEK で暗号化されたスナップショットからディスクを作成する
Console
[ディスク] ページに移動します。
[ディスクを作成] をクリックします。
[ソースの種類] で、[スナップショット] を選択します。
[暗号化] で、暗号鍵管理ソリューションを選択します。
鍵が RSA 公開鍵でラップされている場合は [ラップされている鍵] を選択します。
gcloud
gcloud compute
ツールでは、ディスクの作成時に --csek-key-file
フラグを使用してスナップショットの暗号鍵を指定します。RSA でラップされた鍵を使用している場合は、gcloud beta
コンポーネントを使用します。
gcloud (beta) compute disks create ... --source-snapshot example-snapshot --csek-key-file example-file.json
REST
暗号化されたスナップショットを使用するには、リクエストで sourceSnapshotEncryptionKey
に続けて rawKey
または rsaEncryptedKey
を指定します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。たとえば、暗号化されたスナップショットを使用して新しいスタンドアロンの永続ディスクを作成するには、次のように指定します。
POST https://compute.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks { "name": "disk-from-encrypted-snapshot", "sourceSnapshot": "global/snapshots/encrypted-snapshot", "sourceSnapshotEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" } }
CSEK で暗号化されたイメージからディスクを作成する
Console
[ディスク] ページに移動します。
[ディスクを作成] をクリックします。
[ソースの種類] で、[イメージ] を選択します。
[暗号化] で、暗号鍵管理ソリューションを選択します。
鍵が RSA 公開鍵でラップされている場合は [ラップされている鍵] を選択します。
gcloud
gcloud compute
ツールでは、ディスクの作成時に --csek-key-file
フラグを使用してイメージの暗号鍵を指定します。RSA でラップされた鍵を使用している場合は、gcloud beta
コンポーネントを使用します。
gcloud (beta) compute disks create ... --image example-image --csek-key-file example-file.json
REST
暗号化されたイメージを使用するには、sourceImageEncryptionKey
に続けて rawKey
または rsaEncryptedKey
を指定します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。
POST https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-a/disks { "name": "disk-from-encrypted-image", "sourceImageEncryptionKey": { "rsaEncryptedKey": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==" }, "sourceImage": "global/images/encrypted-image" }
CSEK で暗号化されたディスクを新しい VM にアタッチする
Console
[インスタンスの作成] ページに移動します。
[ブートディスク] セクションで [変更] をクリックし、次の操作を行います。
- [ブートディスク] ページで、[既存のディスク] タブをクリックします。
- [ディスク] リストから、VM にアタッチする既存の暗号化ディスクを選択します。
テキスト ボックスに暗号鍵を入力します。鍵を公開 RSA 鍵でラップしてある場合は [ラップされている鍵] を選択します。
[選択] をクリックします。
VM 作成プロセスを続行します。
gcloud
VM を作成して暗号化されたディスクをアタッチするには、鍵ファイルを作成し、VM の作成時に --csek-key-file
フラグを使用して鍵を指定します。RSA でラップされた鍵を使用している場合は、gcloud beta
コンポーネントを使用します。
gcloud (beta) compute instances create example-instance \ --disk name=example-disk,boot=yes \ --csek-key-file example-file.json
REST
Compute Engine API を使用して VM を作成し、ディスクの指定で rawKey
または rsaEncryptedKey
を設定します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。
ディスク指定の例を次に示します。
"disks": [ { "deviceName": "encrypted-disk", "source": "projects/myproject/zones/us-central1-f/disks/encrypted-disk", "diskEncryptionKey": { "rawKey": "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0=" } } ]
CSEK で暗号化されたディスクのある VM を起動または再起動する
暗号化されたディスクのある VM の停止または起動の詳細については、暗号化されたディスクのある VM の再起動をご覧ください。
コマンドラインを使用した混合リソースの作成
Google Cloud CLI を使用して、顧客指定の暗号鍵で暗号化されたリソースと標準の暗号鍵で暗号化されたリソースの組み合わせ(混合リソース)を 1 回のリクエストで作成する場合は、--csek-key-file
フラグと鍵ファイルおよび --no-require-csek-key-create
フラグをリクエストで使用します。両方のフラグを指定すると、gcloud CLI は、鍵ファイルで明示的に定義されている顧客指定の暗号化リソースだけでなく、指定されている標準リソースも作成します。
たとえば、次のような内容の鍵ファイルがあるとします。
[ { "uri": "https://www.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/disks/example-disk", "key": "ieCx/NcW06PcT7Ep1X6LUTc/hLvUDYyzSZPPVCVPTVEohpeHASqC8uw5TzyO9U+Fka9JFHz0mBibXUInrC/jEk014kCK/NPjYgEMOyssZ4ZINPKxlUh2zn1bV+MCaTICrdmuSBTWlUUiFoDD6PYznLwh8ZNdaheCeZ8ewEXgFQ8V+sDroLaN3Xs3MDTXQEMMoNUXMCZEIpg9Vtp9x2oeQ5lAbtt7bYAAHf5l+gJWw3sUfs0/Glw5fpdjT8Uggrr+RMZezGrltJEF293rvTIjWOEB3z5OHyHwQkvdrPDFcTqsLfh+8Hr8g+mf+7zVPEC8nEbqpdl3GPv3A7AwpFp7MA==", "key-type": "rsa-encrypted" } ]
同じリクエストで、顧客指定の暗号鍵で暗号化したディスクを持つ VM を作成するのと同時に、標準の暗号鍵で暗号化されたディスクを持つ VM も作成したい場合は、次のようにします。
gcloud beta compute instances create example-disk example-disk-2 \ --csek-key-file mykeyfile.json --no-require-csek-key-create
example-disk-2
ディスクは鍵ファイルで明示的に定義されていないため、通常、--csek-key-file
フラグを指定しても、このディスクを作成することはできません。--no-require-csek-key-create
を追加することにより、鍵ファイルを使用して暗号化されるディスクと、Google 暗号化を使用して暗号化される別のディスクが、両方とも作成されます。
永続ディスクから CSEK を削除する
顧客指定の暗号化ディスクの内容を復号し、代わりに Compute Engine のデフォルトの暗号化を使用する新しいディスクを作成できます。
- 暗号化されたディスクのイメージを作成し、新しいイメージに対して自動暗号化を指定します。
- 新しいイメージを使用して、新しい永続ディスクを作成します。
このようにして作成された新しい永続ディスクは、Compute Engine のデフォルトの暗号化を使用してディスクの内容を保護します。そのディスクから作成されるスナップショットはいずれも、デフォルトの暗号化を使用する必要があります。