CMEK を使用してワークステーション リソースを暗号化する

デフォルトでは、Cloud Workstations は、Google が所有および管理する鍵を使用して、データ保存時に VM や永続ディスクなどのワークステーション リソースを暗号化します。データを保護する鍵について特定のコンプライアンスや規制の要件がある場合、Cloud Key Management Service(Cloud KMS)を使用した顧客管理の暗号鍵を使用できます。

CMEK の一般的な用途や使用する理由などの詳細については、Cloud KMS のドキュメントをご覧ください。

始める前に

プロジェクトを作成する

  1. Google Cloud コンソールのプロジェクト セレクタページで、2 つの Google Cloud プロジェクトを選択または作成します。

    • 鍵プロジェクトには、キーリングや対称暗号鍵などの Cloud KMS リソースが含まれています。

    • Workstations プロジェクトには、Cloud KMS 鍵を使用して暗号化された CMEK 鍵。

    鍵プロジェクトとワークステーション プロジェクトに同じプロジェクトを使用できますが、職掌分散のために、2 つのプロジェクトを使用することをおすすめします。

  2. Cloud プロジェクトに対して課金が有効になっていることを確認します。詳しくは、プロジェクトで課金が有効になっているかどうかを確認する方法をご覧ください。

  3. 各プロジェクトで必要な API を有効にします。

  4. gcloud CLI をインストールして初期化します。gcloud CLI を初期化するには、次のコマンドを実行します。

    gcloud init
    

必要なロール

Cloud KMS 管理者のロールと Cloud Workstations 管理者のロールを同じユーザーに付与できますが、ロールを割り当てる際は最小権限の原則に従うことをおすすめします。Cloud KMS 管理者に Cloud Workstations 管理者も兼任するよう依頼するのではなく、これらのロールを 2 人の別々のユーザーに付与して、連携させることをおすすめします。詳細については、セキュリティのベスト プラクティスIAM の安全な使用をご覧ください。

CMEK を設定するために必要な権限を取得するには、次の IAM ロールを付与するよう管理者に依頼してください。

  • Cloud KMS 管理者の場合は、Cloud KMS リソースの作成と管理ができるように、次のロールを付与するよう管理者に依頼してください。 鍵プロジェクトに対する Cloud KMS 管理者roles/cloudkms.admin)。
  • Cloud Workstations 管理者の場合は、ワークステーションの作成と更新を行えるように、次のロールを付与するよう管理者に依頼してください。 ワークステーション プロジェクトに対する Cloud Workstations 管理者roles/workstations.admin)。

ロールの付与については、プロジェクト、フォルダ、組織へのアクセス権の管理をご覧ください。

必要な権限は、カスタムロールや他の事前定義ロールから取得することもできます。

キーリングと暗号鍵を作成する

鍵プロジェクトで鍵を作成し、鍵のリソース ID を保存します。

  1. キーリングを作成または選択します。

    キーリングはサービス間で共有できますが、ベスト プラクティスとして、保護されたリソースごとに異なる鍵を使用することをおすすめします。詳しくは、 職掌分散を参照してください。

  2. 対称暗号鍵を作成します。

    CMEK 鍵とワークステーション構成は同じリージョンで作成してください。

  3. 鍵のリソース ID を取得し、後の手順のために保存します。

ワークステーション構成を確認する

Google Cloud コンソールに使用可能なワークステーション構成がない場合は、Cloud ワークステーション管理者にワークステーション構成の作成を依頼するか、これらのリソースを自分で作成できるように、プロジェクトに対して Cloud Workstations 管理者の IAM ロールがあることを確認してください。

顧客管理の暗号鍵を使用する

ワークステーション構成で CMEK を使用するには、Google Cloud コンソールまたは gcloud CLI から CMEK を有効にします。

Console

Compute Engine サービス アカウントと Compute Engine サービス エージェントに、Cloud KMS CryptoKey の暗号化 / 復号のロールCloud KMS 閲覧者のロールを付与します。

  1. Google Cloud コンソールで、[鍵管理] ページに移動します。

    Key Management に移動

  2. 鍵を含むキーリングの名前をクリックします。

  3. 使用する鍵のチェックボックスをオンにします。

    [権限] タブがパネルとして表示されます。

  4. [メンバーの追加] ダイアログで、メンバーのメールアドレスを指定します。 アクセス権を付与する Compute Engine サービス アカウントと Compute Engine サービス エージェント。

  5. [ロールを選択] プルダウンで、[Cloud KMS 暗号鍵の暗号化 / 復号] を選択します。

  6. [別の役割を追加] をクリックします。

  7. [ロールを選択] プルダウンで、[Cloud KMS 閲覧者] を選択します。

  8. [保存] をクリックします。

Google Cloud コンソールから CMEK を有効にするには:

  1. ワークステーションの作成の手順に従います。

  2. マシン構成を指定する場合は、[詳細オプション] セクションを探します。

  3. expand_more をクリックして [Expand More] をクリックし、[Use customer-managed encryption key (CMEK)] を選択します。

    1. [顧客管理の暗号鍵を選択] フィールドで、鍵プロジェクトで作成した顧客管理の暗号鍵を選択します。

      作成した鍵がリストにない場合は、[鍵を手動で入力] をクリックしてリソース ID で鍵を選択し、以前にメモしたリソース ID を入力します。

    2. [サービス アカウント] フィールドで、アカウントで使用するサービス アカウントを選択します。 キー

  4. 他の手順を完了して、ワークステーション構成を作成します。

  5. 指定した Cloud KMS 鍵を使用して、プロジェクトの永続ディスクを暗号化するために、ワークステーション構成を作成、開始、起動します。

gcloud

次の例では、Cloud KMS 鍵へのアクセスを許可する IAM ロールを付与し、ワークステーション構成でその鍵を指定して CMEK を有効にします。

  1. ワークステーション プロジェクトの KMS サービス アカウントと Compute Engine サービス エージェントに、CMEK 鍵に対する Cloud KMS CryptoKey の暗号化 / 復号のロールroles/cloudkms.cryptoKeyEncrypterDecrypter)を付与します。これにより、指定した CMEK 鍵を使用して、Compute Engine サービスが暗号化されたリソースをプロジェクト内に作成できるようになります。

      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location LOCATION \
        --keyring KEY_RING \
        --member serviceAccount:WORKSTATIONS_PROJECT_NUMBER-compute@developer.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KMS_PROJECT_ID
    
      gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location LOCATION \
        --keyring KEY_RING \
        --member serviceAccount:service-WORKSTATIONS_PROJECT_NUMBER@compute-system.iam.gserviceaccount.com \
        --role roles/cloudkms.cryptoKeyEncrypterDecrypter \
        --project KMS_PROJECT_ID
    

    以下を置き換えます。

    • KEY_NAME: 鍵の名前。
    • LOCATION: キーリングを作成したリージョン。
    • KEY_RING: キーリングの名前。
    • WORKSTATIONS_PROJECT_NUMBER: ワークステーション プロジェクトの Compute Engine デフォルトのサービス アカウントの最初の部分として自動的に生成される一意の数値 ID。
    • KMS_PROJECT_ID: プロジェクト ID は、Cloud KMS プロジェクトを Google Cloud 内の他のすべてのプロジェクトと区別するために使用される一意の文字列です。

    すべてのフラグと有効な値については、--help フラグを指定してコマンドを実行してください。

  2. ワークステーション プロジェクトのワークステーション管理サービス アカウントを取得するには、次のコマンドを使用します。

    gcloud beta services identity create --service=workstations.googleapis.com \
        --project=WORKSTATIONS_PROJECT_ID
    

    WORKSTATIONS_PROJECT_ID は、ワークステーションのプロジェクト ID に置き換えます。

  3. プロジェクトのワークステーション管理サービス アカウントに、CMEK 鍵に対する Cloud KMS 閲覧者のロール(roles/cloudkms.viewer)を付与します。これにより、ワークステーション サービスはプロジェクトでの必要性に応じて鍵のローテーションを検出し、リソースを再暗号化できます。

    gcloud kms keys add-iam-policy-binding KEY_NAME \
        --location LOCATION \
        --keyring KEY_RING \
        --member WORKSTATIONS_MANAGEMENT_SERVICE_ACCOUNT \
        --role roles/cloudkms.viewer \
        --project KMS_PROJECT_ID
    

    以下を置き換えます。

    • KEY_NAME: 鍵の名前。
    • LOCATION: キーリングを作成したリージョン。
    • KEY_RING: キーリングの名前。
    • WORKSTATIONS_MANAGEMENT_SERVICE_ACCOUNT: ワークステーション管理サービス アカウントを取得します。
    • KMS_PROJECT_ID: プロジェクト ID は、Cloud KMS プロジェクトを Google Cloud 内の他のすべてのプロジェクトと区別するために使用される一意の文字列です。

    すべてのフラグと有効な値については、--help フラグを指定してコマンドを実行してください。

  4. 省略可: ワークステーション クラスタをまだ作成していない場合は、clusters create gcloud CLI コマンドを使用して作成します。

    gcloud workstations clusters create \
        WORKSTATIONS_CLUSTER_NAME --region=LOCATION \
        --project=WORKSTATIONS_PROJECT_NUMBER
    

    以下を置き換えます。

    • WORKSTATIONS_CLUSTER_NAME: ワークステーション クラスタの名前。
    • LOCATION: ワークステーション クラスタのリージョン名。
    • WORKSTATIONS_PROJECT_NUMBER: プロジェクトIDは、Cloud KMSプロジェクトをGoogle Cloud内の他のすべてのプロジェクトと区別するために使用される一意の文字列です。
  5. すでにクラスタが作成されていると想定して、encryption_key 設定でワークステーション構成を作成します。

    マシンタイプ e2-standard-2、アイドル タイムアウト 3600s、CMEK で暗号化されたワークステーション リソースを含むワークステーション構成を作成するには、次の gcloud CLI コマンドを実行します。

    gcloud workstations configs create WORKSTATIONS_CONFIG_NAME \
      --cluster=WORKSTATIONS_CLUSTER_NAME \
      --region=LOCATION \
      --machine-type="e2-standard-2" \
      --idle-timeout=3600 \
      --kms-key="projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME" \
      --kms-key-service-account="WORKSTATIONS_PROJECT_NUMBER-compute@developer.gserviceaccount.com" \
      --project=WORKSTATIONS_PROJECT_NUMBER
    

    以下を置き換えます。

    • WORKSTATIONS_CONFIG_NAME: ワークステーション構成の名前。
    • WORKSTATIONS_CLUSTER_NAME: ワークステーション クラスタの名前。
    • LOCATION: クラスタのリージョン名。
    • KMS_PROJECT_ID: プロジェクト ID。Google Cloud 内の他のプロジェクトと区別するために使用される一意の文字列。
    • KEY_RING: キーリングの名前。
    • KEY_NAME: 鍵の名前。
    • WORKSTATIONS_PROJECT_NUMBER: プロジェクトIDは、Cloud KMSプロジェクトをGoogle Cloud内の他のすべてのプロジェクトと区別するために使用される一意の文字列です。

    ワークステーション構成を作成すると、Cloud KMS では、指定された Cloud KMS 鍵を使用して、プロジェクトの永続ディスクが暗号化されます。

顧客管理の暗号鍵をローテーションする

ワークステーション管理サービス アカウントに CMEK 鍵に対する Cloud KMS 閲覧者のロール(roles/cloudkms.viewer)を付与すると、ワークステーション サービスは鍵のローテーションを検出し、新しいメインの鍵バージョンを使用してホームディスクを再暗号化できます。

再暗号化は、ワークステーションの停止後に行われます。暗号化されたワークステーションを停止するたびに、ワークステーション サービスは鍵がローテーションされているかどうかを確認します。鍵がローテーションされている場合、ワークステーション サービスはワークステーションのホームディスクのスナップショットを作成し、ディスクを削除します。ワークステーションを次回起動すると、ワークステーション サービスは新しいメインの鍵バージョンを使用して、スナップショットから新しいディスクを作成します。

Cloud KMS の割り当てと Cloud Workstations

Cloud Workstations で CMEK を使用すると、プロジェクトで Cloud KMS 暗号リクエストの割り当てを使用できます。たとえば、CMEK で暗号化されたリポジトリでは、アップロードまたはダウンロードごとにこれらの割り当てを使用できます。CMEK 鍵を使用する暗号化と復号の処理は、ハードウェア(Cloud HSM)鍵または外部(Cloud EKM)鍵を使用する場合にのみ、Cloud KMS の割り当てに影響します。詳細については、Cloud KMS の割り当てをご覧ください。

外部鍵

Cloud External Key Manager(Cloud EKM)を使用すると、管理対象の外部鍵を使用して Google Cloud 内のデータを暗号化できます。

Cloud EKM 鍵を使用する場合、Google は外部管理鍵の可用性をコントロールできません。鍵が使用できなくなった場合は、ワークステーションを起動できません。

外部鍵を使用する際のその他の考慮事項については、Cloud External Key Manager をご覧ください。

次のステップ