データ コラボレーターは、ワークロードが機密データにアクセスできるように、次のリソースを設定する必要があります。
暗号化されたデータ。 Google Cloudに保存されます。
ワークロードを承認するWorkload Identity プール(WIP)。WIP によってワークロードが承認されると、データ コラボレーターの機密データにアクセスして操作できます。
また、データ コラボレーターは、Confidential Space ワークロードの結果を保存する場所と、その結果が各コラボレーターに固有のものか、共有されるものかを選択する必要があります。たとえば、各データ コラボレーターに属する複数の Cloud Storage バケットに同じ結果を出力するように選択できます。
をご覧ください。暗号化されたデータを保存する
データを保存する Google Cloud サービスを使用して、機密データをホストできます。たとえば、次のいずれかのサービスを使用できます。
組み込み機能を使用する場合でも、Cloud Key Management Service(Cloud KMS)などの機能を使用する場合でも、このデータが保存時に暗号化されていることを確認する必要があります。
WIP でワークロードを承認する
WIP は、Confidential Space が外部ワークロードにフェデレーション ID として機密データへのアクセスと操作を許可するために使用するメカニズムです。フェデレーション ID は、独自のプロジェクト内のプリンシパルとして扱われる外部エンティティです。これにより、IAM ロールを付与して特定のリソースへのアクセス権を付与したり、サービス アカウントを権限借用して同じことを行ったりできます。
データ コラボレーターは、フェデレーション ID として認証するエンティティのルールを設定する WIP 内にプロバイダを設定します。Confidential Space の場合、プロバイダで次の項目を定義する必要があります。
証明書サービス: このサービスは、ワークロードが Confidential VM インスタンスであることを検証し、最終的に OpenID Connect(OIDC)証明書トークンを WIP プロバイダに返します。ワークロード オペレーターは、使用される構成証明サービスを設定します。アクセス権を付与するには、このサービスが WIP プロバイダに追加された構成証明サービスと一致している必要があります。
属性マッピング: 認証エンティティ(この場合はワークロードを実行している VM インスタンス)によって行われたアサーションにマッピングされる Security Token Service アクセス トークンの属性。アサーションは、VM インスタンス自体、Confidential Space イメージ、ワークロード コンテナによって行われ、ワークロードによって WIP プロバイダに渡されます。これらの属性は、Cloud Logging の監査証跡などで使用されます。また、ワークロード イメージ コンテナ ダイジェストなどのエンティティ アサーションの認証に基づいて IAM を介してロールを付与するためにも使用されます。詳しくは、属性マッピングをご覧ください。
構成証明ポリシー: 認証エンティティがアクセス権を取得するために、そのアサーションに基づいて満たす必要のある一連の条件。
ワークロードが開始されると、Confidential Space Launcher は、ワークロード オペレーターが定義した証明書サービスに証明書レポートを送信します。このサービスは、Confidential VM インスタンスを検証し、OIDC 証明書トークンを返します。このトークンは 1 時間有効で、自動的に更新されます。
証明書トークンはワークロードによって WIP プロバイダに渡され、プロバイダはそれを使用して、アサーションがプロバイダで定義された証明書ポリシーに合格することを確認します。満たしている場合、ワークロードは機密リソースへのアクセスを許可されます。
外部ワークロード アクセス
WIP とプロバイダを設定する前に、ワークロードがリソースにアクセスする方法(リソースへの直接アクセスまたはサービス アカウントの権限借用)を選択する必要があります。
リソースへの直接アクセス
ワークロードには、直接リソース アクセス方式をおすすめします。
この方法では、認証エンティティのアサーションに関連付けられた WIP プロバイダにフェデレーション ID を設定します。これにより、ワークロードのコンテナ イメージ ダイジェストなどの属性に基づいて、ワークロードが IAM バインディングを介してリソースに直接アクセスできるように承認されます。
リソースへの直接アクセスには、次の利点があります。
データ コラボレーターがワークロード サービス アカウントの権限を借用するサービス アカウントを設定する必要がないため、Confidential Space 環境の設定は手順が少なくなります。
ワークロードは、IAM によって決定された特定のリソースにのみアクセスできます。これは、権限が過剰なサービス アカウントや権限借用権限によって、不正な行為者に意図しないアクセス権が付与される可能性があるサービス アカウントの権限借用方法よりも安全です。
各リソース アクセスは、複数のワークロードで共有される可能性のある権限借用されたサービス アカウントの ID ではなく、ワークロード VM インスタンスのフェデレーション ID でロギングされます。ワークロード VM インスタンスの ID には、コンテナのイメージ ダイジェスト、ワークロードが動作しているプロジェクト番号、ワークロードを実行している VM インスタンスの ID などの詳細を含めることができるため、より詳細な監査証跡が提供されます。
VM インスタンスの
selfLinkプロパティを WIP プロバイダのgoogle.subject属性にマッピングする必要はありません。selfLink値が長すぎると、この属性の 127 バイトの制限を超える可能性があり、WIP プロバイダの認証が失敗します。
サービス アカウントの権限借用
サービス アカウントの権限借用方法では、各データ コラボレーターが秘密データを復号するためのサービス アカウントを設定し、そのサービス アカウントを独自の WIP に関連付けます。また、WIP プロバイダでワークロード サービス アカウントを指定します。これにより、ワークロード サービス アカウントはデータ コラボレーターのサービス アカウントの権限を借用して、機密データを取得して操作できます。
サービス アカウントの権限借用は、次のシナリオでのみ使用する必要があります。
連携 ID をサポートしていない API にアクセスする場合。
VM インスタンスの selfLink プロパティが非常に長い場合、サービス アカウントの権限借用メソッドは WIP プロバイダに対する認証に失敗する可能性があります。これは、構成証明トークンの sub クレーム(selfLink 値に設定)が WIP プロバイダで google.subject 属性(127 バイトの制限あり)にマッピングされるためです。
VM インスタンスの selfLink 値が 127 バイトを超える場合は、VM インスタンスの名前を変更して selfLink を短くするか、代わりに直接リソース アクセス方法を使用する必要があります。
WIP とプロバイダを設定する
プロバイダを設定する手順は、直接リソース アクセスを使用するか、サービス アカウントの権限借用を使用するかによって異なります。
リソースへの直接アクセス
直接リソース アクセス方法では、WIP とプロバイダを設定し、特定のワークロード コンテナ イメージのダイジェストに基づいて IAM ロールを設定します。
WIP とプロバイダを設定する
WIP とプロバイダを設定する手順は次のとおりです。
WIP を作成します。
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=globalWIP に OIDC プロバイダを作成します。
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \ --location=global \ --workload-identity-pool=DATA_COLLABORATOR_POOL_NAME \ --issuer-uri="ISSUER_URI" \ --allowed-audiences="https://sts.googleapis.com" \ --attribute-mapping="google.subject=\"gcpcs::\"+assertion.submods.container.image_digest+\"::\"+assertion.submods.gce.project_number+\"::\"+assertion.submods.gce.instance_id,attribute.image_digest=assertion.submods.container.image_digest" \ --attribute-condition="assertion.swname == 'CONFIDENTIAL_SPACE' \ && 'STABLE' in assertion.submods.confidential_space.support_attributes"この例では次の値を使用します。
使用している構成証明サービスと一致する
issuer-uri:Google Cloud Attestation:
https://confidentialcomputing.googleapis.comIntel Trust Authority:
https://portal.trustauthority.intel.com
https://sts.googleapis.comのallowed-audiences。これは、認証情報をアクセス トークンと交換する Google の Security Token Service です。google.subjectのattribute-mapping。値は次のとおりです。\"gcpcs::\"+assertion.submods.container.image_digest+\"::\"+assertion.submods.gce.project_number+\"::\"+assertion.submods.gce.instance_id,attribute.image_digest=assertion.submods.container.image_digestこの値は、Common Expression Language(CEL)を使用して構築されます。次の値が
gcpcs属性に割り当てられ、ワークロードがリソースにアクセスするたびに Cloud Logging に表示されます。assertion.submods.container.image_digest: ワークロード コンテナ イメージのダイジェスト。assertion.submods.gce.project_number: VM インスタンスのプロジェクト番号。assertion.submods.gce.instance_id: VM インスタンスの ID。
また、
attribute.image_digestはワークロード コンテナ イメージのダイジェストであるassertion.submods.container.image_digestに設定されます。この属性は、特定イメージのダイジェストに基づいてフェデレーション ID に IAM ロールを付与できるようにマッピングされます。google.subject値の合計長が 127 バイト未満である限り、使用可能なワークロードのアサーションをマッピングできます。次の
attribute-conditions。これらは証明書ポリシーを形成します。これらの条件がワークロードのアサーションと一致する場合、ワークロードはフェデレーション ID として機密リソースにアクセスできます。assertion.swname == 'CONFIDENTIAL_SPACE': Confidential Space が VM で実行されているソフトウェアであり、すべての組み込みのセキュリティ保証があることを確認します。'STABLE' in assertion.submods.confidential_space.support_attributes: 本番環境の Confidential Space イメージが使用されており、STABLEサポート属性があることを確認します。
使用できる属性条件の詳細については、証明書ポリシーを作成するをご覧ください。
フェデレーション ID に IAM ロールを付与する
WIP プロバイダを作成したら、ID のワークロード イメージ コンテナ ダイジェストが想定値と一致するかどうかに基づいて、フェデレーション ID に IAM ロールを付与できます。
次の例では、特定の Cloud Key Management Service 鍵を復号する権限をフェデレーション ID に付与する方法を示します。
gcloud kms keys add-iam-policy-binding \
projects/DATA_COLLABORATOR_PROJECT_ID/locations/global/keyRings/DATA_COLLABORATOR_KEYRING_NAME/cryptoKeys/DATA_COLLABORATOR_KEY_NAME \
--member="principalSet://iam.googleapis.com/projects/DATA_COLLABORATOR_PROJECT_NUMBER/locations/global/workloadIdentityPools/DATA_COLLABORATOR_POOL_NAME/attribute.image_digest/WORKLOAD_CONTAINER_IMAGE_DIGEST" \
--role=roles/cloudkms.cryptoKeyDecrypter
サービス アカウントの権限借用
サービス アカウントの権限借用方法には、次の処理が含まれます。
データ コラボレーターの各プロジェクトにサービス アカウントを作成し、機密データを復号する権限を付与します。
各データ コラボレーター プロジェクトに WIP を作成し、作成したばかりの各プロジェクトのサービス アカウントを WIP に関連付けます。
各 WIP に WIP プロバイダを作成し、データ コラボレーター サービス アカウントの権限借用を許可するアカウントとしてワークロード サービス アカウントを指定します。
機密データを復号するサービス アカウントを設定する
データ コラボレーター プロジェクトにサービス アカウントを作成します。
gcloud iam service-accounts create DATA_COLLABORATOR_SERVICE_ACCOUNT_NAME機密データを復号するために必要な権限をサービス アカウントに付与します。たとえば、Cloud Storage の機密ファイルを Cloud KMS で暗号化する場合は、そのデータを復号する権限をサービス アカウントに付与する必要があります。
gcloud kms keys add-iam-policy-binding \ projects/DATA_COLLABORATOR_PROJECT_ID/locations/global/keyRings/DATA_COLLABORATOR_KEYRING_NAME/cryptoKeys/DATA_COLLABORATOR_KEY_NAME \ --member=serviceAccount:DATA_COLLABORATOR_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com \ --role=roles/cloudkms.cryptoKeyDecrypter
WIP とプロバイダを設定する
WIP とプロバイダを設定するには、各データ コラボレーター プロジェクトで次の手順を完了します。
WIP を作成します。
gcloud iam workload-identity-pools create DATA_COLLABORATOR_POOL_NAME \ --location=global偽装するサービス アカウントを WIP に
roles/iam.workloadIdentityUserロールで関連付けます。gcloud iam service-accounts add-iam-policy-binding \ DATA_COLLABORATOR_SERVICE_ACCOUNT_NAME@DATA_COLLABORATOR_PROJECT_ID.iam.gserviceaccount.com \ --member="principalSet://iam.googleapis.com/projects/DATA_COLLABORATOR_PROJECT_NUMBER/locations/global/workloadIdentityPools/DATA_COLLABORATOR_POOL_NAME/*" \ --role=roles/iam.workloadIdentityUserWIP に OIDC プロバイダを作成し、データ コラボレーターのサービス アカウントの権限を借用できるように、そのプロバイダにワークロード サービス アカウントを定義します。
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \ --location=global \ --workload-identity-pool=DATA_COLLABORATOR_POOL_NAME \ --issuer-uri="https://confidentialcomputing.googleapis.com/" \ --allowed-audiences="https://sts.googleapis.com" \ --attribute-mapping="google.subject=assertion.sub" \ --attribute-condition="assertion.submods.container.image_digest == 'WORKLOAD_CONTAINER_IMAGE_DIGEST' \ && 'WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_OPERATOR_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts \ && assertion.swname == 'CONFIDENTIAL_SPACE' \ && 'STABLE' in assertion.submods.confidential_space.support_attributes"この例では次の値を使用します。
https://confidentialcomputing.googleapis.com/のissuer-uri。これは、Google Cloud Attestation が証明書サービスとして使用されることを意味します。https://sts.googleapis.comのallowed-audiences。これは、認証情報をアクセス トークンと交換する Google の Security Token Service です。google.subjectのattribute-mapping。値はassertion.subです。これは、構成証明トークンのsubクレームで定義されている VM インスタンスのselfLinkです。ワークロードがリソースにアクセスするたびに、VM インスタンス
selfLinkが Cloud Logging に表示されます。次の
attribute-conditions。証明ポリシーを形成します。これらの条件がワークロードのアサーションと一致する場合、ワークロードはフェデレーション ID としてリソースにアクセスできます。assertion.submods.container.image_digest == 'WORKLOAD_CONTAINER_IMAGE_DIGEST': ワークロード コンテナ イメージのダイジェストが想定値と一致することを確認します。'WORKLOAD_SERVICE_ACCOUNT_NAME@WORKLOAD_PROJECT_ID.iam.gserviceaccount.com' in assertion.google_service_accounts: ワークロードに接続されたサービス アカウントが想定されるサービス アカウントと一致することを確認し、それを使用してデータ コラボレーター サービス アカウントの権限を借用します。assertion.swname == 'CONFIDENTIAL_SPACE': Confidential Space が VM で実行されているソフトウェアであり、すべての組み込みのセキュリティ保証があることを確認します。'STABLE' in assertion.submods.confidential_space.support_attributes: 本番環境の Confidential Space イメージが使用されており、STABLEサポート属性があることを確認します。
使用できる属性条件の詳細については、証明書ポリシーを作成するをご覧ください。
証明書ポリシーを作成する
WIP の作成の一環として、証明書ポリシーを作成する必要があります。認証エンティティのアサーションは、データにアクセスできるようにポリシーと一致している必要があります。
ポリシーは Common Expression Language(CEL)で記述され、&& 演算子で連結できる一連のステートメントで構成されます。
ステートメントでは、Confidential Space イメージ、ワークロード コンテナ イメージ、または VM インスタンスのアサーションを変数として使用し、指定した値を式として使用します。たとえば、ワークロードが Confidential Space を使用していること、STABLE Confidential Space イメージを使用する必要があること、ワークロード VM インスタンスが実行されているゾーンが us-central1-a であることを強制するポリシーを次に示します。
assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes" \
&& assertion.submods.gce.zone == "us-central1-a"
詳しくは、証明書のアサーションをご覧ください。
証明書のアサーション
次の表に、証明書ポリシーの作成に使用できるアサーションの詳細を示します。ポリシーは、Confidential Space イメージ、ワークロード コンテナ、VM インスタンスによって行われたアサーションを検証できます。
画像アサーション
| アサーション | タイプ | 説明 |
|---|---|---|
|
連携するサービス:
|
列挙 |
Confidential Space イメージがデバッグ バージョンまたは本番環境バージョンであることを確認します。 有効な値は次のとおりです。
例次のコードは、Confidential Space イメージのデバッグ バージョンが使用されていることを確認します。 次のコードは、Confidential Space イメージの本番環境バージョンが使用されていることを確認します。 |
assertion.submods.confidential_space.support_attributes
|
文字列の配列 |
サポート属性を使用して、Confidential VM インスタンスで実行されている本番環境の Confidential Space イメージのセキュリティ バージョンを確認します。Confidential Space のデバッグ イメージにはサポート属性が設定されていません。 有効なサポート属性は次のとおりです。
例次のコードは、Confidential Space イメージの安定版が使用されていることを確認します。 |
assertion.swname |
列挙 |
証明を行うエンティティで実行されているソフトウェアを検証します。値は常に 例 |
assertion.swversion |
文字列の配列 |
Confidential Space イメージのソフトウェア バージョンを検証します。代わりに 例 |
コンテナ アサーション
| アサーション | タイプ | 説明 |
|---|---|---|
|
連携するサービス:
|
文字列の配列 |
ワークロード イメージで使用されている CMD コマンドとパラメータを確認します。 例次のコードは、ワークロード イメージの CMD が上書きされていないことを確認します。
次のコードは、CMD オーバーライドの唯一のコンテンツが |
|
連携するサービス:
|
JSON オブジェクト |
環境変数とそれらの値がコンテナに明示的に渡されていることを確認します。 例次のコードは、環境変数 |
|
連携するサービス:
|
文字列 |
ワークロード オペレーターがコンテナ内の環境変数を上書きしたかどうかを確認します。 例次のコードは、ワークロード オペレーターが 次のコードは、ワークロード オペレーターが環境変数を上書きしていないことを確認します。 |
assertion.submods.container.image_digest |
文字列 |
ワークロード コンテナのイメージ ダイジェストを検証します。この条件を指定すると、複数の関係者が、データへのアクセスを許可する承認済みワークロードについて合意できます。 例 |
assertion.submods.container.image_id |
文字列 |
ワークロード コンテナのイメージ ID を検証します。 例 |
|
連携するサービス:
|
文字列 |
Confidential Space イメージ上で実行されているワークロード コンテナの場所を検証します。 例 |
|
連携するサービス:
|
JSON オブジェクト |
イメージに特定の署名があるか、公開鍵と署名アルゴリズムで署名されていることを検証します。この条件を指定すると、複数の関係者が、データへのアクセスを許可する承認済みワークロードについて合意できます。 アサーションには次の要素を含めることができます。
例 |
|
連携するサービス:
|
列挙 |
ワークロードが停止したときのコンテナ ランチャーの再起動ポリシーを確認します。 有効な値は次のとおりです。
例 |
VM アサーション
| アサーション | タイプ | 説明 |
|---|---|---|
|
連携するサービス:
|
文字列の配列 |
指定したサービス アカウントが、ワークロードを実行している VM に接続されているか、VM メタデータで 例 |
assertion.hwmodel |
文字列 |
基盤となる Confidential Computing テクノロジーを検証します。サポートされているプラットフォームは次のとおりです。
例 |
|
連携するサービス:
|
ブール値 |
証明を行うエンティティのモニタリング状態を確認します。 例 |
assertion.submods.gce.instance_id |
文字列 |
VM インスタンス ID を検証します。 例 |
assertion.submods.gce.instance_name |
文字列 |
VM インスタンスの名前を確認します。 例 |
assertion.submods.gce.project_id |
文字列 |
指定したプロジェクト ID で VM が Google Cloud プロジェクトを実行していることを確認します。 例 |
assertion.submods.gce.project_number |
文字列 |
指定したプロジェクト番号で VM が Google Cloud プロジェクトで実行されていることを確認します。 例 |
|
連携するサービス:
|
文字列 |
VM が指定されたゾーンで実行されていることを確認します。 例 |
|
連携するサービス:
|
列挙 |
NVIDIA GPU でサポートされている Confidential Computing 機能を検証します。Confidential Space では単一 GPU パススルー(SPT)モードのみがサポートされているため、値は常に NVIDIA Confidential Computing のサポートの詳細については、 NVIDIA Trusted Computing Solutions(PDF)をご覧ください。 例 |
|
連携するサービス:
|
列挙 |
NVIDIA の Confidential Computing ドライバのステータスを確認します。有効な値は次のとおりです。
例 |
|
連携するサービス:
|
オブジェクトの配列 |
証明された各 NVIDIA GPU のクレームを検証します。Confidential Space は、単一の GPU クレームのみをサポートします。
{ "hwmodel": "GCP_NVIDIA_H100", "ueid": "490457405999046854973671575630853621547794591064", "l4_serial_number": "1216669666319372030078", "driver_version": "570.00", "vbios_version": "96.00.9F.00.01" } 例次のコードは、最初の GPU ハードウェア モデルが Google Cloudで実行されている NVIDIA H100 であることを確認します。 次のコードは、構成証明クレームに GPU 関連のクレームがあることを確認します。 |