セキュリティ モデル: 多層防御
マルチパーティ コンピューティング(MPC)API は、厳格な Identity and Access Management(IAM)制御に依存する多層防御セキュリティ アーキテクチャを実装しています。このモデルにより、単一の ID や侵害された Google アカウントが一方的にプラットフォームを侵害したり、アセットを抽出したりすることができなくなります。
- レイヤ 1: Identity and Access Management(IAM): すべてのリクエストがエッジで検証され、呼び出し元に特定の Google Cloud API メソッドを呼び出すために必要な明示的な権限があることが確認されます(IAM の概要をご覧ください)。十分な権限がないアカウントは
403 Forbiddenエラーですぐに拒否され、不正なトラフィックがアプリケーション レイヤに到達するのを防ぎます。 - レイヤ 2: 職務分掌(SoD): MPC プラットフォームは、厳格なロール分離を適用して、異なるガバナンス アクションと実行アクションを同じ個人が実行できないようにします。ポリシー作成者はポリシーの編集のみ、署名者はトランザクション ペイロードの署名のみに制限するなど、明確なロールを定義することで、1 つの不正なエージェントや不正使用されたアカウントが機密性の高いトランザクションを単独で実行できないようにします。
- レイヤ 3: 最小権限の原則: アクセス権は職務に基づいて厳密に付与され、ユーザーは職務の遂行に必要な最小限の権限のみを持つようになります。たとえば、コンプライアンス チームや監査チームは最小権限で運用され、アクティビティをモニタリングするための読み取り専用アクセス権のみを保持します。ポリシーの表示やトランザクション ログの検査による監視は可能ですが、ポリシーの変更、トランザクションの開始、アセットの操作はできません。
ペルソナと職務分掌
管理(ボードの設定)、ガバナンス(ルールの定義)、実行(アセットの移動)を分離することで、セキュリティが強化されます。
| ペルソナ | ドメイン | IAM ロールが割り当てられました | 主な責務 |
|---|---|---|---|
| 管理者 | 管理 | mpc.admin | リソースをプロビジョニングします。トランザクションに署名したり、ポリシーを作成したりすることはできません。 |
| ポリシー作成者 | ガバナンス | mpc.editor | 運用ポリシー(費用上限など)を定義、編集します。 |
| 署名者 | 実行 | mpc.editor | トランザクション ペイロードに署名します。ポリシーを作成できません。 |
| コンプライアンス | 監視 | mpc.viewer | アクティビティのモニタリングとポリシーの検査を行うための読み取り専用アクセス権。ポリシーの変更や取引の開始はできません。 |
事前定義された IAM の役割
次の表に、マルチパーティ コンピューティング(MPC)API の特定の IAM 権限と、それらを付与するロールの詳細を示します。API オペレーションの詳細については、MPC API リファレンスをご覧ください。
| ロール | 権限 |
|---|---|
マルチパーティ コンピューティング閲覧者(roles/mpc.viewer)API 全体に対する読み取り専用権限(すべてのリソースに対する Get / List オペレーション)を付与します。監査者やモニタリング ツールに最適です。 このロールを付与できる最下位レベルのリソース:
|
mpc.googleapis.com/keyRings.getmpc.googleapis.com/keyRings.listmpc.googleapis.com/keys.getmpc.googleapis.com/keys.listmpc.googleapis.com/policies.getmpc.googleapis.com/policies.listmpc.googleapis.com/policyAuthorTrustBundles.getmpc.googleapis.com/proposals.getmpc.googleapis.com/proposals.listmpc.googleapis.com/signers.getmpc.googleapis.com/signers.list |
マルチパーティ コンピューティング編集者(roles/mpc.editor)ポリシー作成者と参加者(署名者)向けに設計されています。ポリシーの管理、提案の作成、参加者の決定の記録を行う権限を付与します。 このロールを付与できる最下位レベルのリソース:
|
すべての roles/mpc.viewer 権限に加えて、次の権限が含まれます。mpc.googleapis.com/keyRings.updatempc.googleapis.com/keys.updatempc.googleapis.com/policies.addQuorumSignaturempc.googleapis.com/policies.creatempc.googleapis.com/policies.revokempc.googleapis.com/proposals.creatempc.googleapis.com/proposals.fetchProposalSignaturempc.googleapis.com/proposals.recordParticipantDecision |
マルチパーティ コンピューティング管理者(roles/mpc.admin)管理者向けに設計されています。インフラストラクチャのプロビジョニング、鍵の生成、参加者の公開鍵の登録を行うための完全アクセス権を付与します。 このロールを付与できる最下位レベルのリソース:
|
すべての roles/mpc.editor 権限に加えて、次の権限が含まれます。mpc.googleapis.com/keyRings.creatempc.googleapis.com/keyRings.deletempc.googleapis.com/keys.creatempc.googleapis.com/policyAuthorTrustBundles.updatempc.googleapis.com/signers.create |
カスタムロール
roles/mpc.editor などの広範な事前定義ロールを使用する代わりに、参加者に厳格な最小権限アクセスを付与するには、オペレーションへの参加に必要な正確な権限のみを含むカスタム IAM ロールを作成します。
カスタムロール コマンドの例
gcloud iam roles create customMpcSigner \
--project="PROJECT_ID" \
--title="Custom MPC Signer" \
--description="Restricted role for transaction participants" \
--permissions="mpc.googleapis.com/proposals.get,mpc.googleapis.com/proposals.list,mpc.googleapis.com/proposals.recordParticipantDecision"
リソースレベルの IAM と条件付き IAM
最小権限の原則に従うことで、IAM 条件を使用して IAM ロールの範囲を制限できます。
複数のビジネス ユニットが共有インスタンスを使用して同じ Google Cloud プロジェクトで運用されている場合は、リソースを別々の KeyRing(KeyRing A や KeyRing B など)に配置することで分離を適用できます。指定された KeyRing(KeyRing A)内で発生するオペレーションにのみ制限する IAM 条件を使用して、サービス アカウントに roles/mpc.editor を付与し、同じインスタンス内の他の KeyRing へのアクセスを制限できます。
コマンドの例
KeyRing スコープのロール バインディングを作成する例を次に示します。
gcloud projects add-iam-policy-binding PROJECT_ID \
--member="serviceAccount:sa-name@PROJECT_ID." \
--role="roles/mpc.editor" \
--condition="expression=resource.name.startsWith('projects/PROJECT_ID/locations/LOCATION/instances/INSTANCE_ID/mpc/keyRings/KEYRING_ID'),title=KeyRing_Scoped_Editor"
フェデレーション ID(Bring Your Own Identity)
外部の企業 ID プロバイダ(Okta、Microsoft Entra ID、Ping Identity など)または外部ワークロード ランタイムを使用して、マルチパーティ コンピューティング リクエストを認証および認可できます。Google アカウントを作成したり、サービス アカウント キーを管理したりする必要はありません。
- Workforce Identity 連携: IAM ロールを外部 IdP グループにバインドすることで、組織レベルの Workforce プール(
locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>)を、管理者、ポリシー作成者、署名者、コンプライアンスなどのユーザー ペルソナにマッピングします。 - Workload Identity 連携: プロジェクト レベルの Workload Identity プール(
projects/<var>PROJECT_NUMBER</var>/locations/global/workloadIdentityPools/<var>WORKLOAD_POOL_ID</var>)を、AWS、Azure、または Kubernetes で実行されている自動共同署名者ノードにマッピングします。
API リクエストがプロジェクトに割り当てと課金を関連付けることができるように、フェデレーション プリンシパルには、コンシューマー プロジェクトに対する Service Usage コンシューマー ロール(roles/serviceusage.serviceUsageConsumer)も付与する必要があります。
フェデレーション ロール バインディングの例
# Allow members of the workforce pool to consume APIs through the consumer project
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>/*" \
--role="roles/serviceusage.serviceUsageConsumer"
# Grant MPC Admin to an external IdP administrators group
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>/group/mpc-admins" \
--role="roles/mpc.admin"
# Grant MPC Editor to an external IdP signers group
gcloud projects add-iam-policy-binding <var>PROJECT_ID</var> \
--member="principalSet://iam.googleapis.com/locations/global/workforcePools/<var>WORKFORCE_POOL_ID</var>/group/mpc-signers" \
--role="roles/mpc.editor"
次のように置き換えます。
<var>PROJECT_ID</var>: マルチパーティ コンピューティング インスタンスのコンシューマー プロジェクト ID。<var>WORKFORCE_POOL_ID</var>: 組織レベルの Workforce Identity プール ID。
エンドツーエンドの完全なチュートリアルについては、Workforce Identity 連携(BYOID)を構成するをご覧ください。