データ コラボレーターは、ワークロードが機密データにアクセスできるように、次のリソースを設定する必要があります。
暗号化されたデータ自体。 Google Cloudに保存されます。
そのデータを復号できるサービス アカウント。
Workload Identity プール(WIP)を使用した構成証明の検証。WIP によってワークロードが承認されると、データ コラボレーターのプロジェクトでサービス アカウントを偽装して機密データを取得できます。
また、データ コラボレーターは、Confidential Space ワークロードの結果の保存場所と、表示されるデータが固有か共有かを指定する必要があります。たとえば、各データ コラボレーターに属する複数の Cloud Storage バケットに同じ結果を出力できます。
をご覧ください。データを保存する
データを保存する Google Cloud サービスを使用して、機密データをホストできます。たとえば、次のいずれかのサービスを使用できます。
組み込み機能を使用する場合でも、Cloud Key Management Service(Cloud KMS)などの機能を使用する場合でも、このデータが保存時に暗号化されていることを確認する必要があります。
機密データを復号するサービス アカウントを作成する
サービス アカウントを使用して、機密データを Confidential Space ワークロードで使用できるようにし、そのデータへの人間のアクセスを減らします。
たとえば、Cloud KMS で Cloud Storage の機密ファイルを暗号化し、そのデータと復号鍵にアクセスする権限を持つサービス アカウントを作成します。
次に、そのサービス アカウントを WIP に接続します。別のプロジェクトにある承認済みの Confidential Space ワークロードは、その WIP を使用してデータを復号するサービス アカウントの権限を借用し、復号されたデータを取得して処理できます。
サービス アカウントは機密データの復号と処理の両方に使用されるため、機密データの可視性はオーナーに制限されます。ワークロードは Confidential VM で動作するため、ハードウェア ベースのメモリ暗号化により、使用中のデータの機密性が保持されます。また、本番環境の Confidential Space イメージを使用するワークロード VM では SSH が無効になっているため、実行中に VM にアクセスすることはできません。
この例については、最初の Confidential Space 環境を作成するをご覧ください。
証明書検証用の WIP とプロバイダを作成する
信頼できないワークロード オペレーターからデータを保護するため、Confidential Space はワークロード イメージまたはその TEE の変更を検出する証明書プロセスを実装します。このプロセスは、Shielded VM のメジャード ブートと拡張ランタイム測定に基づいており、仮想トラステッド プラットフォーム モジュール(vTPM)デバイスの保護された拡張専用レジスタでブート シーケンスの測定値をキャプチャします。
Confidential Space 証明書サービスは、プロバイダに属性条件として追加されたポリシーと照合する、WIP で検証できる形式の vTPM 証明書を含む OpenID Connect(OIDC)トークンを生成します。これらのトークンは Google によって署名され、1 時間有効で、自動的に更新されます。
WIP がワークロードを承認すると、ワークロードはプロジェクト内のサービス アカウントの権限を借用して、機密データを復号して取得できます。
WIP とプロバイダを設定する手順は次のとおりです。
復号サービス アカウントを
iam.workloadIdentityUser
ロールで WIP に接続します。次の詳細を使用して OIDC プロバイダを作成します。
発行者 URI が
https://confidentialcomputing.googleapis.com/
。https://sts.googleapis.com
の許可されたオーディエンス。値が
assertion.sub
のプロバイダ属性マッピングgoogle.subject
。ワークロードの証明書の検証に使用される属性条件。使用可能なオプションについては、構成証明ポリシーを作成するをご覧ください。
証明書ポリシーを作成する
WIP の作成の一環として、属性条件(ワークロードがデータにアクセスするために満たす必要のある条件)を追加します。Confidential Space の場合、これらの属性条件が構成証明ポリシーを形成します。
ポリシーは Common Expression Language(CEL)で記述され、&&
演算子で連結できる一連のアサーションで構成されます。
gcloud CLI を使用して Workload Identity プールにプロバイダを追加する例と、ポリシーを定義する attribute-condition
オプションを次に示します。
gcloud iam workload-identity-pools providers create-oidc attestation-verifier \
--location=global \
--workload-identity-pool=user-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 =='sha256:837ccb607e312b170fac7383d7ccfd61fa5072793f19a25e75fbacb56539b86b' \
&& 'service-account@my-project.iam.gserviceaccount.com' in assertion.google_service_accounts \
&& assertion.swname == 'CONFIDENTIAL_SPACE' \
&& 'STABLE' in assertion.submods.confidential_space.support_attributes"
この例では、Workload Identity プールに接続されているサービス アカウントの権限を借用しようとする外部 ID は、次の詳細を証明して一致させる必要があります。
ワークロード コンテナのイメージ ダイジェスト
ワークロード VM に接続されているサービス アカウントのアドレス
この
CONFIDENTIAL_SPACE
は、VM で実行されているソフトウェアであり、組み込みのセキュリティ保証がすべて含まれています。本番環境の Confidential Space イメージのサポート属性
構成証明アサーション
次の表に、証明書ポリシーの作成に使用できるアサーションの詳細を示します。Confidential Space イメージ、ワークロード コンテナ、VM によって行われたアサーションを検証できます。
画像アサーション
アサーション | タイプ | 説明 |
---|---|---|
連携するサービス:
|
定義された文字列 |
Confidential Space イメージがデバッグ バージョンか本番環境バージョンかを確認します。 有効な値は次のとおりです。
例次のコードは、Confidential Space イメージのデバッグ バージョンが使用されていることを確認します。
次のコードは、Confidential Space イメージの本番環境バージョンが使用されていることを確認します。
|
assertion.submods.confidential_space.support_attributes |
文字列配列 |
TEE のセキュリティ バージョンが本番環境の Confidential Space イメージであることを確認します。Confidential Space のデバッグ イメージにはサポート属性が設定されていません。 サポート属性は次の 3 つです。
例次のコードは、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 が指定されたゾーンで実行されていることを確認します。 例
|