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

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

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

始める前に

プロジェクトを作成する

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

    • 鍵プロジェクトには、鍵リングと対称鍵などの 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 を有効にします。

コンソール

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] 展開をクリックして、[顧客管理の暗号鍵(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 のデフォルト サービス アカウントの最初の部分に含まれます。
    • 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: 自動生成された一意の数値識別子。ワークステーション プロジェクトの Compute Engine のデフォルト サービス アカウントの最初の部分に含まれます。
  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: 自動生成された一意の数値識別子。ワークステーション プロジェクトの Compute Engine のデフォルト サービス アカウントの最初の部分に含まれます。

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

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 をご覧ください。

次のステップ