データ コラボレーターは、ワークロードが機密データにアクセスできるように、次のリソースを設定する必要があります。
暗号化されたデータ。 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 ロールを付与して特定のリソースへのアクセス権を付与したり、サービス アカウントの権限を借用して同じことを行うことができます。
データ コラボレーターは、WIP 内にプロバイダを設定し、フェデレーション ID として認証するエンティティのルールを設定します。Confidential Space の場合、プロバイダで次のものを定義する必要があります。
証明書サービス: このサービスは、ワークロードが Confidential VM インスタンスであることを確認し、最終的に OpenID Connect(OIDC)証明書トークンを WIP プロバイダに返します。ワークロード オペレーターは、使用する構成証明サービスを設定します。アクセスを許可するには、WIP プロバイダに追加された構成証明サービスと一致する必要があります。
属性マッピング: 認証エンティティ(この場合はワークロードを実行している VM インスタンス)によって行われたアサーションにマッピングされる Security Token Service アクセス トークンの属性。アサーションは、VM インスタンス自体、Confidential Space イメージ、ワークロード コンテナによって行われ、ワークロードによって WIP プロバイダに渡されます。これらの属性は、Cloud Logging の監査証跡などに使用されます。また、ワークロード イメージ コンテナ ダイジェストなどの認証エンティティ アサーションに基づいて IAM を介してロールを付与するためにも使用されます。詳しくは、属性マッピングをご覧ください。
証明書ポリシー: 認証エンティティがアクセス権を取得するために、アサーションに基づいて渡す必要がある一連の条件。
ワークロードが開始されると、Confidential Space ランチャーは、ワークロード オペレーターによって定義された構成証明サービスに構成証明レポートを送信します。このサービスは、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 プロバイダの認証に失敗することがあります。これは、selfLink 値に設定されている証明書トークンの sub クレームが、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=globalroles/iam.workloadIdentityUserロールを使用して、権限を借用するサービス アカウントを WIP に接続します。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"この例では次の値を使用します。
issuer-uriがhttps://confidentialcomputing.googleapis.com/。これは、Google Cloud Attestation が証明書サービスとして使用されることを意味します。https://sts.googleapis.comのallowed-audiences。これは Google の Security Token Service で、認証情報をアクセス トークンと交換します。attribute-mappingがgoogle.subjectで、値が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
|
文字列の配列 |
TEE のセキュリティ バージョンが本番環境の Confidential Space イメージであることを確認します。Confidential Space のデバッグ イメージにはサポート属性が設定されていません。 次の表に、本番環境の Confidential Space イメージに存在するサポート属性を示します。
Confidential Space イメージは最新の状態に保つことをおすすめします。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 関連のクレームがあることを確認します。 |