顧客指定の暗号鍵でディスクを暗号化する

Compute Engine はすべての保存データをデフォルトで暗号化します。Compute Engine はこの暗号化を自動的に処理および管理するため、お客様側での作業は必要ありません。ただし、お客様が自分でこの暗号化を制御および管理したい場合は、独自の暗号鍵を提供できます。

お客様が独自の暗号鍵を提供した場合、Compute Engine はその鍵を使用して、データの暗号化と復号に使用される Google 生成の鍵を保護します。正しい鍵を提供できるお客様だけが、お客様指定の暗号鍵で保護されたリソースを使用できます。

Google はお客様指定の鍵を保持せず、お客様が鍵を提供しない限り保護されたデータにはアクセスできません。また、このことは、お客様が鍵を忘れたりなくしたりした場合、Google には失われた鍵または鍵で暗号化されているデータを復旧する手段がないことも意味します。

永続ディスクを削除すると、Google は暗号鍵を破棄し、データを回復不能にします。このプロセスは元に戻せません。

始める前に

仕様

暗号化

Compute Engine は顧客指定の暗号鍵を使用して、Google の暗号鍵を AES-256 暗号化で保護します。

制限事項

この機能の使用に関しては、制限事項がいくつかあります。

一般的な制限事項

顧客指定の暗号鍵は、次の国では使用できません。

  • ブラジル
  • インド

技術的な制限事項

  • 独自の鍵で暗号化できるのは、新しい永続ディスクだけです。既存の永続ディスクを独自の鍵で暗号化することはできません。

  • ローカル SSD が存続するのは仮想マシンの存続期間内に限られます。したがって、ローカル SSD で独自の鍵を使うことはできません。ローカル SSD はエフェメラル暗号鍵ですでに保護されていますが、Google はこの鍵を保持しません。

  • Compute Engine はインスタンス テンプレートで暗号鍵を保存しないため、独自の鍵を使用してマネージド インスタンス グループ内のディスクを暗号化することはできません。

必要な鍵の形式

鍵の生成と管理はお客様自身が行う必要があります。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 Platform サービスのみが認識しています。RSA 証明書を使って鍵をラップすることにより、Google Cloud Platform サービスのみが鍵のラッピングを解除し、その鍵を使ってデータを保護できるようになります。

詳しくは、RSA 暗号化についての記事をご覧ください。

Compute Engine 用に RSA でラップされた鍵を作成するには、次のようにします。

  1. Compute Engine が管理する証明書で提供される公開鍵を使って、鍵をラップします。鍵をラップする際は、PKCS #1 v1.5 パディングではなく、必ず OAEP パディングを使用してください。
  2. 標準の Base64 エンコードを使って、RSA でラップされた鍵をエンコードします。

Compute Engine によって管理される公開鍵証明書は、次の場所からダウンロードします。

https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem

鍵を生成して RSA でラップするにはさまざまな方法があるので、慣れた方法を使ってください。鍵を RSA でラップする 2 つの例を次に示します。

例 1

この方法では、openssl コマンドライン ユーティリティを使って、鍵の RSA ラッピングとエンコードを行います。

  1. (省略可)256 ビット(32 バイト)のランダムな鍵を生成します。使用する鍵がすでにある場合は、このステップを省略できます。鍵を生成するにはさまざまな方法があります。一例を次に示します。

    $ head -c 32 /dev/urandom | LC_CTYPE=C tr '\n' = > mykey.txt
    
  2. 公開鍵証明書をダウンロードします。

    $  curl -s -O -L https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem
  3. 証明書から公開鍵を抽出します。

    $ openssl x509 -pubkey -noout -in google-cloud-csek-ingress.pem > pubkey.pem
    
  4. 鍵を RSA でラップします。mykey.txt は実際の鍵ファイルに置き換えてください。

    $ openssl rsautl -oaep -encrypt -pubin -inkey pubkey.pem -in mykey.txt -out rsawrappedkey.txt
    
  5. RSA でラップした鍵を Base64 でエンコードします。

    $ openssl enc -base64 -in rsawrappedkey.txt | tr -d '\n' | sed -e '$a\' > rsawrapencodedkey.txt
    

例 2

次に示す Python スクリプトの例は、256 ビット(32 バイト)のランダムな文字列を生成し、cryptography ライブラリを使って、RSA でラップされて Base64 でエンコードされた鍵を作成します。


import argparse
import base64
import os

from cryptography import x509
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding
import requests

GOOGLE_PUBLIC_CERT_URL = (
    'https://cloud-certs.storage.googleapis.com/google-cloud-csek-ingress.pem')

def get_google_public_cert_key():
    r = requests.get(GOOGLE_PUBLIC_CERT_URL)
    r.raise_for_status()

    # Load the certificate.
    certificate = x509.load_pem_x509_certificate(
        r.text.encode('utf-8'), default_backend())

    # Get the certicate's public key.
    public_key = certificate.public_key()

    return public_key

def wrap_rsa_key(public_key, private_key_bytes):
    # Use the Google public key to encrypt the customer private key.
    # This means that only the Google private key is capable of decrypting
    # the customer private key.
    wrapped_key = public_key.encrypt(
        private_key_bytes,
        padding.OAEP(
            mgf=padding.MGF1(algorithm=hashes.SHA1()),
            algorithm=hashes.SHA1(),
            label=None))
    encoded_wrapped_key = base64.b64encode(wrapped_key)
    return encoded_wrapped_key

def main(key_file):
    # Generate a new 256-bit private key if no key is specified.
    if not key_file:
        customer_key_bytes = os.urandom(32)
    else:
        with open(key_file, 'rb') as f:
            customer_key_bytes = f.read()

    google_public_key = get_google_public_cert_key()
    wrapped_rsa_key = wrap_rsa_key(google_public_key, customer_key_bytes)

    print('Base-64 encoded private key: {}'.format(
        base64.b64encode(customer_key_bytes).decode('utf-8')))
    print('Wrapped RSA key: {}'.format(wrapped_rsa_key.decode('utf-8')))

if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=__doc__,
        formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument(
        '--key_file', help='File containing your binary private key.')

    args = parser.parse_args()

    main(args.key_file)

鍵が使用できる状態になります。

RSA でラップされた鍵を使用する

gcloud コマンドライン ツールを使用すると、標準の鍵も、RSA でラップされた鍵も、同じ方法で指定できます。

API を使用する場合、RSA でラップされた鍵を代わりに使用するには、rawKey ではなく sha256 プロパティを使用します。

コマンドライン ツールでリソースを暗号化する

セットアップ

暗号鍵は gcloud コマンドライン ツールで使用できます。

gcloud をダウンロードしてインストールします。

鍵ファイル

gcloud compute コマンドライン ツールを使って鍵を設定するときは、エンコードされた鍵が JSON リストとして含まれる鍵ファイルを使って、エンコードされた鍵を指定します。1 つの鍵ファイルに複数の鍵を格納し、多くの鍵を一元的に管理できます。または、鍵ごとにファイルを作成して鍵を個別に処理することもできます。鍵ファイルは gcloud ツールでのみ使用できます。API を使うときは、リクエストで鍵を直接指定する必要があります。

鍵ファイルの各エントリでは、次の情報を提供する必要があります。

  • 鍵が保護するリソースの完全修飾 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"
  }
]

鍵ファイルの管理に関するおすすめの方法

鍵ファイルを使う場合は、必要なユーザーだけがファイルにアクセスできるように制限する必要があります。鍵ファイルに対する適切な権限を設定し、次のようなツールを使ってファイルを暗号化することを検討してください。

独自の鍵で新しい永続ディスクを暗号化する

インスタンスまたはディスクの作成時に鍵を指定することにより、新しい永続ディスクを暗号化できます。

Console

  1. [ディスク] ページに移動します。

    [ディスク] ページに移動

  2. [新しいディスク] をクリックし、新しいディスクのプロパティを入力します。
  3. [暗号化] で、プルダウン メニューから [顧客指定] を選択します。
  4. テキスト ボックスにディスクの暗号鍵を入力し、鍵を公開 RSA 鍵でラップしてある場合は [ラップされている鍵] を選択します。

GCLOUD

gcloud compute ツールでインスタンスを作成する際に --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

API

API では、diskEncryptionKey プロパティを使用し、未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行ってディスクを暗号化します。リクエストで次のいずれかのプロパティを指定します。

  • rawKey - 鍵が Base64 でエンコードだけされている場合
  • rsaEncryptedKey - 鍵が RSA でラップされたうえで、Base64 でエンコードされている場合

たとえば、インスタンス作成時に RSA でラップされた鍵を使用して新しいディスクを暗号化するには、次のようにします。

POST
https://www.googleapis.com/compute/beta/projects/myproject/zones/us-central1-a/instances

{
"machineType": "zones/us-central1-a/machineTypes/n1-standard-1",
"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
 }
],
...
}

同様に、API を使ってスタンドアロンの永続ディスクを新しく作成し、独自の鍵でそれを暗号化することもできます。

POST https://www.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"
}

暗号化されたディスクからスナップショットを作成する

暗号化されたディスクからスナップショットを作成する場合は、スナップショットも暗号化されている必要があります。鍵を指定してスナップショットを暗号化する必要があります。暗号化されたディスクまたは暗号化されたスナップショットを、Compute Engine のデフォルトの暗号化を使うように変換することはできません。まったく新しいディスク イメージと新しい永続ディスクを作成する必要があります

暗号化されたディスクのスナップショットは常に完全なスナップショットであり、増分スナップショットよりストレージの費用がかかります。

暗号化されたディスクから永続ディスク スナップショットを作成するには、スナップショット作成リクエストで永続ディスクの暗号化に使用した暗号鍵を提供する必要があります。

スナップショットを作成する前に、永続ディスク スナップショットのベスト プラクティスを確認してください。

Console

  1. [スナップショット] ページに移動します。

    [スナップショット] ページに移動

  2. [新しいスナップショット] をクリックします。
  3. [ソースディスク] で、スナップショットを作成する暗号化されたディスクを選択します。
  4. テキスト ボックスにディスクの暗号鍵を入力し、鍵を公開 RSA 鍵でラップしてある場合は [ラップされている鍵] を選択します。
  5. [暗号化] セクションで追加の暗号鍵を指定して、新しいスナップショットを暗号化します。

API

API では、sourceDiskEncryptionKey プロパティを指定して、ソース永続ディスクにアクセスします。必要に応じて、snapshotEncryptionKey プロパティを使用して新しいスナップショットを暗号化することもできます。

未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。

POST https://www.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 を使用すると、スナップショットを暗号化する鍵を指定できます。指定した場合は、スナップショットを使用して新しい永続ディスクを作成するときに、一致する鍵を提供する必要があります。この鍵は、前に説明したものと同じ鍵の形式に従っている必要があります。このプロパティを定義しないでおくこともでき、その場合は、鍵を提供しなくてもスナップショットで新しい永続ディスクを作成できます。

暗号化されたディスクまたは暗号化されたカスタム イメージから新しいイメージを作成する

暗号化された永続ディスクからカスタム イメージを作成したり、暗号化されたイメージをコピーしたりできます。Console を使用してイメージをコピーすることはできません。イメージをコピーするには、gcloud コマンドライン ツールか API を使用します。

Console

  1. Google Cloud Platform Console で、[イメージの作成] ページに移動します。
    [イメージの作成] ページに移動
  2. [新しいイメージ] をクリックします。
  3. [ソースディスク] で、イメージを作成する暗号化されたディスクを選択します。
  4. テキスト ボックスにディスクの暗号鍵を入力し、鍵を公開 RSA 鍵でラップしてある場合は [ラップされている鍵] を選択します。
  5. 必要に応じて、[暗号化] セクションで暗号鍵を指定して、新しいイメージを暗号化することもできます。

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"
  }
]

API

API 作成リクエストでは、ソース オブジェクトの暗号鍵プロパティを指定する必要があります。たとえば、ソース オブジェクトのタイプに応じて、次のいずれかのプロパティを指定します。

  • 永続ディスク: sourceDiskEncryptionKey
  • イメージ: sourceImageEncryptionKey

また、鍵タイプに応じて、rawKey プロパティまたは rsaEncryptedKey プロパティを指定します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。次の例では、暗号化されて RSA でラップされた永続ディスクを、同じ暗号鍵を使用するイメージに変換します。

POST https://www.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 プロパティを使用すると、鍵を指定してイメージを暗号化できます。指定した場合は、イメージを使用して新しい永続ディスクを作成するときに、一致する鍵を提供する必要があります。この鍵は、前に説明したものと同じ鍵の形式に従っている必要があります。このプロパティを定義しないでおくこともでき、その場合は、鍵を提供しなくてもイメージで新しい永続ディスクを作成できます。

インポートしたイメージを暗号化する

Compute Engine へのカスタム イメージの手動でのインポート時に新しいイメージを暗号化できます。イメージをインポートする前に、ディスク イメージ ファイルを作成して圧縮し、圧縮したファイルを Cloud Storage にアップロードする必要があります。

暗号化する Compute Engine のカスタム イメージをインポートします。圧縮されたファイルへの URI を指定し、さらに暗号鍵ファイルへのパスを指定します。

Console

  1. [イメージ] ページに移動します。

    [イメージ] ページに移動

  2. [新しいイメージ] をクリックします。
  3. [ソースの種類] で、[Cloud Storage オブジェクト] を選択します。
  4. [暗号化] で [顧客指定] を選択し、イメージを暗号化するための暗号鍵をテキスト ボックスに入力します。
  5. [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] は、ローカル ワークステーション上にある暗号鍵ファイルへのパスです。

API

未加工ファイルから作成された新しいイメージを暗号化するには、新しい imageEncryptionKey プロパティとそれに続く rawKey または rsaEncryptedKey を、イメージ作成リクエストに追加します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。

POST https://www.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=="
  }
}

暗号化されたリソースから永続ディスクを作成する

暗号化されたスナップショットからディスクを作成する

Console

  1. [ディスク] ページに移動します。

    [ディスク] ページに移動

  2. [新しいディスク] をクリックします。
  3. [ソースの種類] で、[スナップショット] を選択します。
  4. テキスト ボックスにスナップショットの暗号鍵を入力し、鍵を公開 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

API

暗号化されたスナップショットを使用するには、リクエストで sourceSnapshotEncryptionKey に続けて rawKey または rsaEncryptedKey を指定します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。たとえば、暗号化されたスナップショットを使用して新しいスタンドアロンの永続ディスクを作成するには、次のように指定します。

POST https://www.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=="
  }
}

暗号化されたイメージからディスクを作成する

Console

  1. [ディスク] ページに移動します。

    [ディスク] ページに移動

  2. [新しいディスク] をクリックします。
  3. [ソースの種類] で、[イメージ] を選択します。
  4. テキスト ボックスにイメージの暗号鍵を入力し、鍵を公開 RSA 鍵でラップしてある場合は [ラップされている鍵] を選択します。

GCLOUD

gcloud compute ツールでは、ディスクの作成時に --csek-key-file フラグを使用してイメージの暗号鍵を指定します。RSA でラップされた鍵を使用している場合は、gcloud beta コンポーネントを使用します。

gcloud (beta) compute disks create ... --image example-image --csek-key-file example-file.json

API

暗号化されたイメージを使用するには、sourceImageEncryptionKey に続けて rawKey または rsaEncryptedKey を指定します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。

POST https://www.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"
}

暗号化されたディスクを新しいインスタンスに接続する

Console

  1. [VM インスタンス] ページに移動します。

    [VM インスタンス] ページに移動

  2. [新しいインスタンス] をクリックします。
  3. [ブート] で [変更] をクリックします。
  4. [既存のディスク] を選択します。
  5. インスタンスに接続する既存のディスクを選択します。
  6. テキスト ボックスに暗号鍵を入力し、鍵が RSA 公開鍵でラップされている場合は [ラップされている鍵] を選択します。
  7. インスタンスの作成処理を続けます。

GCLOUD

インスタンスを作成して暗号化されたディスクを接続するには、鍵ファイルを作成し、インスタンスの作成時に --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

API

Compute Engine API を使用してインスタンスを作成し、ディスクの指定で rawKey または rsaEncryptedKey を設定します。未加工(RSA でラップされていない)鍵の場合は v1 API へのリクエストを、RSA でラップされた鍵の場合はベータ版 API へのリクエストを行います。

ディスク指定の例を次に示します。

"disks": [
{
  "deviceName": "encrypted-disk",
  "source": "projects/myproject/zones/us-central1-f/disks/encrypted-disk",
  "diskEncryptionKey": {
    "rawKey": "SGVsbG8gZnJvbSBHb29nbGUgQ2xvdWQgUGxhdGZvcm0="
  }
 }
]

暗号化されたディスクのあるインスタンスを起動または再起動する

暗号化されたディスクのあるインスタンスの停止または起動の詳細については、暗号化されたディスクのあるインスタンスの再起動をご覧ください。

コマンドラインを使用して混合リソースを作成する

顧客指定の暗号鍵で暗号化されたリソースと標準の暗号鍵で暗号化されたリソースを組み合わせて gcloud コマンドライン ツールの 1 つのリクエストで作成する(混合リソースの作成)場合は、--csek-key-file フラグと鍵ファイルおよび --no-require-csek-key-create フラグをリクエストで使用します。両方のフラグを指定すると、gcloud ツールは、鍵ファイルで明示的に定義されている顧客指定の暗号化リソースだけでなく、指定されている標準リソースも作成します。

たとえば、次のような内容の鍵ファイルがあるとします。

[
  {
  "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"
  }
]

顧客指定の暗号鍵で暗号化したディスクを持つインスタンスを鍵ファイルを使用して作成するのと同時に、標準の暗号鍵で暗号化されたディスクを持つインスタンスも同じリクエストで作成したい場合は、次のようにします。

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 暗号化を使用して暗号化される別のディスクが、両方とも作成されます。

顧客指定の暗号鍵を永続ディスクから削除する

顧客指定の暗号鍵で暗号化されたディスクの内容を復号し、代わりに Compute Engine のデフォルトの暗号化を使用する新しいディスクを作成できます。

  1. 暗号化されたディスクのイメージを作成し、新しいイメージに対して自動暗号化を指定します。
  2. 新しいイメージを使用して、新しい永続ディスクを作成します。

このようにして作成された新しい永続ディスクは、Compute Engine のデフォルトの暗号化を使用してディスクの内容を保護します。そのディスクから作成されるスナップショットはいずれも、デフォルトの暗号化を使用する必要があります。

このページは役立ちましたか?評価をお願いいたします。

フィードバックを送信...

Compute Engine ドキュメント