# GCP - ドメイン全体の委任の理解

{{#include ../../../banners/hacktricks-training.md}}

この記事は、[https://www.hunters.security/en/blog/delefriend-a-newly-discovered-design-flaw-in-domain-wide-delegation-could-leave-google-workspace-vulnerable-for-takeover](https://www.hunters.security/en/blog/delefriend-a-newly-discovered-design-flaw-in-domain-wide-delegation-could-leave-google-workspace-vulnerable-for-takeover) の紹介です。詳細はリンク先をご覧ください。

## **ドメイン全体の委任の理解**

Google Workspaceのドメイン全体の委任は、**外部アプリ**（Google Workspace Marketplaceから）または内部の**GCPサービスアカウント**のいずれかのアイデンティティオブジェクトが、**ユーザーに代わってWorkspace全体のデータにアクセスする**ことを可能にします。この機能は、Google APIやユーザーのなりすましが必要なサービスとやり取りするアプリにとって重要であり、タスクを自動化することで効率を高め、人為的エラーを最小限に抑えます。OAuth 2.0を使用することで、アプリ開発者や管理者は、個々のユーザーの同意なしにこれらのサービスアカウントにユーザーデータへのアクセスを許可できます。\
\
Google Workspaceでは、2つの主要なタイプのグローバル委任オブジェクトアイデンティティを作成できます：

- **GWSアプリケーション:** Workspace Marketplaceからのアプリケーションは、委任されたアイデンティティとして設定できます。マーケットプレイスで利用可能にされる前に、各WorkspaceアプリケーションはGoogleによるレビューを受け、潜在的な悪用を最小限に抑えます。これにより悪用のリスクが完全に排除されるわけではありませんが、そのような事件が発生する難易度は大幅に増加します。
- **GCPサービスアカウント:** [**GCPサービスアカウントについてはこちら**](../gcp-basic-information/#service-accounts)で詳しく学んでください。

### **ドメイン全体の委任: 背景**

GCPサービスアカウントがGoogle Workspace内の他のアイデンティティに代わってGoogle APIにアクセスする方法は次のとおりです：

<figure><img src="../../../images/image (58).png" alt=""><figcaption></figcaption></figure>

1. **アイデンティティがJWTを作成する:** アイデンティティは、サービスアカウントの秘密鍵（JSONキー対ファイルの一部）を使用してJWTに署名します。このJWTには、サービスアカウント、なりすます対象ユーザー、および要求されるREST APIへのアクセスのOAuthスコープに関するクレームが含まれています。
2. **アイデンティティがJWTを使用してアクセストークンを要求する:** アプリケーション/ユーザーは、JWTを使用してGoogleのOAuth 2.0サービスからアクセストークンを要求します。このリクエストには、なりすます対象ユーザー（ユーザーのWorkspaceメール）と、アクセスが要求されるスコープも含まれます。
3. **GoogleのOAuth 2.0サービスがアクセストークンを返す:** アクセストークンは、指定されたスコープに対してユーザーの代わりに行動するサービスアカウントの権限を表します。このトークンは通常短命であり、定期的に更新する必要があります（アプリケーションの必要に応じて）。JWTトークンに指定されたOAuthスコープは有効性を持ち、結果として得られるアクセストークンに影響を与えることを理解することが重要です。たとえば、複数のスコープを持つアクセストークンは、複数のREST APIアプリケーションに対して有効性を持ちます。
4. **アイデンティティがアクセストークンを使用してGoogle APIを呼び出す:** 現在、関連するアクセストークンを持っているため、サービスは必要なREST APIにアクセスできます。アプリケーションは、このアクセストークンをGoogle API向けのHTTPリクエストの「Authorization」ヘッダーに使用します。これらのAPIは、トークンを使用してなりすましのアイデンティティを確認し、必要な権限があることを確認します。
5. **Google APIが要求されたデータを返す:** アクセストークンが有効であり、サービスアカウントに適切な権限がある場合、Google APIは要求されたデータを返します。たとえば、次の画像では、_users.messages.list_メソッドを利用して、ターゲットWorkspaceユーザーに関連するすべてのGmailメッセージIDをリストしています。

{{#include ../../../banners/hacktricks-training.md}}
