Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/

This commit is contained in:
Translator
2025-01-02 01:50:55 +00:00
parent e3d971b096
commit c493edc782
229 changed files with 2945 additions and 3001 deletions
@@ -9,12 +9,12 @@
### 管理グループ
- **他の管理グループやサブスクリプション**を含むことができます。
- これにより、管理グループレベルで**ガバナンスコントロール**(RBACやAzureポリシーなど)を一度適用し、グループ内のすべてのサブスクリプションに**継承**させることができます。
- これにより、管理グループレベルで**ガバナンスコントロール**(RBACやAzureポリシーなど)を適用し、グループ内のすべてのサブスクリプションに**継承**させることができます。
- **10,000の管理**グループが単一のディレクトリでサポートされます。
- 管理グループツリーは**最大6レベルの深さ**をサポートできます。この制限にはルートレベルやサブスクリプションレベルは含まれません。
- 各管理グループとサブスクリプションは**1つの親**のみをサポートできます。
- 複数の管理グループを作成できる場合でも、**ルート管理グループは1つだけ**です。
- ルート管理グループは**すべての**他の**管理グループとサブスクリプションを含み、**移動または削除することはできません**。
- ルート管理グループは**すべての他の管理グループとサブスクリプションを含み**、**移動または削除することはできません**。
- 単一の管理グループ内のすべてのサブスクリプションは、**同じEntra IDテナントを信頼**しなければなりません。
<figure><img src="../../../images/image (147).png" alt=""><figcaption><p><a href="https://td-mainsite-cdn.tutorialsdojo.com/wp-content/uploads/2023/02/managementgroups-768x474.png">https://td-mainsite-cdn.tutorialsdojo.com/wp-content/uploads/2023/02/managementgroups-768x474.png</a></p></figcaption></figure>
@@ -23,14 +23,14 @@
- これは、リソース(VM、DBなど)を実行し、請求される**論理コンテナ**です。
- その**親**は常に**管理グループ**であり(ルート管理グループであることも可能)、サブスクリプションは他のサブスクリプションを含むことはできません。
- **1つのEntra ID**ディレクトリのみを**信頼**します。
- **1つのEntra ID**ディレクトリのみを信頼します。
- サブスクリプションレベル(またはその親のいずれか)で適用された**権限**は、サブスクリプション内のすべてのリソースに**継承**されます。
### リソースグループ
[ドキュメントから:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-python?tabs=macos#what-is-a-resource-group) リソースグループは、Azureソリューションのための**関連リソース**を保持する**コンテナ**です。リソースグループには、ソリューションのすべてのリソースを含めることも、**グループとして管理したいリソースのみ**を含めることもできます。一般的に、**同じライフサイクル**を共有する**リソース**を同じリソースグループに追加することで、グループとして簡単に展開、更新、削除できます。
[ドキュメントから:](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-python?tabs=macos#what-is-a-resource-group) リソースグループは、Azureソリューションのための**関連リソース**を保持する**コンテナ**です。リソースグループには、ソリューションのすべてのリソースを含めることも、管理したい**リソースのみ**を含めることもできます。一般的に、**同じライフサイクル**を共有する**リソース**を同じリソースグループに追加することで、グループとして簡単に展開、更新、削除できます。
すべての**リソース**は**リソースグループ内**に存在し、グループにのみ属、リソースグループが削除されると、その中のすべてのリソースも削除されます。
すべての**リソース**は**リソースグループ内**に存在し、グループにのみ属することができ、リソースグループが削除されると、その中のすべてのリソースも削除されます。
<figure><img src="https://lh7-rt.googleusercontent.com/slidesz/AGV_vUfe8U30iP_vdZCvxX4g8nEPRLoo7v0kmCGkDn1frBPn3_GIoZ7VT2LkdsVQWCnrG_HSYNRRPM-1pSECUkbDAB-9YbUYLzpvKVLDETZS81CHWKYM4fDl3oMo5-yvTMnjdLTS2pz8U67xUTIzBhZ25MFMRkq5koKY=s2048?key=gSyKQr3HTyhvHa28Rf7LVA" alt=""><figcaption><p><a href="https://i0.wp.com/azuredays.com/wp-content/uploads/2020/05/org.png?resize=748%2C601&#x26;ssl=1">https://i0.wp.com/azuredays.com/wp-content/uploads/2020/05/org.png?resize=748%2C601&#x26;ssl=1</a></p></figcaption></figure>
@@ -38,27 +38,27 @@
Azureのすべてのリソースには、それを識別するAzureリソースIDがあります。
AzureリソースIDの形式は次のとおりです
AzureリソースIDの形式は次のとおりです
- `/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/{resourceProviderNamespace}/{resourceType}/{resourceName}`
サブスクリプションID `12345678-1234-1234-1234-123456789012` のリソースグループ `myResourceGroup` にある仮想マシン `myVM` のAzureリソースIDは次のようになります
サブスクリプションID `12345678-1234-1234-1234-123456789012` のリソースグループ `myResourceGroup` にある仮想マシン `myVM` のAzureリソースIDは次のようになります
- `/subscriptions/12345678-1234-1234-1234-123456789012/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM`
## AzureEntra IDAzure ADドメインサービス
## Azure vs Entra ID vs Azure ADドメインサービス
### Azure
Azureは、Microsoftの包括的な**クラウドコンピューティングプラットフォームで、幅広いサービスを提供**しており、仮想マシン、データベース、人工知能、ストレージなどが含まれます。アプリケーションのホスティングと管理、スケーラブルなインフラストラクチャの構築、クラウドでの最新のワークロードの実行の基盤として機能します。Azureは、開発者やIT専門家がアプリケーションやサービスをシームレスに作成、展開、管理できるツールを提供し、スタートアップから大企業までさまざまなニーズに対応します。
Azureは、Microsoftの包括的な**クラウドコンピューティングプラットフォームであり、幅広いサービスを提供**しています。これには、仮想マシン、データベース、人工知能、ストレージが含まれます。Azureは、アプリケーションのホスティングと管理、スケーラブルなインフラストラクチャの構築、クラウドでの最新のワークロードの実行の基盤として機能します。Azureは、開発者やIT専門家がアプリケーションやサービスをシームレスに作成、展開、管理できるツールを提供し、スタートアップから大企業までさまざまなニーズに対応します。
### Entra ID(旧Azure Active Directory
Entra IDは、認証、承認、ユーザーアクセス制御を処理するために設計されたクラウドベースの**アイデンティティおよびアクセス管理サービス**です。Office 365、Azure、その他の多くのサードパーティのSaaSアプリケーションへの安全なアクセスを提供します。シングルサインオン(SSO)、多要素認証(MFA)、条件付きアクセスポリシーなどの機能を備えています。
Entra IDは、認証、承認、ユーザーアクセス制御を処理するために設計されたクラウドベースの**アイデンティティおよびアクセス管理サービス**です。これは、Office 365、Azure、および多くのサードパーティのSaaSアプリケーションへの安全なアクセスを提供します。シングルサインオン(SSO)、多要素認証(MFA)、条件付きアクセスポリシーなどの機能を備えています。
### Entraドメインサービス(旧Azure AD DS)
Entraドメインサービスは、従来のWindows Active Directory環境と互換性のある**管理されたドメインサービスを提供することにより、Entra IDの機能を拡張**します。LDAP、Kerberos、NTLMなどのレガシープロトコルをサポートし、組織がオンプレミスのドメインコントローラーを展開することなく、クラウドで古いアプリケーションを移行または実行できるようにします。このサービスは、集中管理のためのグループポリシーもサポートしており、レガシーまたはADベースのワークロードが最新のクラウド環境と共存する必要があるシナリオに適しています。
Entraドメインサービスは、従来のWindows Active Directory環境と互換性のある**管理されたドメインサービス**を提供することEntra IDの機能を拡張します。LDAP、Kerberos、NTLMなどのレガシープロトコルをサポートし、組織がオンプレミスのドメインコントローラーを展開することなく、古いアプリケーションをクラウドで移行または実行できるようにします。このサービスは、集中管理のためのグループポリシーもサポートしており、レガシーまたはADベースのワークロードが最新のクラウド環境と共存する必要があるシナリオに適しています。
## Entra IDプリンシパル
@@ -77,9 +77,9 @@ Entraドメインサービスは、従来のWindows Active Directory環境と互
### メンバーとゲストのデフォルト権限
[https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions) で確認できますが、メンバーは以下のアクションを実行できます
[https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions](https://learn.microsoft.com/en-us/entra/fundamentals/users-default-permissions) で確認できますが、メンバーは以下のアクションを実行できます
- すべてのユーザー、グループ、アプリケーション、デバイス、ロール、サブスクリプション、およびその公開プロパティを読み取る
- すべてのユーザー、グループ、アプリケーション、デバイス、役割、サブスクリプション、およびその公開プロパティを読み取る
- ゲストを招待する(_オフにすることが可能_)
- セキュリティグループを作成する
- 非表示のグループメンバーシップを読み取る
@@ -88,72 +88,72 @@ Entraドメインサービスは、従来のWindows Active Directory環境と互
- Azureに最大50デバイスを追加する(_オフにすることが可能_)
> [!NOTE]
> Azureリソースを列挙するには、ユーザーに明示的権限付与が必要です。
> Azureリソースを列挙するには、ユーザーに明示的権限付与する必要があります。
### ユーザーのデフォルト設定可能な権限
- **メンバー(**[**ドキュメント**](https://learn.microsoft.com/en-gb/entra/fundamentals/users-default-permissions#restrict-member-users-default-permissions)****
- アプリケーションの登録: デフォルトは**はい**
- 非管理者ユーザーによるテナント作成を制限: デフォルトは**いいえ**
- セキュリティグループ作成: デフォルトは**はい**
- Microsoft Entra管理ポータルへのアクセスを制限: デフォルトは**いいえ**
- アプリケーションの登録デフォルトは**はい**
- 非管理者ユーザーテナント作成するのを制限デフォルトは**いいえ**
- セキュリティグループ作成する:デフォルトは**はい**
- Microsoft Entra管理ポータルへのアクセスを制限デフォルトは**いいえ**
- これはポータルへのAPIアクセスを制限しません(ウェブのみ)
- ユーザーがLinkedInと仕事または学校のアカウントを接続できるようにする: デフォルトは**はい**
- ユーザーをサインインしたままにする: デフォルトは**はい**
- ユーザーが所有するデバイスのBitLockerキーを回復することを制限: デフォルトはいいえ(デバイス設定で確認)
- 他のユーザーを読み取る: デフォルトは**はい**Microsoft Graph経由)
- ユーザーがLinkedInと仕事または学校のアカウントを接続できるようにするデフォルトは**はい**
- ユーザーをサインインしたままにするデフォルトは**はい**
- ユーザーが所有するデバイスのBitLockerキーを回復するを制限デフォルトはいいえ(デバイス設定で確認)
- 他のユーザーを読み取るデフォルトは**はい**Microsoft Graph経由)
- **ゲスト**
- **ゲストユーザーアクセス制限**
- **ゲストユーザーはメンバーと同じアクセス権を持つ**は、デフォルトでゲストユーザーにすべてのメンバー権限を付与します。
- **ゲストユーザーはディレクトリオブジェクトのプロパティとメンバーシップへのアクセスが制限される(デフォルト)**は、デフォルトで自分のユーザープロファイルのみへのアクセスを制限します。他のユーザーやグループ情報へのアクセスは許可されません。
- **ゲストユーザーアクセスは自分のディレクトリオブジェクトのプロパティとメンバーシップに制限される**最も制限的です。
- **ゲストユーザーはディレクトリオブジェクトのプロパティとメンバーシップへのアクセスが制限される(デフォルト)**は、デフォルトでゲストのアクセスを自分のユーザープロファイルのみ制限します。他のユーザーやグループ情報へのアクセスは許可されません。
- **ゲストユーザーアクセスは自分のディレクトリオブジェクトのプロパティとメンバーシップに制限される**は、最も制限的です。
- **ゲストは招待できる**
- **組織内の誰でもゲストユーザーを招待できる(ゲストや非管理者を含む、最も包括的) - デフォルト**
- **メンバーユーザーおよび特定の管理ロールに割り当てられたユーザーは、メンバー権限を持つゲストを含むゲストユーザーを招待できます**
- **特定の管理ロールに割り当てられたユーザーのみがゲストユーザーを招待できます**
- **メンバーユーザーおよび特定の管理役割に割り当てられたユーザーは、メンバー権限を持つゲストを含むゲストユーザーを招待できます**
- **特定の管理役割に割り当てられたユーザーのみがゲストユーザーを招待できます**
- **組織内の誰もゲストユーザーを招待できない(管理者を含む、最も制限的)**
- **外部ユーザーの退会**: デフォルトは**真**
- 外部ユーザーが組織を退会できるようにする
- **外部ユーザーの退会**デフォルトは**真**
- 外部ユーザーが組織を離れることを許可
> [!TIP]
> デフォルトで制限されていても、権限が付与されたユーザー(メンバーとゲスト)は前述のアクションを実行できます。
### **グループ**
**2種類のグループ**があります
**2種類のグループ**があります
- **セキュリティ**: このタイプのグループは、メンバーにアプリケーション、リソースへのアクセスを提供し、ライセンスを割り当てるために使用されます。ユーザー、デバイス、サービスプリンシパル、他のグループがメンバーになれます。
- **Microsoft 365**: このタイプのグループは、コラボレーションのために使用され、メンバーに共有メールボックス、カレンダー、ファイル、SharePointサイトなどへのアクセスを提供します。グループメンバーはユーザーのみです。
- **セキュリティ**このタイプのグループは、メンバーにアプリケーション、リソースへのアクセスを提供し、ライセンスを割り当てるために使用されます。ユーザー、デバイス、サービスプリンシパル、他のグループがメンバーになれます。
- **Microsoft 365**このタイプのグループは、コラボレーションのために使用され、メンバーに共有メールボックス、カレンダー、ファイル、SharePointサイトなどへのアクセスを提供します。グループメンバーはユーザーのみです。
- これは、EntraIDテナントのドメインを持つ**メールアドレス**を持ちます。
**2種類のメンバーシップ**があります
**2種類のメンバーシップ**があります
- **割り当てられた**: 特定のメンバーを手動でグループに追加することを許可します。
- **動的メンバーシップ**: ルールを使用してメンバーシップを自動的に管理し、メンバーの属性が変更されるとグループの含有を更新します。
- **割り当てられた**特定のメンバーを手動でグループに追加することを許可します。
- **動的メンバーシップ**ルールを使用してメンバーシップを自動的に管理し、メンバーの属性が変更されるとグループの含有を更新します。
### **サービスプリンシパル**
**サービスプリンシパル**は、**アプリケーション**、ホスティングサービス、および自動化ツールがAzureリソースにアクセスするために**使用**される**アイデンティティ**です。このアクセスは、サービスプリンシパルに割り当てられたロールによって**制限され**、**どのリソースにアクセスできるか**とそのレベルを制御します。セキュリティ上の理由から、**ユーザーアイデンティティでログインするのではなく、自動化ツールとともにサービスプリンシパルを使用することを常に推奨します**。
**サービスプリンシパル**は、**アプリケーション**、ホスティングサービス、および自動化ツールがAzureリソースにアクセスするために**使用**される**アイデンティティ**です。このアクセスは、サービスプリンシパルに割り当てられた役割によって**制限され**、**どのリソースにアクセスできるか**とそのレベルを制御します。セキュリティ上の理由から、**ユーザーアイデンティティでログインするのではなく、自動化ツールとともにサービスプリンシパルを使用することを常に推奨します**。
サービスプリンシパルとして**直接ログインする**ことも可能で、**シークレット**(パスワード)、**証明書**を生成するか、第三者プラットフォーム(例:Github Actions)への**フェデレーテッド**アクセスを付与することができます。
サービスプリンシパルとして**直接ログインする**ことも可能で、**シークレット**(パスワード)、**証明書**、または第三者プラットフォーム(例:Github Actions)への**フェデレーテッド**アクセスを付与することができます。
- **パスワード**認証(デフォルト)を選択した場合、**生成されたパスワードを保存**してください。再度アクセスすることはできません。
- **パスワード**認証を選択した場合(デフォルト)、**生成されたパスワードを保存**してください。再度アクセスすることはできません。
- 証明書認証を選択した場合、**アプリケーションがプライベートキーにアクセスできることを確認**してください。
### アプリ登録
**アプリ登録**は、アプリケーションがEntra IDと統合し、アクションを実行できるようにするための構成です。
#### 主要コンポーネント:
#### 主要コンポーネント
1. **アプリケーションID(クライアントID)**: Azure AD内のアプリの一意の識別子。
2. **リダイレクトURI**: Azure ADが認証応答を送信するURL。
3. **証明書、シークレット、フェデレーテッド資格情報**: アプリケーションのサービスプリンシパルとしてログインするためシークレットまたは証明書を生成するか、フェデレーテッドアクセスを付与することが可能です
1. **証明書**または**シークレット**が生成された場合、**アプリケーションID**、**シークレット**または**証明書**、および**テナント**(ドメインまたはID)を知っていることで、CLIツールを使用して**サービスプリンシパルとしてログイン**できます。
4. **API権限**: アプリがアクセスできるリソースまたはAPIを指定します。
5. **認証設定**: アプリのサポートされている認証フローを定義します(例:OAuth2、OpenID Connect)。
6. **サービスプリンシパル**: アプリが作成されると(ウェブコンソールから行われた場合)、サービスプリンシパルが作成されます。
1. **サービスプリンシパル**は、構成されたすべての要求された権限を取得します。
1. **アプリケーションID(クライアントID)**Azure AD内のアプリの一意の識別子。
2. **リダイレクトURI**Azure ADが認証応答を送信するURL。
3. **証明書、シークレット、フェデレーテッド資格情報**サービスプリンシパルとしてアプリケーションにログインするためシークレットまたは証明書を生成することができ、またはそれにフェデレーテッドアクセスを付与することができます(例:Github Actions
1. **証明書**または**シークレット**が生成された場合、**アプリケーションID**、**シークレット**または**証明書**、および**テナント**(ドメインまたはID)を知っていることで、CLIツールを使用して**サービスプリンシパルとしてログイン**できます。
4. **API権限**アプリがアクセスできるリソースまたはAPIを指定します。
5. **認証設定**アプリのサポートされている認証フローを定義します(例:OAuth2、OpenID Connect)。
6. **サービスプリンシパル**アプリが作成されると(ウェブコンソールから行われた場合)、サービスプリンシパルが作成されます。
1. **サービスプリンシパル**は、構成されたすべての要求された権限を取得します。
### デフォルト同意権限
@@ -161,73 +161,73 @@ Entraドメインサービスは、従来のWindows Active Directory環境と互
- **ユーザー同意を許可しない**
- すべてのアプリに対して管理者が必要です。
- **確認されたパブリッシャーからのアプリに対するユーザー同意を許可し、選択された権限(推奨)**
- すべてのユーザーは、「低影響」と分類された権限に同意でき、確認されたパブリッシャーからのアプリやこの組織に登録されたアプリに対して同意できます。
- **デフォルト**の低影響権限(ただし、低影響として追加するには同意が必要):
- User.Read - サインインしてユーザープロファイルを読み取る
- offline_access - ユーザーがアクセスを許可したデータへのアクセスを維持する
- openid - ユーザーをサインインさせる
- profile - ユーザーの基本プロファイルを表示する
- email - ユーザーのメールアドレスを表示する
- **検証されたパブリッシャーからのアプリに対して、選択された権限のユーザー同意を許可する(推奨)**
- すべてのユーザーは、「低影響」と分類された権限に対して同意でき、検証されたパブリッシャーからのアプリやこの組織に登録されたアプリに対して同意できます。
- **デフォルト**の低影響権限(ただし、低影響として追加するには同意が必要)
- User.Read - サインインしてユーザープロファイルを読み取る
- offline_access - ユーザーがアクセスを許可したデータへのアクセスを維持する
- openid - ユーザーをサインインさせる
- profile - ユーザーの基本プロファイルを表示する
- email - ユーザーのメールアドレスを表示する
- **アプリに対するユーザー同意を許可する(デフォルト)**
- すべてのユーザーは、組織のデータにアクセスするために任意のアプリに同意できます。
**管理者同意要求**: デフォルトは**いいえ**
**管理者同意要求**デフォルトは**いいえ**
- ユーザーは、同意できないアプリに対して管理者同意を要求できます。
- **はい**の場合: 同意要求を行うことができるユーザー、グループ、ロールを指定できます。
- ユーザーがメール通知や期限切れリマインダーを受け取るかどうかも設定できます。
- **はい**の場合同意要求を行うことができるユーザー、グループ、役割を指定できます。
- ユーザーがメール通知や期限切れリマインダーを受け取るかどうかも設定ます。
### **管理されたアイデンティティ(メタデータ)**
### **マネージドアイデンティティ(メタデータ)**
Azure Active Directoryの管理されたアイデンティティは、アプリケーションの**アイデンティティを自動的に管理する**ためのソリューションを提供します。これらのアイデンティティは、Azure Active Directory**Azure AD**)認証と互換性のある**リソース**に接続するためにアプリケーションによって使用されます。これにより、アプリケーションは**メタデータ**サービスに連絡して、有効なトークンを取得し、Azureで指定された管理されたアイデンティティとして**アクションを実行**できるようになります。
Azure Active Directoryのマネージドアイデンティティは、アプリケーションの**アイデンティティを自動的に管理する**ためのソリューションを提供します。これらのアイデンティティは、Azure Active Directory**Azure AD**)認証と互換性のある**リソース**に接続するためにアプリケーションによって使用されます。これにより、アプリケーションは**メタデータ**サービスに連絡して、Azureで指定されたマネージドアイデンティティとして**アクションを実行する**ための有効なトークンを取得できるため、クラウド資格情報をコードにハードコーディングする必要がなくなります。
管理されたアイデンティティには2種類あります
マネージドアイデンティティには2種類あります
- **システム割り当て**: 一部のAzureサービスでは、**サービスインスタンスに直接管理されたアイデンティティを有効にする**ことができます。システム割り当ての管理されたアイデンティティを有効にすると、リソースが存在するサブスクリプションによって信頼されるEntra IDテナントに**サービスプリンシパル**が作成されます。**リソース**が**削除される**、Azureは自動的に**アイデンティティ**を削除します。
- **ユーザー割り当て**: ユーザーが管理されたアイデンティティを生成することも可能です。これらは、サブスクリプション内のリソースグループ内に作成され、サブスクリプションによって信頼されるEntraIDにサービスプリンシパルが作成されます。その後、管理されたアイデンティティをAzureサービスの1つまたは**複数のインスタンス**(複数のリソース)に割り当てることができます。ユーザー割り当ての管理されたアイデンティティでは、**アイデンティティはそれを使用するリソースとは別に管理されます**。
- **システム割り当て**一部のAzureサービスでは、**サービスインスタンスに直接マネージドアイデンティティを有効にする**ことができます。システム割り当てマネージドアイデンティティを有効にすると、**サービスプリンシパル**がリソースが存在するサブスクリプションEntra IDテナントに作成されます。**リソース**が**削除される**、Azureは自動的に**アイデンティティ**を削除します。
- **ユーザー割り当て**ユーザーがマネージドアイデンティティを生成することも可能です。これらは、サブスクリプション内のリソースグループ内に作成され、サブスクリプションによって信頼されるEntraIDにサービスプリンシパルが作成されます。その後、マネージドアイデンティティを1つまたは**複数のAzureサービスのインスタンス**に割り当てることができます(複数のリソース)。ユーザー割り当てマネージドアイデンティティの場合、**アイデンティティはそれを使用するリソースとは別に管理されます**。
管理されたアイデンティティは、サービスプリンシパルにアクセスするための永続的な資格情報(パスワードや証明書など)を生成しません。
マネージドアイデンティティは、サービスプリンシパルに付随する**永続的な資格情報**(パスワードや証明書など)を生成しません。
### エンタープライズアプリケーション
これは、サービスプリンシパルをフィルタリングし、割り当てられたアプリケーションを確認するための**Azure内のテーブル**です。
**別の「アプリケーション」タイプではありません。** Azure内に「エンタープライズアプリケーション」というオブジェクトは存在せず、サービスプリンシパル、アプリ登録、管理されたアイデンティティを確認するための抽象化に過ぎません。
**「エンタープライズアプリケーション」という別のタイプの「アプリケーション」ではありません。** Azure内に「エンタープライズアプリケーション」というオブジェクトは存在せず、サービスプリンシパル、アプリ登録、マネージドアイデンティティを確認するための抽象化に過ぎません。
### 管理単位
### 管理ユニット
管理単位は、**組織の特定の部分に対してロールから権限を付与する**ことを可能にします。
管理ユニットは、**組織の特定の部分に対して役割から権限を付与する**ことを可能にします。
:
- シナリオ: 会社地域のIT管理者に自分の地域のユーザーのみを管理させたい。
- 実装:
- 各地域のために管理単位を作成します(例: "北米AU"、"ヨーロッパAU")。
- 各地域のユーザーでAUを構成します。
- AUは**ユーザー、グループ、またはデバイスを含むことができます**
- AUは**動的メンバーシップをサポートします**
- AUは**AUを含むことができません**
- 管理ロールを割り当てます:
- 地域のITスタッフに「ユーザー管理者」ロールを付与し、その地域のAUにスコープを設定します。
- 結果: 地域のIT管理者は、他の地域に影響を与えることなく、自分の地域内のユーザーアカウントを管理できます。
- シナリオ:ある会社地域のIT管理者に自分の地域のユーザーのみを管理させたい。
- 実装
- 各地域のために管理ユニットを作成します(例:「北米AU」、「ヨーロッパAU)。
- 各地域のユーザーでAUを構成します。
- AUは**ユーザー、グループ、またはデバイスを含むことができます**
- AUは**動的メンバーシップをサポートします**
- AUは**AUを含むことができません**
- 管理役割を割り当てます
- 地域のITスタッフに「ユーザー管理者」役割を付与し、その地域のAUにスコープを設定します。
- 結果地域のIT管理者は、他の地域に影響を与えることなく、自分の地域内のユーザーアカウントを管理できます。
### Entra IDロール
### Entra ID役割
- Entra IDを管理するために、Entra IDプリンシパルに割り当てることができる**組み込みロール**があります。
- ロールは[https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference)で確認できます。
- 最も特権のあるロールは**グローバル管理者**です。
- ロールの説明には、その**詳細な権限**が表示されます。
- Entra IDを管理するために、Entra IDプリンシパルに割り当てることができる**組み込み役割**があります。
- 役割は[https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference](https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference)で確認できます。
- 最も特権のある役割は**グローバル管理者**です。
- 役割の説明には、その**詳細な権限**が表示されます。
## ロールと権限
## 役割と権限
**ロール**は**プリンシパル**に**スコープ**で割り当てられます: `principal -[HAS ROLE]->(scope)`
**役割**は**プリンシパル**に**スコープ**で**割り当てられます** `principal -[HAS ROLE]->(scope)`
**グループ**に割り当てられた**ロール**は、グループのすべての**メンバー**に**継承**されます。
**グループ**に割り当てられた**役割**は、グループのすべての**メンバー**に**継承**されます。
ロールが割り当てられたスコープに応じて、**ロール**はスコープコンテナ内の**他のリソース**に**継承**される可能性があります。たとえば、ユーザーAが**サブスクリプション**にロールを持っている場合、彼はその**サブスクリプション内のすべてのリソースグループ**および**リソースグループ内のすべてのリソース**にその**ロール**を持ちます。
役割が割り当てられたスコープに応じて、**役割**はスコープコンテナ内の**他のリソース**に**継承**される可能性があります。たとえば、ユーザーAが**サブスクリプション**に役割を持っている場合、彼はその**サブスクリプション内のすべてのリソースグループ**および**リソースグループ内のすべてのリソース**にその**役割**を持ちます。
### **クラシックロール**
### **クラシック役割**
| **オーナー** | <ul><li>すべてのリソースへの完全なアクセス</li><li>他のユーザーのアクセスを管理できる</li></ul> | すべてのリソースタイプ |
| ----------------------------- | ---------------------------------------------------------------------------------------- | ------------------ |
@@ -235,34 +235,34 @@ Azure Active Directoryの管理されたアイデンティティは、アプリ
| **リーダー** | • すべてのリソースを表示 | すべてのリソースタイプ |
| **ユーザーアクセス管理者** | <ul><li>すべてのリソースを表示</li><li>他のユーザーのアクセスを管理できる</li></ul> | すべてのリソースタイプ |
### 組み込みロール
### 組み込み役割
[ドキュメントから: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azureロールベースアクセス制御(Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview)には、**ユーザー、グループ、サービスプリンシパル、および管理されたアイデンティティ**に**割り当てることができる**いくつかのAzureの**組み込みロール**があります。ロールの割り当ては、**Azureリソースへのアクセスを制御する方法**です。組み込みロールが組織の特定のニーズを満たさない場合は、独自の[**Azureカスタムロール**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)**を作成できます。**
[ドキュメントから: ](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)[Azureロールベースアクセス制御(Azure RBAC)](https://learn.microsoft.com/en-us/azure/role-based-access-control/overview)には、**ユーザー、グループ、サービスプリンシパル、およびマネージドアイデンティティ**に**割り当てることができる**いくつかのAzureの**組み込み役割**があります。役割の割り当ては、**Azureリソースへのアクセスを制御する方法**です。組み込み役割が組織の特定のニーズを満たさない場合は、独自の[**Azureカスタム役割**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)**を作成できます。**
**組み込み**ロールは、**意図されたリソース**にのみ適用されます。たとえば、以下の2つの**組み込みロール**の例を確認してください
**組み込み**役割は、**意図されたリソース**にのみ適用されます。たとえば、の2つの**組み込み役割**の例を確認してください
| [ディスクバックアップリーダー](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | ディスクバックアップを実行するためバックアップボールトへの権限を提供します。 | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 |
| [ディスクバックアップリーダー](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#disk-backup-reader) | ディスクバックアップを実行するためバックアップボールトへの権限を提供します。 | 3e5e47e6-65f7-47ef-90b5-e5dd4d455f24 |
| ----------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ------------------------------------ |
| [仮想マシンユーザーログイン](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#virtual-machine-user-login) | ポータル内の仮想マシンを表示し、通常のユーザーとしてログインします。 | fb879df8-f326-4884-b1cf-06f3ad86be52 |
| [仮想マシンユーザーログイン](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles#virtual-machine-user-login) | ポータル仮想マシンを表示し、通常のユーザーとしてログインします。 | fb879df8-f326-4884-b1cf-06f3ad86be52 |
これらのロールは、**論理コンテナ**(管理グループ、サブスクリプション、リソースグループなど)にも**割り当てることができ**、影響を受けるプリンシパルは**それらのコンテナ内のリソースに対して**持ちます。
これらの役割は、**論理コンテナ**(管理グループ、サブスクリプション、リソースグループなど)にも割り当てることができ、影響を受けるプリンシパルは**それらのコンテナ内のリソースに対して役割を持ちます**
- ここに[**すべてのAzure組み込みロール**](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)のリストがあります。
- ここに[**すべてのEntra ID組み込みロール**](https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference)のリストがあります。
- ここに[**すべてのAzure組み込み役割**](https://learn.microsoft.com/en-us/azure/role-based-access-control/built-in-roles)のリストがあります。
- ここに[**すべてのEntra ID組み込み役割**](https://learn.microsoft.com/en-us/azure/active-directory/roles/permissions-reference)のリストがあります。
### カスタムロール
### カスタム役割
- [**カスタムロール**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)を作成することも可能です。
- これらはスコープ内に作成されますが、ロールは複数のスコープ(管理グループ、サブスクリプション、リソースグループ)に存在できます。
- カスタムロールが持つすべての詳細な権限を構成できます。
- [**カスタム役割**](https://learn.microsoft.com/en-us/azure/role-based-access-control/custom-roles)を作成することも可能です。
- これらはスコープ内に作成されますが、役割は複数のスコープ(管理グループ、サブスクリプション、リソースグループ)に存在できます。
- カスタム役割が持つすべての詳細な権限を構成できます。
- 権限を除外することも可能です。
- 除外された権限を持つプリンシパルは、他の場所で権限が付与されていてもそれを使用できません。
- ワイルドカードを使用することも可能です。
- 使用される形式はJSONです。
- `actions`はリソースに対する制御アクションのためのものです。
- `actions`はリソースに対する制御アクションです。
- `dataActions`はオブジェクト内のデータに対する権限です。
カスタムロールの権限JSONの例:
カスタム役割のための権限JSONの例
```json
{
"properties": {
@@ -294,14 +294,14 @@ Azure Active Directoryの管理されたアイデンティティは、アプリ
```
### Permissions order
- リソースに対して**principalがアクセスを持つためには**、明示的な役割が彼に付与される必要があります(いかなる方法でも)**その権限を付与します**。
- リソースに対して**principalがアクセスを持つためには**、明示的な役割が付与される必要があります(いかなる方法でも)**その権限を付与します**。
- 明示的な**拒否役割の割り当ては**、権限を付与する役割よりも優先されます。
<figure><img src="../../../images/image (191).png" alt=""><figcaption><p><a href="https://link.springer.com/chapter/10.1007/978-1-4842-7325-8_10">https://link.springer.com/chapter/10.1007/978-1-4842-7325-8_10</a></p></figcaption></figure>
### Global Administrator
Global Administratorは、**Entra IDテナントに対する完全な制御を付与する**Entra IDの役割です。しかし、デフォルトではAzureリソースに対する権限は付与されません。
Global Administratorは、**Entra IDテナントに対する完全な制御を付与する**Entra IDの役割です。ただし、デフォルトではAzureリソースに対する権限は付与されません。
Global Administratorの役割を持つユーザーは、**Root Management Group内でUser Access Administrator Azure役割に「昇格」する能力を持っています**。したがって、Global Administratorsは**すべてのAzureサブスクリプションおよび管理グループのアクセスを管理できます。**\
この昇格はページの下部で行うことができます: [https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/\~/Properties](https://portal.azure.com/#view/Microsoft_AAD_IAM/ActiveDirectoryMenuBlade/~/Properties)
@@ -310,7 +310,7 @@ Global Administratorの役割を持つユーザーは、**Root Management Group
### Azure Policies
**Azure Policies**は、組織がリソースが特定の基準およびコンプライアンス要件を満たすことを保証するためのルールです。これにより、**Azure内のリソースに設定を強制または監査することができます**。たとえば、許可されていない地域での仮想マシンの作成を防止したり、すべてのリソースに追跡用の特定のタグが付けられていることを確認したりできます。
**Azure Policies**は、組織がリソースが特定の基準およびコンプライアンス要件を満たすことを保証するためのルールです。これにより、**Azure内のリソースに対して設定を強制または監査することができます**。たとえば、許可されていない地域での仮想マシンの作成を防止したり、すべてのリソースに追跡用の特定のタグが付けられていることを確認したりできます。
Azure Policiesは**プロアクティブ**です:非準拠のリソースが作成または変更されるのを防ぐことができます。また、**リアクティブ**でもあり、既存の非準拠リソースを見つけて修正することができます。
@@ -326,9 +326,9 @@ Azure Policiesは**プロアクティブ**です:非準拠のリソースが
1. **特定のAzure地域でのコンプライアンスの確保**: このポリシーは、すべてのリソースが特定のAzure地域にデプロイされることを保証します。たとえば、企業はGDPRコンプライアンスのためにすべてのデータがヨーロッパに保存されることを望むかもしれません。
2. **命名基準の強制**: ポリシーはAzureリソースの命名規則を強制できます。これにより、大規模な環境でリソースを整理し、名前に基づいて簡単に識別するのに役立ちます。
3. **特定のリソースタイプの制限**: このポリシーは、特定のタイプのリソースの作成を制限できます。たとえば、コストを制御するために、特定のVMサイズのような高価なリソースタイプの作成を防ぐポリシーを設定できます。
4. **タグ付けポリシーの強制**: タグは、リソース管理に使用されるAzureリソースに関連付けられたキーと値のペアです。ポリシーは、すべてのリソースに特定のタグが存在するか、特定の値を持つ必要があることを強制できます。これは、コスト追跡、所有権、またはリソースの分類に役立ちます。
4. **タグ付けポリシーの強制**: タグは、リソース管理に使用されるAzureリソースに関連付けられたキーと値のペアです。ポリシーは、すべてのリソースに特定のタグが存在する必要があるか、特定の値を持つ必要があることを強制できます。これは、コスト追跡、所有権、またはリソースの分類に役立ちます。
5. **リソースへの公共アクセスの制限**: ポリシーは、ストレージアカウントやデータベースのような特定のリソースに公共エンドポイントがないことを強制し、組織のネットワーク内でのみアクセスできるようにします。
6. **セキュリティ設定の自動適用**: ポリシーは、すべてのVMに特定のネットワークセキュリティグループを適用したり、すべてのストレージアカウントが暗号化を使用することを保証したりするなど、リソースにセキュリティ設定を自動的に適用するために使用できます。
6. **セキュリティ設定の自動適用**: ポリシーは、すべてのVMに特定のネットワークセキュリティグループを適用したり、すべてのストレージアカウントが暗号化を使用することを保証したりするために、リソースに自動的にセキュリティ設定を適用するために使用できます。
Azure PoliciesはAzure階層の任意のレベルに添付できますが、**一般的にはルート管理グループ**または他の管理グループで使用されます。
@@ -352,7 +352,7 @@ Azure policy json example:
```
### 権限の継承
Azure **権限は階層の任意の部分に割り当てることができます**。これには管理グループ、サブスクリプション、リソースグループ、および個々のリソースが含まれます。権限は、割り当てられたエンティティの含まれる**リソース**によって**継承**されます。
Azureでは**権限は階層の任意の部分に割り当てることができます**。これには管理グループ、サブスクリプション、リソースグループ、および個々のリソースが含まれます。権限は、割り当てられたエンティティの**リソース**によって**継承**されます。
この階層構造は、アクセス権限の効率的かつスケーラブルな管理を可能にします。
@@ -360,11 +360,11 @@ Azure **権限は階層の任意の部分に割り当てることができます
### Azure RBAC と ABAC
**RBAC**(ロールベースのアクセス制御)は、前のセクションで見たものです:**リソースへのアクセスを付与するために、プリンシパルにロールを割り当てる**。\
しかし、場合によっては**より細かいアクセス管理**を提供したり、**数百の**ロール**割り当て**の管理を**簡素化**したいことがあります。
**RBAC**(ロールベースのアクセス制御)は、前のセクションで見たものです:**リソースに対するアクセスを付与するために、プリンシパルにロールを割り当てる**ことです。\
しかし、場合によっては**より細かいアクセス管理**を提供したり、**数百の**ロール**割り当て**の管理を**簡素化**したいことがあります。
Azure **ABAC**(属性ベースのアクセス制御)は、特定のアクションの文脈における**属性に基づくロール割り当て条件**を追加することでAzure RBACを拡張します。_ロール割り当て条件_は、**より細かいアクセス制御を提供するためにオプションでロール割り当てに追加できる追加のチェック**です。条件は、ロール定義およびロール割り当ての一部として付与される権限を絞り込みます。たとえば、**オブジェクトを読み取るために特定のタグを持つ必要がある条件を追加できます**。\
条件を使用して特定のリソースへの**アクセスを明示的に拒否することはできません**
Azure **ABAC**(属性ベースのアクセス制御)は、特定のアクションの文脈における**属性に基づくロール割り当て条件**を追加することでAzure RBACを拡張します。_ロール割り当て条件_は、**より細かいアクセス制御を提供するためにオプションでロール割り当てに追加できる追加のチェック**です。条件は、ロール定義およびロール割り当ての一部として付与される権限をフィルタリングします。たとえば、**オブジェクトを読み取るために特定のタグを持つ必要がある条件を追加できます**。\
特定のリソースに対して**条件を使用して**明示的に**アクセスを拒否することは**できません。
## 参考文献
@@ -1,4 +1,4 @@
# Az - Tokens & Public Applications
# Az - トークンとパブリックアプリケーション
{{#include ../../../banners/hacktricks-training.md}}
@@ -13,53 +13,53 @@ Entra IDは、Microsoftのクラウドベースのアイデンティティおよ
1. **リソースサーバー(RS:** リソースオーナーが所有するリソースを保護します。
2. **リソースオーナー(RO:** 通常、保護されたリソースを所有するエンドユーザーです。
3. **クライアントアプリケーション(CA):** リソースオーナーの代理としてリソースへのアクセスを求めるアプリケーションです。
4. **認可サーバー(AS:** クライアントアプリケーションを認証および認可した後、アクセス トークンを発行します。
4. **認可サーバー(AS:** 認証および認可後にクライアントアプリケーションアクセストークンを発行します。
**スコープと同意:**
- **スコープ:** アクセスレベルを指定するリソースサーバー上で定義された詳細な権限です。
- **同意:** リソースオーナーが特定のスコープでリソースにアクセスするためのクライアントアプリケーション権限を付与するプロセスです。
- **同意:** リソースオーナーが特定のスコープでリソースにアクセスするためのクライアントアプリケーションへの権限を付与するプロセスです。
**Microsoft 365統合:**
- Microsoft 365はIAMのためにAzure ADを利用し、複数の「ファーストパーティ」OAuthアプリケーションで構成されています。
- これらのアプリケーションは深く統合されており、相互依存するサービス関係を持つことがよくあります。
- これらのアプリケーションは深く統合されており、相互依存するサービス関係を持っています。
- ユーザーエクスペリエンスを簡素化し、機能を維持するために、Microsoftはこれらのファーストパーティアプリケーションに「暗黙の同意」または「事前同意」を付与します。
- **暗黙の同意:** 特定のアプリケーションは、明示的なユーザーまたは管理者の承認なしに特定のスコープへのアクセスを自動的に**付与されます**。
- これらの事前同意されたスコープは通常、ユーザーや管理者から隠されており、標準管理インターフェースではあまり目立ちません。
- **暗黙の同意:** 特定のアプリケーションは、明示的なユーザーまたは管理者の承認なしに特定のスコープへのアクセスを**自動的に付与されます**。
- これらの事前同意されたスコープは通常、ユーザーや管理者から隠されており、標準的な管理インターフェースではあまり目立ちません。
**クライアントアプリケーションの種類:**
1. **機密クライアント:**
- 自身の資格情報(例:パスワードや証明書)を持っています。
- 認可サーバーに**安全に自己認証**できます。
2. **公開クライアント:**
2. **パブリッククライアント:**
- ユニークな資格情報を持っていません。
- 認可サーバーに安全に認証できません。
- **セキュリティの影響:** 攻撃者は、認可サーバーがアプリケーションの正当性を確認するメカニズムがないため、トークンを要求する際に公開クライアントアプリケーションを偽装できます。
- **セキュリティの影響:** 攻撃者は、認可サーバーがアプリケーションの正当性を確認するメカニズムがないため、トークンを要求する際にパブリッククライアントアプリケーションを偽装できます。
## 認証トークン
OIDCで使用される**3種類のトークン**があります:
- [**アクセス トークン**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** クライアントはこのトークンをリソースサーバーに提示して**リソースにアクセス**します。これは特定のユーザー、クライアント、およびリソースの組み合わせにのみ使用でき、**期限切れまで取り消すことはできません** - デフォルトでは1時間です。
- **IDトークン**: クライアントはこの**トークンを認可サーバーから受け取ります**。ユーザーに関する基本情報が含まれています。これは**特定のユーザーとクライアントの組み合わせにバインドされています**。
- **リフレッシュトークン**: アクセストークンと共にクライアントに提供されます。**新しいアクセスおよびIDトークンを取得するために使用されます**。これは特定のユーザーとクライアントの組み合わせにバインドされており、取り消すことができます。非アクティブなリフレッシュトークンのデフォルトの有効期限は**90日**で、アクティブなトークンには**有効期限がありません**(リフレッシュトークンから新しいリフレッシュトークンを取得することが可能です)。
- リフレッシュトークンは**`aud`**、いくつかの**スコープ**、および**テナント**に結び付けられており、そのaud、スコープ(それ以上ではなく)およびテナントのためにのみアクセス トークンを生成できる必要があります。ただし、これは**FOCIアプリケーショントークン**には当てはまりません。
- [**アクセストークン**](https://learn.microsoft.com/en-us/azure/active-directory/develop/access-tokens)**:** クライアントはこのトークンをリソースサーバーに提示して**リソースにアクセス**します。これは特定のユーザー、クライアント、およびリソースの組み合わせにのみ使用でき、**期限切れまで取り消すことはできません** - デフォルトでは1時間です。
- **IDトークン:** クライアントはこの**トークンを認可サーバーから受け取ります**。ユーザーに関する基本情報が含まれています。これは**特定のユーザーとクライアントの組み合わせに結びついています**。
- **リフレッシュトークン:** アクセストークンと共にクライアントに提供されます。**新しいアクセストークンとIDトークンを取得するために使用されます**。これは特定のユーザーとクライアントの組み合わせに結びついており、取り消すことができます。非アクティブなリフレッシュトークンのデフォルトの有効期限は**90日**で、アクティブなトークンには**有効期限がありません**(リフレッシュトークンから新しいリフレッシュトークンを取得することが可能です)。
- リフレッシュトークンは**`aud`**、いくつかの**スコープ**、および**テナント**に結びついており、そのaud、スコープ(それ以上ではなく)およびテナントのためにのみアクセストークンを生成できるべきです。しかし、これは**FOCIアプリケーショントークン**には当てはまりません。
- リフレッシュトークンは暗号化されており、Microsoftのみがそれを復号化できます。
- 新しいリフレッシュトークンを取得しても、以前のリフレッシュトークンは取り消されません。
> [!WARNING]
> **条件付きアクセス**に関する情報は**JWT**内に**保存**されています。したがって、**許可されたIPアドレス**から**トークンを要求**すると、その**IP**トークンに**保存**され、その後**許可されていないIPからリソースにアクセスするためにそのトークンを使用**できます。
> **条件付きアクセス**に関する情報は**JWT**内に**保存**されています。したがって、**許可されたIPアドレス**から**トークンを要求**すると、その**IP**トークンに**保存**され、その後**許可されていないIPからリソースにアクセスするためにそのトークンを使用できます**
### アクセストークン "aud"
"aud"フィールドに示されたフィールドは、ログインを実行するために使用される**リソースサーバー**(アプリケーション)です。
コマンド`az account get-access-token --resource-type [...]`は、以下のタイプをサポートしており、それぞれが結果のアクセス トークンに特定の"aud"を追加します:
コマンド`az account get-access-token --resource-type [...]`は、以下のタイプをサポートしており、それぞれが結果のアクセストークンに特定の"aud"を追加します:
> [!CAUTION]
> 以下は`az account get-access-token`でサポートされているAPIに過ぎないことに注意してくださいが、他にもあります。
> 以下は`az account get-access-token`でサポートされているAPIに過ぎませんが、他にもあります。
<details>
@@ -71,16 +71,16 @@ OIDCで使用される**3種類のトークン**があります:
* **arm (Azure Resource Manager)**: Azure Resource Manager APIを通じてAzureリソースを管理するために使用されます。これには、仮想マシン、ストレージアカウントなどのリソースの作成、更新、削除などの操作が含まれます。
- `https://management.core.windows.net/ or https://management.azure.com/`
- **batch (Azure Batch Services)**: 大規模な並列および高性能コンピューティングアプリケーションをクラウドで効率的に実行するためのサービスであるAzure Batchにアクセスするために使用されます。
- **batch (Azure Batch Services)**: Azure Batchにアクセスするために使用され、クラウド内で大規模な並列および高性能コンピューティングアプリケーションを効率的に実行ます。
- `https://batch.core.windows.net/`
* **data-lake (Azure Data Lake Storage)**: スケーラブルなデータストレージおよび分析サービスであるAzure Data Lake Storage Gen1と対話するために使用されす。
* **data-lake (Azure Data Lake Storage)**: Azure Data Lake Storage Gen1と対話するために使用される、スケーラブルなデータストレージおよび分析サービスです。
- `https://datalake.azure.net/`
- **media (Azure Media Services)**: ビデオおよびオーディオコンテンツのためのクラウドベースのメディア処理および配信サービスを提供するAzure Media Servicesにアクセスするために使用されます。
- `https://rest.media.azure.net`
* **ms-graph (Microsoft Graph API)**: Microsoft 365サービスデータのための統一エンドポイントであるMicrosoft Graph APIにアクセスするために使用されます。Azure AD、Office 365、Enterprise Mobility、Securityサービスなどのサービスからデータとインサイトにアクセスすることを可能にします。
* **ms-graph (Microsoft Graph API)**: Microsoft 365サービスデータのための統一エンドポイントであるMicrosoft Graph APIにアクセスするために使用されます。Azure AD、Office 365、Enterprise Mobility、Securityサービスなどのサービスからデータとインサイトにアクセスできます。
- `https://graph.microsoft.com`
- **oss-rdbms (Azure Open Source Relational Databases)**: MySQL、PostgreSQL、MariaDBなどのオープンソースリレーショナルデータベースエンジンのためのAzure Databaseサービスにアクセスするために使用されます。
@@ -90,11 +90,11 @@ OIDCで使用される**3種類のトークン**があります:
### アクセストークンのスコープ "scp"
アクセス トークンのスコープは、アクセス トークンJWT内のscpキーに保存されています。これらのスコープは、アクセス トークンがアクセスできるものを定義します。
アクセストークンのスコープは、アクセストークンJWT内のscpキーに保存されています。これらのスコープは、アクセストークンがアクセスできるものを定義します。
JWTが特定のAPIに連絡することが許可されているが、**要求されたアクションを実行するためのスコープを持っていない場合**、そのJWTでアクションを**実行できません**。
### リフレッシュおよびアクセス トークンの取得例
### リフレッシュトークンとアクセストークンの取得例
```python
# Code example from https://github.com/secureworks/family-of-client-ids-research
import msal
@@ -121,7 +121,6 @@ device_flow
pprint(azure_cli_bearer_tokens_for_graph_api)
# DECODE JWT
def decode_jwt(base64_blob: str) -> Dict[str, Any]:
"""Decodes base64 encoded JWT blob"""
@@ -147,17 +146,17 @@ pprint(new_azure_cli_bearer_tokens_for_graph_api)
```
## FOCIトークンの特権昇格
以前に述べたように、リフレッシュトークンは生成された**スコープ**、**アプリケーション**、および**テナント**に結び付けられるべきです。これらの境界のいずれかが破られると、ユーザーがアクセスできる他のリソースやテナントに対して、元々意図されたよりも多くのスコープでアクセストークンを生成することが可能になるため、特権を昇格させることができます。
以前に述べたように、リフレッシュトークンは生成された**スコープ**、**アプリケーション**、および**テナント**に関連付けられるべきです。これらの境界のいずれかが破られると、ユーザーがアクセスできる他のリソースやテナントに対して、元々意図されたよりも多くのスコープでアクセストークンを生成することが可能になるため、特権を昇格させることができます。
さらに、[Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/)Microsoft Entraアカウント、Microsoft個人アカウント、FacebookやGoogleなどのソーシャルアカウント)では、**すべてのリフレッシュトークンでこれが可能です**。なぜなら、[**ドキュメント**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens)には次のように記載されているからです。「リフレッシュトークンはユーザーとクライアントの組み合わせに結び付けられていますが、**リソースやテナントに結び付けられていません**。クライアントは、許可されている任意のリソースとテナントの組み合わせに対してアクセストークンを取得するためにリフレッシュトークンを使用できます。リフレッシュトークンは暗号化されており、Microsoft identity platformのみがそれを読み取ることができます。」
さらに、これは[Microsoft identity platform](https://learn.microsoft.com/en-us/entra/identity-platform/)Microsoft Entraアカウント、Microsoft個人アカウント、FacebookやGoogleなどのソーシャルアカウント)において**すべてのリフレッシュトークンで可能です**。なぜなら、[**ドキュメント**](https://learn.microsoft.com/en-us/entra/identity-platform/refresh-tokens)には次のように記載されているからです。「リフレッシュトークンはユーザーとクライアントの組み合わせにバインドされていますが、**リソースやテナントに結びついていません**。クライアントは、許可されている任意のリソースとテナントの組み合わせに対してアクセストークンを取得するためにリフレッシュトークンを使用できます。リフレッシュトークンは暗号化されており、Microsoft identity platformのみがそれを読み取ることができます。」
さらに、FOCIアプリケーションは公開アプリケーションであるため、**サーバーに認証するため秘密は必要ありません**。
さらに、FOCIアプリケーションは公開アプリケーションであるため、サーバーに認証するために**秘密は必要ありません**。
次に、[**元の研究**](https://github.com/secureworks/family-of-client-ids-research/tree/main)で報告された既知のFOCIクライアントは、[**こちら**](https://github.com/secureworks/family-of-client-ids-research/blob/main/known-foci-clients.csv)で見つけることができます。
### 異なるスコープを取得
前の例のコードに続いて、このコードでは異なるスコープの新しいトークンを要求しています:
前の例のコードに従い、このコードでは異なるスコープの新しいトークンを要求しています:
```python
# Code from https://github.com/secureworks/family-of-client-ids-research
azure_cli_bearer_tokens_for_outlook_api = (