mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-02-05 03:16:37 -08:00
Translated ['src/pentesting-cloud/aws-security/aws-basic-information/REA
This commit is contained in:
@@ -10,7 +10,7 @@
|
||||
|
||||
AWSには**ルートアカウント**があり、これは**組織内のすべてのアカウントの親コンテナ**です。しかし、そのアカウントを使用してリソースをデプロイする必要はなく、**異なるAWS**インフラストラクチャを分離するために**他のアカウントを作成することができます**。
|
||||
|
||||
これは**セキュリティ**の観点から非常に興味深いことであり、**1つのアカウントは他のアカウントのリソースにアクセスできません**(特別にブリッジが作成されていない限り)。このようにして、デプロイメント間に境界を作成できます。
|
||||
これは**セキュリティ**の観点から非常に興味深いことであり、**1つのアカウントは他のアカウントのリソースにアクセスできません**(特別にブリッジが作成されない限り)。このようにして、デプロイメント間に境界を作成できます。
|
||||
|
||||
したがって、**組織内には2種類のアカウントがあります**(AWSアカウントについて話しており、ユーザーアカウントではありません):管理アカウントとして指定された単一のアカウントと、1つ以上のメンバーアカウントです。
|
||||
|
||||
@@ -27,33 +27,33 @@ 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)
|
||||
|
||||
**サービスコントロールポリシー (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の例:
|
||||
|
||||
- ルートアカウントを完全に拒否
|
||||
- 特定のリージョンのみを許可
|
||||
- ホワイトリストに登録されたサービスのみを許可
|
||||
- GuardDuty、CloudTrail、およびS3のパブリックブロックアクセスを無効にすることを拒否
|
||||
- GuardDuty、CloudTrail、およびS3パブリックブロックアクセスの無効化を拒否
|
||||
|
||||
- セキュリティ/インシデントレスポンスロールの削除または
|
||||
|
||||
@@ -66,7 +66,7 @@ SCPの例:
|
||||
|
||||
### ARN
|
||||
|
||||
**Amazon Resource Name**は、AWS内のすべてのリソースが持つ**一意の名前**で、次のように構成されています:
|
||||
**Amazonリソース名**は、AWS内のすべてのリソースが持つ**ユニークな名前**で、次のように構成されています:
|
||||
```
|
||||
arn:partition:service:region:account-id:resource-type/resource-id
|
||||
arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
|
||||
@@ -80,10 +80,10 @@ arn:aws:elasticbeanstalk:us-west-1:123456789098:environment/App/Env
|
||||
|
||||
## IAM - アイデンティティとアクセス管理
|
||||
|
||||
IAMは、AWSアカウント内で**認証**、**承認**、および**アクセス制御**を管理するためのサービスです。
|
||||
IAMは、AWSアカウント内での**認証**、**承認**、および**アクセス制御**を管理するためのサービスです。
|
||||
|
||||
- **認証** - アイデンティティを定義し、そのアイデンティティを検証するプロセス。このプロセスは、識別と検証に分けることができます。
|
||||
- **承認** - アイデンティティがシステム内でアクセスできるものを決定します。
|
||||
- **承認** - 認証された後に、システム内でアイデンティティがアクセスできるものを決定します。
|
||||
- **アクセス制御** - セキュアなリソースへのアクセスがどのように付与されるかの方法とプロセス
|
||||
|
||||
IAMは、AWSアカウント内のリソースに対するアイデンティティの認証、承認、およびアクセス制御メカニズムを管理、制御、統治する能力によって定義されます。
|
||||
@@ -98,26 +98,26 @@ 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を無料で有効にできます。
|
||||
これは、既存の方法(パスワードなど)に加えて**認証のための追加の要素を作成する**ために使用され、マルチファクターレベルの認証を作成します。\
|
||||
無料の仮想アプリケーションや物理デバイスを使用できます。Google認証などのアプリを使用して、AWSでMFAを無料で有効にできます。
|
||||
|
||||
MFA条件を持つポリシーは、次のものに添付できます:
|
||||
MFA条件を持つポリシーは、以下に添付できます:
|
||||
|
||||
- IAMユーザーまたはグループ
|
||||
- Amazon S3バケット、Amazon SQSキュー、またはAmazon SNSトピックなどのリソース
|
||||
@@ -134,7 +134,7 @@ aws sts get-session-token --serial-number <arn_device> --token-code <code>
|
||||
|
||||
IAM [ユーザーグループ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_groups.html)は、**複数のユーザーにポリシーを一度にアタッチする**方法であり、これによりそれらのユーザーの権限を管理しやすくなります。**ロールとグループはグループの一部にはなれません**。
|
||||
|
||||
**ユーザーグループにアイデンティティベースのポリシーをアタッチする**ことで、ユーザーグループ内のすべての**ユーザー**が**ポリシーの権限を受け取ります**。**ユーザーグループ**を**ポリシー**(リソースベースのポリシーなど)内の**`Principal`**として特定することは**できません**。なぜなら、グループは権限に関連し、認証には関連しないため、プリンシパルは認証されたIAMエンティティだからです。
|
||||
**ユーザーグループにアイデンティティベースのポリシーをアタッチ**することで、ユーザーグループ内のすべての**ユーザー**が**ポリシーの権限を受け取ります**。**ユーザーグループ**を**ポリシー**(リソースベースのポリシーなど)内の**`Principal`**として特定することは**できません**。なぜなら、グループは権限に関連し、認証には関連しないため、プリンシパルは認証されたIAMエンティティだからです。
|
||||
|
||||
ユーザーグループの重要な特徴は以下の通りです:
|
||||
|
||||
@@ -145,7 +145,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種類のポリシー**で構成されています:**信頼ポリシー**(空であってはならず、**誰がロールを引き受けることができるかを定義**)と、**権限ポリシー**(空であってはならず、**何にアクセスできるかを定義**)。
|
||||
|
||||
@@ -164,7 +164,7 @@ AWSセキュリティトークンサービス(STS)は、**一時的で制限
|
||||
権限を割り当てるために使用されます。2種類あります:
|
||||
|
||||
- AWS管理ポリシー(AWSによって事前設定されたもの)
|
||||
- カスタマー管理ポリシー:あなたが設定したもの。AWS管理ポリシーに基づいてポリシーを作成できます(そのうちの1つを修正して独自のものを作成する)、ポリシージェネレーターを使用する(権限を付与および拒否するのを助けるGUIビュー)または独自に作成することができます。
|
||||
- カスタマー管理ポリシー:あなたが設定したもの。AWS管理ポリシーに基づいてポリシーを作成できます(そのうちの1つを修正して独自のものを作成する)、ポリシージェネレーターを使用する(権限を付与および拒否するのを助けるGUIビュー)または自分で書くことができます。
|
||||
|
||||
**デフォルトのアクセスは** **拒否**され、明示的なロールが指定された場合にのみアクセスが許可されます。\
|
||||
**単一の「拒否」が存在する場合、それは「許可」を上書きします**。ただし、AWSアカウントのルートセキュリティ資格情報を使用するリクエストは(デフォルトで許可されます)。
|
||||
@@ -190,19 +190,19 @@ AWSセキュリティトークンサービス(STS)は、**一時的で制限
|
||||
]
|
||||
}
|
||||
```
|
||||
[グローバルフィールドは、任意のサービスで条件に使用できるものがここに文書化されています](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount)。\
|
||||
[特定のフィールドは、サービスごとに条件に使用できるものがここに文書化されています](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)。
|
||||
[グローバルフィールドは、任意のサービスで条件に使用できることが文書化されています](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceaccount)。\
|
||||
[サービスごとに条件に使用できる特定のフィールドはここに文書化されています](https://docs.aws.amazon.com/service-authorization/latest/reference/reference_policies_actions-resources-contextkeys.html)。
|
||||
|
||||
#### インラインポリシー
|
||||
|
||||
この種のポリシーは、**ユーザー、グループ、またはロールに直接割り当てられます**。そのため、他の誰も使用できるようにはポリシーリストに表示されません。\
|
||||
インラインポリシーは、**ポリシーと適用されるアイデンティティとの間に厳密な1対1の関係を維持したい場合に便利です**。たとえば、ポリシー内の権限が意図されたアイデンティティ以外に誤って割り当てられないことを確認したい場合です。インラインポリシーを使用すると、ポリシー内の権限が誤って間違ったアイデンティティに添付されることはありません。さらに、AWS Management Consoleを使用してそのアイデンティティを削除すると、アイデンティティに埋め込まれたポリシーも削除されます。これは、それらが主エンティティの一部であるためです。
|
||||
この種のポリシーは**ユーザー、グループ、またはロールに直接割り当てられます**。そのため、他の誰も使用できるようにはポリシーリストに表示されません。\
|
||||
インラインポリシーは、**ポリシーと適用されるアイデンティティとの間に厳密な1対1の関係を維持したい場合**に便利です。たとえば、ポリシー内の権限が意図されたアイデンティティ以外に誤って割り当てられないことを確認したい場合です。インラインポリシーを使用すると、ポリシー内の権限が誤って間違ったアイデンティティに添付されることはありません。さらに、AWS Management Consoleを使用してそのアイデンティティを削除すると、アイデンティティに埋め込まれたポリシーも削除されます。これは、それらが主エンティティの一部であるためです。
|
||||
|
||||
#### リソースバケットポリシー
|
||||
|
||||
これらは**リソース内で定義できるポリシー**です。**すべてのAWSリソースがそれをサポートしているわけではありません**。
|
||||
これらは**リソースに定義できるポリシー**です。**すべてのAWSリソースがそれをサポートしているわけではありません**。
|
||||
|
||||
もしプリンシパルがそれに対して明示的な拒否を持っておらず、リソースポリシーがアクセスを許可している場合、アクセスが許可されます。
|
||||
もしプリンシパルがそれに対して明示的な拒否を持っておらず、リソースポリシーがアクセスを許可している場合、彼らは許可されます。
|
||||
|
||||
### IAMバウンダリー
|
||||
|
||||
@@ -210,11 +210,11 @@ IAMバウンダリーは、**ユーザーまたはロールがアクセスでき
|
||||
|
||||
バウンダリーは、ユーザーに添付されたポリシーであり、**ユーザーまたはロールが持つことができる最大の権限レベルを示します**。したがって、**ユーザーが管理者アクセスを持っていても**、バウンダリーが彼がS·バケットを読むことしかできないと示している場合、それが彼ができる最大のことです。
|
||||
|
||||
**これ**、**SCP**、および**最小特権の原則に従うこと**は、ユーザーが必要以上の権限を持たないように制御する方法です。
|
||||
**これ**、**SCP**および**最小権限の原則に従うこと**は、ユーザーが必要以上の権限を持たないように制御する方法です。
|
||||
|
||||
### セッションポリシー
|
||||
|
||||
セッションポリシーは、**ロールが引き受けられたときに設定されるポリシー**です。これは、そのセッションのための**IAMバウンダリーのようなものです**:これは、セッションポリシーが権限を付与するのではなく、**ポリシーに示された権限に制限することを意味します**(最大権限はロールが持つものです)。
|
||||
セッションポリシーは、**ロールが引き受けられたときに設定されるポリシー**です。これは、そのセッションの**IAMバウンダリーのようなもの**になります:これは、セッションポリシーが権限を付与するのではなく、**ポリシーに示された権限に制限することを意味します**(最大権限はロールが持つものです)。
|
||||
|
||||
これは**セキュリティ対策**に役立ちます:管理者が非常に特権のあるロールを引き受ける場合、セッションが侵害された場合に備えて、セッションポリシーに示された権限のみを制限することができます。
|
||||
```bash
|
||||
@@ -224,9 +224,9 @@ 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)。
|
||||
|
||||
したがって、ある時点で「...セッションポリシーが許可していないため...」というエラーに直面した場合、ロールがアクションを実行するアクセス権を持っていても、**それを妨げるセッションポリシーが存在するためです**。
|
||||
したがって、ある時点で「...セッションポリシーが許可していないため...」というエラーに直面した場合、ロールがアクションを実行するアクセス権を持っていても、**それを妨げるセッションポリシーが存在する**ということです。
|
||||
|
||||
### アイデンティティフェデレーション
|
||||
|
||||
@@ -253,19 +253,19 @@ AWS IAMアイデンティティセンター(AWSシングルサインオンの
|
||||
|
||||
<figure><img src="../../../images/image (279).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
アイデンティティセンターディレクトリの最も単純なケースでは、**アイデンティティセンターはユーザーとグループのリストを持ち**、それらに**ポリシーを割り当てることができます**。**組織の任意のアカウント**に対して。
|
||||
アイデンティティセンターディレクトリの最も単純なケースでは、**アイデンティティセンターはユーザーとグループのリストを持ち**、それらに**ポリシーを割り当てる**ことができ、**組織の任意のアカウント**に対して行います。
|
||||
|
||||
アイデンティティセンターのユーザー/グループにアカウントへのアクセスを与えるために、**アイデンティティセンターを信頼するSAMLアイデンティティプロバイダーが作成され**、**指定されたポリシーを持つアイデンティティプロバイダーを信頼するロールが宛先アカウントに作成されます**。
|
||||
|
||||
#### AwsSSOInlinePolicy
|
||||
|
||||
**IAMアイデンティティセンターを介して作成されたロールにインラインポリシーを介して権限を与えることが可能です**。AWSアイデンティティセンターで**インラインポリシーを持つアカウントに作成されたロール**は、**`AwsSSOInlinePolicy`**というインラインポリシーでこれらの権限を持ちます。
|
||||
**IAMアイデンティティセンターを介して作成されたロールにインラインポリシーを介して権限を与えることが可能です**。AWSアイデンティティセンターでインラインポリシーを持つアカウントで作成されたロールは、**`AwsSSOInlinePolicy`**というインラインポリシーでこれらの権限を持ちます。
|
||||
|
||||
したがって、**`AwsSSOInlinePolicy`**というインラインポリシーを持つ2つのロールが表示されても、**同じ権限を持っているわけではありません**。
|
||||
|
||||
### クロスアカウントの信頼とロール
|
||||
|
||||
**ユーザー**(信頼する側)は、いくつかのポリシーを持つクロスアカウントロールを作成し、**別のユーザー**(信頼される側)に**自分のアカウントにアクセスを許可することができますが、**新しいロールポリシーで示されたアクセスのみを持つことができます**。これを作成するには、新しいロールを作成し、クロスアカウントロールを選択します。クロスアカウントアクセス用のロールは2つのオプションを提供します。所有するAWSアカウント間でのアクセスを提供することと、所有するアカウントとサードパーティのAWSアカウント間でのアクセスを提供することです。\
|
||||
**ユーザー**(信頼する側)は、いくつかのポリシーを持つクロスアカウントロールを作成し、**別のユーザー**(信頼される側)に**自分のアカウントにアクセスを許可する**が、**新しいロールポリシーで示されたアクセスのみを持つ**ことができます。これを作成するには、新しいロールを作成し、クロスアカウントロールを選択します。クロスアカウントアクセス用のロールは2つのオプションを提供します。所有するAWSアカウント間でのアクセスを提供することと、所有するアカウントとサードパーティのAWSアカウント間でのアクセスを提供することです。\
|
||||
信頼されるユーザーを**特定し、一般的なものを指定しないことをお勧めします**。そうしないと、フェデレーテッドユーザーなどの他の認証されたユーザーもこの信頼を悪用できる可能性があります。
|
||||
|
||||
### AWS Simple AD
|
||||
@@ -282,14 +282,14 @@ AWS IAMアイデンティティセンター(AWSシングルサインオンの
|
||||
|
||||
#### WebフェデレーションまたはOpenID認証
|
||||
|
||||
アプリはAssumeRoleWithWebIdentityを使用して一時的な資格情報を作成します。ただし、これによりAWSコンソールへのアクセスは付与されず、AWS内のリソースへのアクセスのみが許可されます。
|
||||
アプリはAssumeRoleWithWebIdentityを使用して一時的な資格情報を作成します。ただし、これによりAWSコンソールへのアクセスは付与されず、AWS内のリソースへのアクセスのみが付与されます。
|
||||
|
||||
### その他のIAMオプション
|
||||
|
||||
- **パスワードポリシー設定**を設定することができ、最小長やパスワード要件などのオプションがあります。
|
||||
- **"Credential Report"をダウンロード**して、現在の資格情報に関する情報(ユーザー作成時間、パスワードが有効かどうかなど)を取得できます。資格情報レポートは、最長で**4時間ごとに生成**できます。
|
||||
- **"Credential Report"をダウンロード**して、現在の資格情報に関する情報(ユーザー作成時間、パスワードが有効かどうかなど)を取得できます。資格情報レポートは、最長で**4時間ごと**に生成できます。
|
||||
|
||||
AWSアイデンティティおよびアクセス管理(IAM)は、AWS全体での**きめ細かいアクセス制御**を提供します。IAMを使用すると、**誰がどのサービスやリソースにアクセスできるか、どの条件下でアクセスできるかを指定できます**。IAMポリシーを使用して、労働力やシステムへの権限を管理し、**最小権限の権限を確保します**。
|
||||
AWSアイデンティティおよびアクセス管理(IAM)は、AWS全体での**きめ細かいアクセス制御**を提供します。IAMを使用すると、**誰がどのサービスやリソースにアクセスできるか、そしてどの条件下でアクセスできるかを指定できます**。IAMポリシーを使用して、労働力やシステムへの権限を管理し、**最小権限の権限を確保します**。
|
||||
|
||||
### IAM IDプレフィックス
|
||||
|
||||
|
||||
@@ -4,62 +4,62 @@
|
||||
|
||||
## **CloudTrail**
|
||||
|
||||
AWS CloudTrail **は、AWS 環境内のアクティビティを記録および監視します**。それは、誰が何を、いつ、どこから行ったかを含む詳細な **イベントログ** をキャプチャします。これにより、変更やアクションの監査証跡が提供され、セキュリティ分析、コンプライアンス監査、およびリソース変更の追跡に役立ちます。CloudTrail は、ユーザーおよびリソースの動作を理解し、セキュリティ姿勢を強化し、規制遵守を確保するために不可欠です。
|
||||
AWS CloudTrail **は、AWS環境内の活動を記録および監視します**。それは、誰が何を、いつ、どこから行ったかを含む詳細な**イベントログ**をキャプチャします。これにより、変更やアクションの監査証跡が提供され、セキュリティ分析、コンプライアンス監査、およびリソース変更の追跡に役立ちます。CloudTrailは、ユーザーとリソースの動作を理解し、セキュリティ姿勢を強化し、規制遵守を確保するために不可欠です。
|
||||
|
||||
各ログされたイベントには以下が含まれます:
|
||||
|
||||
- 呼び出された API の名前: `eventName`
|
||||
- 呼び出されたAPIの名前: `eventName`
|
||||
- 呼び出されたサービス: `eventSource`
|
||||
- 時間: `eventTime`
|
||||
- IP アドレス: `SourceIPAddress`
|
||||
- IPアドレス: `SourceIPAddress`
|
||||
- エージェントメソッド: `userAgent`。例:
|
||||
- Signing.amazonaws.com - AWS Management Console から
|
||||
- Signing.amazonaws.com - AWS Management Consoleから
|
||||
- console.amazonaws.com - アカウントのルートユーザー
|
||||
- lambda.amazonaws.com - AWS Lambda
|
||||
- リクエストパラメータ: `requestParameters`
|
||||
- レスポンス要素: `responseElements`
|
||||
|
||||
イベントは **約 5 分ごとに JSON ファイルに新しいログファイルとして書き込まれ**、CloudTrail に保持され、最終的にログファイルは **約 15 分後に S3 に配信されます**。\
|
||||
CloudTrail のログは **アカウント間およびリージョン間で集約できます。**\
|
||||
CloudTrail は **ログファイルの整合性を使用して、ログファイルが CloudTrail によって配信されて以来変更されていないことを確認できるようにします**。これは、ダイジェストファイル内のログの SHA-256 ハッシュを作成します。新しいログの SHA-256 ハッシュは毎時作成されます。\
|
||||
トレイルを作成する際、イベントセレクタを使用してログするトレイルを示すことができます:管理、データ、またはインサイトイベント。
|
||||
イベントは**約5分ごとにJSONファイルに新しいログファイルとして書き込まれ**、CloudTrailによって保持され、最終的にログファイルは**約15分後にS3に配信されます**。\
|
||||
CloudTrailのログは**アカウント間およびリージョン間で集約できます**。\
|
||||
CloudTrailは、**ログファイルの整合性を使用して、CloudTrailが提供した後にログファイルが変更されていないことを確認できるようにします**。これは、ダイジェストファイル内のログのSHA-256ハッシュを作成します。新しいログのsha-256ハッシュは毎時作成されます。\
|
||||
トレイルを作成する際、イベントセレクターを使用してログを記録するトレイルを指定できます:管理、データ、またはインサイトイベント。
|
||||
|
||||
ログは S3 バケットに保存されます。デフォルトではサーバーサイド暗号化 (SSE-S3) が使用されるため、AWS はアクセス権を持つ人々のためにコンテンツを復号化しますが、追加のセキュリティのために SSE を KMS と独自のキーで使用することもできます。
|
||||
ログはS3バケットに保存されます。デフォルトではサーバーサイド暗号化(SSE-S3)が使用されるため、AWSはアクセス権を持つ人々のためにコンテンツを復号化しますが、追加のセキュリティのためにSSEをKMSおよび独自のキーと共に使用できます。
|
||||
|
||||
ログは **この名前形式の S3 バケットに保存されます**:
|
||||
ログは**この名前形式のS3バケットに保存されます**:
|
||||
|
||||
- **`BucketName/AWSLogs/AccountID/CloudTrail/RegionName/YYY/MM/DD`**
|
||||
- バケット名は: **`aws-cloudtrail-logs-<accountid>-<random>`**
|
||||
- 例: **`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`**
|
||||
- バケット名は:**`aws-cloudtrail-logs-<accountid>-<random>`**
|
||||
- 例:**`aws-cloudtrail-logs-947247140022-ffb95fe7/AWSLogs/947247140022/CloudTrail/ap-south-1/2023/02/22/`**
|
||||
|
||||
各フォルダ内の各ログは **この形式に従った名前を持ちます**: **`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`**
|
||||
各フォルダー内の各ログは**この形式に従った名前を持ちます**:**`AccountID_CloudTrail_RegionName_YYYYMMDDTHHMMZ_Random.json.gz`**
|
||||
|
||||
ログファイル命名規則
|
||||
|
||||
.png>)
|
||||
|
||||
さらに、**ファイル整合性を確認するためのダイジェストファイル**は **同じバケット内にあります**:
|
||||
さらに、**ファイル整合性を確認するためのダイジェストファイル**は、**同じバケット内にあります**:
|
||||
|
||||
.png>)
|
||||
|
||||
### 複数アカウントからのログの集約
|
||||
|
||||
- ログファイルを配信する AWS アカウントでトレイルを作成します
|
||||
- CloudTrail のためにクロスアカウントアクセスを許可するように、宛先 S3 バケットに権限を適用し、アクセスが必要な各 AWS アカウントを許可します
|
||||
- 他の AWS アカウントで新しいトレイルを作成し、ステップ 1 で作成したバケットを使用するように選択します
|
||||
- ログファイルを配信するAWSアカウントにトレイルを作成します
|
||||
- CloudTrailのためにクロスアカウントアクセスを許可するように宛先S3バケットに権限を適用し、アクセスが必要な各AWSアカウントを許可します
|
||||
- 他のAWSアカウントで新しいトレイルを作成し、ステップ1で作成したバケットを使用するように選択します
|
||||
|
||||
ただし、すべてのログを同じ S3 バケットに保存できるとしても、複数のアカウントからの CloudTrail ログを単一の AWS アカウントに属する CloudWatch Logs に集約することはできません。
|
||||
ただし、すべてのログを同じS3バケットに保存できるとしても、複数のアカウントからのCloudTrailログを単一のAWSアカウントに属するCloudWatch Logsに集約することはできません。
|
||||
|
||||
> [!CAUTION]
|
||||
> アカウントには、**異なるトレイル**が CloudTrail **で有効**になっており、異なるバケットに同じ(または異なる)ログを保存できることを忘れないでください。
|
||||
> アカウントには、**異なるトレイル**がCloudTrail **で有効**になっており、異なるバケットに同じ(または異なる)ログを保存できることを忘れないでください。
|
||||
|
||||
### すべての組織アカウントから 1 つの CloudTrail へ
|
||||
### すべての組織アカウントから1つのCloudTrailへ
|
||||
|
||||
CloudTrail を作成する際、組織内のすべてのアカウントに対して CloudTrail を有効にし、ログを 1 つのバケットに集約するように指示することが可能です:
|
||||
CloudTrailを作成する際、組織内のすべてのアカウントに対してCloudTrailを有効にし、ログを1つのバケットに取得するように指示することが可能です:
|
||||
|
||||
<figure><img src="../../../../images/image (200).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
この方法で、すべてのアカウントのすべてのリージョンで CloudTrail を簡単に構成し、1 つのアカウントにログを集中させることができます(そのアカウントは保護する必要があります)。
|
||||
この方法で、すべてのアカウントのすべてのリージョンでCloudTrailを簡単に構成し、1つのアカウントにログを集中させることができます(そのアカウントは保護する必要があります)。
|
||||
|
||||
### ログファイルの確認
|
||||
|
||||
@@ -77,13 +77,13 @@ CloudTrailがCloudWatchにログを送信できるようにするには、その
|
||||
|
||||
### Event History
|
||||
|
||||
CloudTrail Event Historyでは、記録されたログをテーブルで確認できます:
|
||||
CloudTrail Event Historyでは、記録されたログをテーブルで検査できます:
|
||||
|
||||
.png>)
|
||||
|
||||
### Insights
|
||||
|
||||
**CloudTrail Insights**は自動的に**管理イベントの書き込みを分析**し、**異常な活動**を**警告**します。例えば、`TerminateInstance`イベントの増加が確立されたベースラインと異なる場合、それはInsightイベントとして表示されます。これらのイベントは、**異常なAPI活動を見つけて対応することをこれまで以上に容易にします**。
|
||||
**CloudTrail Insights**は自動的に**分析**し、CloudTrailトレイルからの書き込み管理イベントを**警告**し、**異常な活動**を通知します。たとえば、`TerminateInstance`イベントの増加が確立されたベースラインと異なる場合、それはInsightイベントとして表示されます。これらのイベントは、**異常なAPI活動を見つけて対応することをこれまで以上に容易にします**。
|
||||
|
||||
インサイトはCloudTrailログと同じバケットに保存されます:`BucketName/AWSLogs/AccountID/CloudTrail-Insight`
|
||||
|
||||
@@ -125,7 +125,7 @@ aws cloudtrail get-query-results --event-data-store <data-source> --query-id <id
|
||||
### **CSVインジェクション**
|
||||
|
||||
CloudTrail内でCSVインジェクションを実行することが可能で、ログがCSV形式でエクスポートされ、Excelで開かれると任意のコードが実行されます。\
|
||||
次のコードは、ペイロードを含む悪いトレイル名のログエントリを生成します:
|
||||
次のコードは、ペイロードを含む悪いトレイル名のログエントリを生成します:
|
||||
```python
|
||||
import boto3
|
||||
payload = "=cmd|'/C calc'|''"
|
||||
@@ -148,21 +148,21 @@ https://book.hacktricks.wiki/en/pentesting-web/formula-csv-doc-latex-ghostscript
|
||||
|
||||
### HoneyTokens **回避**
|
||||
|
||||
Honeytokensは**機密情報の流出を検出するために作成されます**。AWSの場合、これらは**使用が監視されるAWSキー**です。そのキーでアクションがトリガーされると、誰かがそのキーを盗んだことになります。
|
||||
Honeytokensは**機密情報の流出を検出するために作成されます**。AWSの場合、これらは**使用が監視されるAWSキー**です。そのキーでアクションがトリガーされると、誰かがそのキーを盗んだ可能性があります。
|
||||
|
||||
しかし、[**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)によって作成されたHoneytokensは、認識可能なアカウント名を使用するか、すべての顧客に対して同じAWSアカウントIDを使用しています。したがって、Cloudtrailにログを作成させることなくアカウント名やアカウントIDを取得できれば、**そのキーがHoneytokenかどうかを知ることができます**。
|
||||
|
||||
[**Pacu**](https://github.com/RhinoSecurityLabs/pacu/blob/79cd7d58f7bff5693c6ae73b30a8455df6136cca/pacu/modules/iam__detect_honeytokens/main.py#L57)には、キーが[**Canarytokens**](https://canarytokens.org/generate)**、** [**SpaceCrab**](https://bitbucket.org/asecurityteam/spacecrab/issues?status=new&status=open)**、** [**SpaceSiren**](https://github.com/spacesiren/spacesiren)**に属するかどうかを検出するためのいくつかのルールがあります:**
|
||||
|
||||
- **`canarytokens.org`**がロール名に表示される場合、またはエラーメッセージにアカウントID **`534261010715`**が表示される場合。
|
||||
- **`canarytokens.org`**がロール名に表示されるか、エラーメッセージにアカウントID **`534261010715`**が表示される場合。
|
||||
- 最近テストしたところ、彼らはアカウント**`717712589309`**を使用しており、名前に**`canarytokens.com`**の文字列がまだ含まれています。
|
||||
- エラーメッセージのロール名に**`SpaceCrab`**が表示される場合。
|
||||
- エラーメッセージにロール名に**`SpaceCrab`**が表示される場合。
|
||||
- **SpaceSiren**はユーザー名を生成するために**uuids**を使用します:`[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}`
|
||||
- **名前がランダムに生成されたように見える場合**、それはHoneyTokenである可能性が高いです。
|
||||
|
||||
#### キーIDからアカウントIDを取得する
|
||||
|
||||
**アクセスキー**内の**エンコードされた**情報から**アカウントID**を取得でき、[**ここで説明されているように**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489)そのアカウントIDをHoneytokens AWSアカウントのリストと照合できます:
|
||||
**アクセスキー**内に**エンコードされた**アカウントIDを取得することができ、[**ここで説明されているように**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489)そのアカウントIDをHoneytokens AWSアカウントのリストと照合してください:
|
||||
```python
|
||||
import base64
|
||||
import binascii
|
||||
@@ -181,34 +181,34 @@ return (e)
|
||||
|
||||
print("account id:" + "{:012d}".format(AWSAccount_from_AWSKeyID("ASIAQNZGKIQY56JQ7WML")))
|
||||
```
|
||||
[**元の研究**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489)で詳細情報を確認してください。
|
||||
Check more information in the [**orginal research**](https://medium.com/@TalBeerySec/a-short-note-on-aws-key-id-f88cc4317489).
|
||||
|
||||
#### ログを生成しない
|
||||
|
||||
このための最も効果的な手法は実際にはシンプルです。見つけたキーを使用して、自分の攻撃者アカウント内のサービスにアクセスします。これにより、**CloudTrailはあなた自身のAWSアカウント内にログを生成し、被害者のアカウント内には生成しません**。
|
||||
最も効果的な技術は実際にはシンプルなものです。見つけたキーを使用して、自分の攻撃者アカウント内のサービスにアクセスします。これにより、**CloudTrailはあなた自身のAWSアカウント内にログを生成し、被害者のアカウント内には生成しません**。
|
||||
|
||||
問題は、出力にアカウントIDとアカウント名を示すエラーが表示されるため、**それがハニートークンであるかどうかを確認できることです**。
|
||||
出力には、アカウントIDとアカウント名を示すエラーが表示されるため、**それがHoneytokenであるかどうかを確認できます**。
|
||||
|
||||
#### ログなしのAWSサービス
|
||||
|
||||
過去には、**CloudTrailにログを送信しないAWSサービスがいくつかありました**([こちらにリストがあります](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html))。これらのサービスのいくつかは、無許可の者(ハニートークンキー)がアクセスしようとすると、**キー役割のARNを含む**エラーで**応答**します。
|
||||
過去には、**CloudTrailにログを送信しないAWSサービスがいくつかありました**(ここに[リストを見つけてください](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-unsupported-aws-services.html))。これらのサービスのいくつかは、無許可の者(ハニートークンキー)がアクセスしようとすると、**キー役割のARNを含む**エラーで**応答**します。
|
||||
|
||||
この方法で、**攻撃者はログをトリガーすることなくキーのARNを取得できます**。ARNには**AWSアカウントIDと名前**が表示されるため、ハニートークンの企業アカウントIDと名前を知るのは簡単です。このようにして、攻撃者はトークンがハニートークンであるかどうかを特定できます。
|
||||
この方法で、**攻撃者はログをトリガーすることなくキーのARNを取得できます**。ARNには**AWSアカウントIDと名前**が表示されるため、HoneyTokenの企業アカウントIDと名前を知るのは簡単で、攻撃者はトークンがHoneyTokenであるかどうかを特定できます。
|
||||
|
||||
.png>)
|
||||
|
||||
> [!CAUTION]
|
||||
> CloudTrailログを生成しないことが発見されたすべての公開APIは現在修正されているため、自分で見つける必要があるかもしれません...
|
||||
> CloudTrailログを生成しないことが発見されたすべての公開APIは現在修正されているため、独自に見つける必要があるかもしれません...
|
||||
>
|
||||
> 詳細情報は[**元の研究**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/)を確認してください。
|
||||
> 詳細については、[**original research**](https://rhinosecuritylabs.com/aws/aws-iam-enumeration-2-0-bypassing-cloudtrail-logging/)を確認してください。
|
||||
|
||||
### 第三者インフラへのアクセス
|
||||
|
||||
特定のAWSサービスは、**データベース**や**Kubernetes**クラスター(EKS)などの**インフラを生成します**。ユーザーがこれらのサービス(Kubernetes APIなど)に**直接話しかける**場合、**AWS APIを使用しないため**、CloudTrailはこの通信を確認できません。
|
||||
特定のAWSサービスは、**データベース**や**Kubernetes**クラスター(EKS)などの**インフラを生成します**。ユーザーがこれらのサービス(Kubernetes APIなど)に直接話しかける場合、**AWS APIを使用しないため**、CloudTrailはこの通信を確認できません。
|
||||
|
||||
したがって、EKSにアクセスできるユーザーがEKS APIのURLを発見した場合、ローカルでトークンを生成し、**CloudTrailに検出されることなくAPIサービスに直接話しかけることができます**。
|
||||
したがって、EKSにアクセスできるユーザーがEKS APIのURLを発見した場合、ローカルでトークンを生成し、**Cloudtrailに検出されることなくAPIサービスに直接話しかけることができます**。
|
||||
|
||||
詳細情報は以下にあります:
|
||||
詳細は以下を参照してください:
|
||||
|
||||
{{#ref}}
|
||||
../../aws-post-exploitation/aws-eks-post-exploitation.md
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
## CloudWatch
|
||||
|
||||
**CloudWatch** は、ログ/メトリクス/イベントの形で監視および運用 **データ** を収集し、**AWSリソース**、アプリケーション、サービスの **統一ビュー** を提供します。\
|
||||
CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** があります。\
|
||||
CloudWatch Log Event には **各ログ行のサイズ制限が256KB** あります。\
|
||||
高解像度アラームを設定し、**ログ** と **メトリクス** を並べて視覚化し、自動化されたアクションを実行し、問題をトラブルシュートし、アプリケーションを最適化するための洞察を発見できます。
|
||||
|
||||
例えば、CloudTrail のログを監視できます。監視されるイベント:
|
||||
@@ -21,33 +21,33 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** があ
|
||||
|
||||
### Namespaces
|
||||
|
||||
名前空間は、CloudWatch メトリクスのコンテナです。メトリクスを分類および分離するのに役立ち、管理および分析を容易にします。
|
||||
Namespace は CloudWatch メトリクスのコンテナです。メトリクスを分類および分離するのに役立ち、管理および分析が容易になります。
|
||||
|
||||
- **例**: EC2 関連メトリクスのための AWS/EC2、RDS メトリクスのための AWS/RDS。
|
||||
|
||||
### Metrics
|
||||
|
||||
メトリクスは、時間の経過とともに収集されたデータポイントで、AWS リソースのパフォーマンスまたは利用状況を表します。メトリクスは、AWS サービス、カスタムアプリケーション、またはサードパーティの統合から収集できます。
|
||||
メトリクスは、AWS リソースのパフォーマンスまたは利用状況を表す時間経過に伴って収集されたデータポイントです。メトリクスは、AWS サービス、カスタムアプリケーション、またはサードパーティの統合から収集できます。
|
||||
|
||||
- **例**: CPUUtilization、NetworkIn、DiskReadOps。
|
||||
|
||||
### Dimensions
|
||||
|
||||
ディメンションは、メトリクスの一部であるキーと値のペアです。メトリクスを一意に識別し、追加のコンテキストを提供するのに役立ち、メトリクスに関連付けられるディメンションの最大数は 30 です。ディメンションは、特定の属性に基づいてメトリクスをフィルタリングおよび集約することも可能です。
|
||||
Dimensions はメトリクスの一部であるキーと値のペアです。メトリクスを一意に識別し、追加のコンテキストを提供するのに役立ち、メトリクスに関連付けられる最大の次元数は 30 です。Dimensions は、特定の属性に基づいてメトリクスをフィルタリングおよび集約することも可能です。
|
||||
|
||||
- **例**: EC2 インスタンスの場合、ディメンションには InstanceId、InstanceType、AvailabilityZone が含まれる場合があります。
|
||||
- **例**: EC2 インスタンスの場合、Dimensions には InstanceId、InstanceType、AvailabilityZone が含まれる場合があります。
|
||||
|
||||
### Statistics
|
||||
|
||||
統計は、メトリクスデータに対して行われる数学的計算で、時間の経過に伴う要約を提供します。一般的な統計には、平均、合計、最小、最大、サンプル数が含まれます。
|
||||
Statistics は、メトリクスデータに対して行われる数学的計算で、時間経過に伴って要約します。一般的な統計には、平均、合計、最小、最大、サンプル数が含まれます。
|
||||
|
||||
- **例**: 1 時間の間の平均 CPU 利用率を計算する。
|
||||
|
||||
### Units
|
||||
|
||||
単位は、メトリクスに関連付けられた測定タイプです。単位は、メトリクスデータにコンテキストと意味を提供するのに役立ちます。一般的な単位には、パーセント、バイト、秒、カウントが含まれます。
|
||||
Units はメトリクスに関連付けられた測定タイプです。Units はメトリクスデータにコンテキストと意味を提供するのに役立ちます。一般的な単位には、パーセント、バイト、秒、カウントが含まれます。
|
||||
|
||||
- **例**: CPUUtilization はパーセントで測定される場合がありますが、NetworkIn はバイトで測定される場合があります。
|
||||
- **例**: CPUUtilization はパーセントで測定される場合があり、NetworkIn はバイトで測定される場合があります。
|
||||
|
||||
## CloudWatch Features
|
||||
|
||||
@@ -57,7 +57,7 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** があ
|
||||
|
||||
**主な機能**:
|
||||
|
||||
- **ウィジェット**: グラフ、テキスト、アラームなど、ダッシュボードの構成要素。
|
||||
- **ウィジェット**: グラフ、テキスト、アラームなど、ダッシュボードのビルディングブロック。
|
||||
- **カスタマイズ**: レイアウトとコンテンツは、特定の監視ニーズに合わせてカスタマイズできます。
|
||||
|
||||
**例の使用ケース**:
|
||||
@@ -66,29 +66,29 @@ CloudWatch Log Event には、**各ログ行のサイズ制限が256KB** があ
|
||||
|
||||
### Metric Stream and Metric Data
|
||||
|
||||
AWS CloudWatch の **Metric Streams** は、CloudWatch メトリクスを選択した宛先にほぼリアルタイムで継続的にストリーミングすることを可能にします。これは、AWS の外部ツールを使用した高度な監視、分析、およびカスタムダッシュボードに特に便利です。
|
||||
**Metric Streams** は、AWS CloudWatch で CloudWatch メトリクスを選択した宛先にほぼリアルタイムで継続的にストリーミングすることを可能にします。これは、AWS の外部ツールを使用した高度な監視、分析、およびカスタムダッシュボードに特に便利です。
|
||||
|
||||
**Metric Data** は、Metric Streams 内の実際の測定値またはデータポイントを指します。これらのデータポイントは、AWS リソースの CPU 利用率、メモリ使用量など、さまざまなメトリクスを表します。
|
||||
**Metric Data** は、Metric Streams 内でストリーミングされている実際の測定値またはデータポイントを指します。これらのデータポイントは、AWS リソースの CPU 利用率、メモリ使用量など、さまざまなメトリクスを表します。
|
||||
|
||||
**例の使用ケース**:
|
||||
|
||||
- 高度な分析のために、リアルタイムメトリクスをサードパーティの監視サービスに送信する。
|
||||
- 長期保存とコンプライアンスのために、Amazon S3 バケットにメトリクスをアーカイブする。
|
||||
- 長期保存およびコンプライアンスのために、Amazon S3 バケットにメトリクスをアーカイブする。
|
||||
|
||||
### Alarm
|
||||
|
||||
**CloudWatch Alarms** は、メトリクスを監視し、事前に定義された閾値に基づいてアクションを実行します。メトリクスが閾値を超えると、アラームは SNS 経由で通知を送信したり、オートスケーリングポリシーをトリガーしたり、AWS Lambda 関数を実行したりするなど、1 つ以上のアクションを実行できます。
|
||||
**CloudWatch Alarms** は、メトリクスを監視し、事前に定義された閾値に基づいてアクションを実行します。メトリクスが閾値を超えた場合、アラームは SNS 経由で通知を送信したり、オートスケーリングポリシーをトリガーしたり、AWS Lambda 関数を実行したりするなど、1 つ以上のアクションを実行できます。
|
||||
|
||||
**主なコンポーネント**:
|
||||
|
||||
- **閾値**: アラームがトリガーされる値。
|
||||
- **評価期間**: データが評価される期間の数。
|
||||
- **アラームに必要なデータポイント**: アラームをトリガーするために必要な閾値に達した期間の数。
|
||||
- **アラームのためのデータポイント**: アラームをトリガーするために必要な閾値に達した期間の数。
|
||||
- **アクション**: アラーム状態がトリガーされたときに何が起こるか(例:SNS 経由で通知)。
|
||||
|
||||
**例の使用ケース**:
|
||||
|
||||
- EC2 インスタンスの CPU 利用率を監視し、5 分間 80% を超えた場合に SNS 経由で通知を送信する。
|
||||
- EC2 インスタンスの CPU 利用率を監視し、5 分間連続して 80% を超えた場合に SNS 経由で通知を送信する。
|
||||
|
||||
### Anomaly Detectors
|
||||
|
||||
@@ -105,37 +105,37 @@ AWS CloudWatch の **Metric Streams** は、CloudWatch メトリクスを選択
|
||||
|
||||
### Insight Rules and Managed Insight Rules
|
||||
|
||||
**Insight Rules** は、**強力な数学的表現**を使用してメトリクスデータ内のトレンド、スパイク、またはその他の興味深いパターンを特定することを可能にします。これらのルールは、リソースのパフォーマンスと利用状況における異常や異常な動作を特定するのに役立ちます。
|
||||
**Insight Rules** は、**強力な数学的表現** を使用してメトリクスデータ内のトレンド、スパイク、またはその他の興味深いパターンを特定することを可能にします。これらのルールは、リソースのパフォーマンスと利用状況における異常や異常な動作を特定するのに役立ちます。
|
||||
|
||||
**Managed Insight Rules** は、AWS によって提供される事前構成された **インサイトルール** です。特定の AWS サービスや一般的な使用ケースを監視するように設計されており、詳細な構成なしで有効にできます。
|
||||
|
||||
**例の使用ケース**:
|
||||
|
||||
- RDS パフォーマンスの監視: CPU 利用率、メモリ使用量、ディスク I/O などの主要なパフォーマンス指標を監視する Amazon RDS の管理インサイトルールを有効にします。これらのメトリクスのいずれかが安全な運用閾値を超えた場合、ルールはアラートまたは自動緩和アクションをトリガーできます。
|
||||
- RDS パフォーマンスの監視: CPU 利用率、メモリ使用量、ディスク I/O などの主要なパフォーマンス指標を監視する Amazon RDS のための管理されたインサイトルールを有効にします。これらのメトリクスのいずれかが安全な運用閾値を超えた場合、ルールはアラートまたは自動緩和アクションをトリガーできます。
|
||||
|
||||
### CloudWatch Logs <a href="#cloudwatch-logs" id="cloudwatch-logs"></a>
|
||||
|
||||
アプリケーションやシステムからの **ログを集約および監視** することを可能にします。**AWSサービス**(CloudTrail を含む)および **アプリ/システム** からのログ(**CloudWatch Agent** をホストにインストールできます)。ログは **無期限に保存** でき(ロググループの設定に依存)、エクスポートできます。
|
||||
アプリケーションおよびシステムからの **ログを集約および監視** することを可能にし、**AWSサービス**(CloudTrail を含む)および **アプリ/システム** からのログを集約します(**CloudWatch Agent** をホストにインストールできます)。ログは **無期限に保存** でき(ロググループの設定に依存)、エクスポートできます。
|
||||
|
||||
**要素**:
|
||||
| 用語 | 定義 |
|
||||
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| **ロググループ** | 同じ保持、監視、およびアクセス制御設定を共有する **ログストリームのコレクション** |
|
||||
| **ログストリーム** | **同じソース**を共有する **ログイベントのシーケンス** |
|
||||
| **ログストリーム** | **同じソース** を共有する **ログイベントのシーケンス** |
|
||||
| **サブスクリプションフィルター** | 特定のロググループ内のイベントに一致する **フィルターパターンを定義し**、それらを Kinesis Data Firehose ストリーム、Kinesis ストリーム、または Lambda 関数に送信します。 |
|
||||
|
||||
### CloudWatch Monitoring & Events
|
||||
|
||||
CloudWatch の **基本** は、データを **5 分ごとに集約** します(**詳細** は **1 分ごとに** 行います)。集約後、アラームの閾値を **チェック** し、トリガーが必要かどうかを確認します。\
|
||||
その場合、CloudWatch はイベントを送信し、自動アクション(AWS Lambda 関数、SNS トピック、SQS キュー、Kinesis ストリーム)を実行する準備ができます。
|
||||
CloudWatch の **基本** は、データを **5 分ごとに集約** します(**詳細** は **1 分ごとに集約** します)。集約後、アラームの閾値を **チェック** し、トリガーする必要があるかどうかを確認します。\
|
||||
その場合、CloudWatch はイベントを送信し、自動アクションを実行する準備ができます(AWS Lambda 関数、SNS トピック、SQS キュー、Kinesis ストリーム)。
|
||||
|
||||
### Agent Installation
|
||||
|
||||
マシン/コンテナ内にエージェントをインストールして、ログを自動的に CloudWatch に送信できます。
|
||||
|
||||
- **ロールを作成**し、**インスタンスに添付**して、CloudWatch がインスタンスからデータを収集し、AWS Systems Manager SSM と対話できるようにする権限を付与します(CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM)。
|
||||
- **エージェントをダウンロード**し、**EC2 インスタンスにインストール**します ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip))。EC2 内からダウンロードするか、AWS Systems Manager を使用して自動的にインストールすることができます。パッケージ AWS-ConfigureAWSPackage を選択します。
|
||||
- **CloudWatch Agent を構成**し、**起動**します。
|
||||
- **ロールを作成** し、CloudWatch がインスタンスからデータを収集できるようにするための権限を持つ **インスタンスにアタッチ** します(CloudWatchAgentAdminPolicy & AmazonEC2RoleforSSM)。
|
||||
- **エージェントをダウンロード** し、EC2 インスタンスに **インストール** します ([https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip](https://s3.amazonaws.com/amazoncloudwatch-agent/linux/amd64/latest/AmazonCloudWatchAgent.zip))。EC2 内からダウンロードするか、AWS Systems Manager を使用して自動的にインストールできます。AWS-ConfigureAWSPackage パッケージを選択します。
|
||||
- **CloudWatch Agent を構成** し、**開始** します。
|
||||
|
||||
ロググループには多くのストリームがあります。ストリームには多くのイベントがあります。そして、各ストリーム内のイベントは順序が保証されています。
|
||||
|
||||
@@ -216,18 +216,18 @@ aws events list-event-buses
|
||||
|
||||
### **`cloudwatch:DeleteAlarms`,`cloudwatch:PutMetricAlarm` , `cloudwatch:PutCompositeAlarm`**
|
||||
|
||||
この権限を持つ攻撃者は、組織の監視およびアラートインフラストラクチャを大幅に損なう可能性があります。既存のアラームを削除することで、攻撃者は管理者に重要なパフォーマンスの問題、セキュリティ侵害、または運用の失敗を通知する重要なアラートを無効にすることができます。さらに、メトリックアラームを作成または変更することで、攻撃者は誤ったアラートで管理者を誤導したり、正当なアラームを無効にしたりすることができ、悪意のある活動を隠蔽し、実際のインシデントに対する迅速な対応を妨げることができます。
|
||||
この権限を持つ攻撃者は、組織の監視およびアラートインフラストラクチャを大きく損なう可能性があります。既存のアラームを削除することで、攻撃者は管理者に重要なパフォーマンスの問題、セキュリティ侵害、または運用の失敗を通知する重要なアラートを無効にすることができます。さらに、メトリックアラームを作成または変更することで、攻撃者は誤ったアラートで管理者を誤導したり、正当なアラームを無効にしたりすることができ、悪意のある活動を隠蔽し、実際のインシデントに対する迅速な対応を妨げることができます。
|
||||
|
||||
さらに、**`cloudwatch:PutCompositeAlarm`** 権限を持つ攻撃者は、複合アラームAが複合アラームBに依存し、複合アラームBも複合アラームAに依存するような複合アラームのループまたはサイクルを作成することができます。このシナリオでは、サイクルの一部である複合アラームを削除することは不可能です。なぜなら、削除したいアラームに依存する複合アラームが常に存在するからです。
|
||||
さらに、**`cloudwatch:PutCompositeAlarm`** 権限を持つ攻撃者は、合成アラームAが合成アラームBに依存し、合成アラームBも合成アラームAに依存する合成アラームのループまたはサイクルを作成することができます。このシナリオでは、サイクルの一部である合成アラームを削除することは不可能です。なぜなら、削除したいアラームに依存する合成アラームが常に存在するからです。
|
||||
```bash
|
||||
aws cloudwatch put-metric-alarm --cli-input-json <value> | --alarm-name <value> --comparison-operator <value> --evaluation-periods <value> [--datapoints-to-alarm <value>] [--threshold <value>] [--alarm-description <value>] [--alarm-actions <value>] [--metric-name <value>] [--namespace <value>] [--statistic <value>] [--dimensions <value>] [--period <value>]
|
||||
aws cloudwatch delete-alarms --alarm-names <value>
|
||||
aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--no-actions-enabled | --actions-enabled [--alarm-actions <value>] [--insufficient-data-actions <value>] [--ok-actions <value>] ]
|
||||
```
|
||||
次の例は、メトリックアラームを無効にする方法を示しています:
|
||||
以下の例は、メトリックアラームを無効にする方法を示しています:
|
||||
|
||||
- このメトリックアラームは、特定のEC2インスタンスの平均CPU使用率を監視し、300秒ごとにメトリックを評価し、6つの評価期間(合計30分)を必要とします。平均CPU使用率がこれらの期間のうち少なくとも4つで60%を超えると、アラームがトリガーされ、指定されたSNSトピックに通知が送信されます。
|
||||
- 閾値を99%を超えるように変更し、期間を10秒に設定し、評価期間を8640(8640期間の10秒は1日に相当)に設定し、アラームのデータポイントも8640に設定すると、アラームをトリガーするには、CPU使用率が24時間全体で10秒ごとに99%を超える必要があります。
|
||||
- 閾値を99%を超えるように変更し、期間を10秒に設定し、評価期間を8640に設定すると(8640期間の10秒は1日になります)、アラームをトリガーするには、CPU使用率が24時間全体で10秒ごとに99%を超える必要があります。
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="Original Metric Alarm" }}
|
||||
@@ -285,7 +285,7 @@ aws cloudwatch put-composite-alarm --alarm-name <value> --alarm-rule <value> [--
|
||||
|
||||
アラームアクションを削除することで、攻撃者はアラーム状態に達したときに管理者への通知や自動スケーリング活動のトリガーなど、重要な警告や自動応答が発動するのを防ぐことができます。不適切にアラームアクションを有効化または再有効化することも、以前に無効化されたアクションを再活性化したり、どのアクションがトリガーされるかを変更したりすることで、予期しない動作を引き起こし、インシデント対応において混乱や誤方向を招く可能性があります。
|
||||
|
||||
さらに、権限を持つ攻撃者はアラーム状態を操作し、管理者を気を散らせたり混乱させたりするために偽のアラームを作成したり、進行中の悪意のある活動や重大なシステム障害を隠すために正当なアラームを無効にしたりすることができます。
|
||||
さらに、権限を持つ攻撃者はアラーム状態を操作し、管理者を混乱させるために偽のアラームを作成したり、進行中の悪意のある活動や重大なシステム障害を隠すために正当なアラームを無効にしたりすることができます。
|
||||
|
||||
- **`SetAlarmState`** をコンポジットアラームで使用すると、コンポジットアラームが実際の状態に戻ることは保証されません。子アラームのいずれかが状態を変更したときにのみ、実際の状態に戻ります。また、設定を更新すると再評価されます。
|
||||
```bash
|
||||
@@ -293,11 +293,11 @@ aws cloudwatch disable-alarm-actions --alarm-names <value>
|
||||
aws cloudwatch enable-alarm-actions --alarm-names <value>
|
||||
aws cloudwatch set-alarm-state --alarm-name <value> --state-value <OK | ALARM | INSUFFICIENT_DATA> --state-reason <value> [--state-reason-data <value>]
|
||||
```
|
||||
**潜在的な影響**: 重要なイベントに対する通知の欠如、潜在的な未検出の問題、誤警報、正当な警報の抑制、そして実際のインシデントの検出を見逃す可能性。
|
||||
**潜在的な影響**: 重要なイベントに対する通知の欠如、潜在的な未検出の問題、偽のアラート、正当なアラートの抑制、実際のインシデントの検出の見逃しの可能性。
|
||||
|
||||
### **`cloudwatch:DeleteAnomalyDetector`, `cloudwatch:PutAnomalyDetector`**
|
||||
|
||||
攻撃者は、メトリックデータの異常パターンや異常を検出し、対応する能力を妨害することができます。既存の異常検出器を削除することで、攻撃者は重要なアラート機構を無効にすることができ、作成または変更することで、監視を混乱させたり圧倒させたりするために誤設定や誤検知を引き起こすことができます。
|
||||
攻撃者は、メトリックデータの異常パターンや異常を検出し、対応する能力を妨害することができます。既存の異常検出器を削除することで、攻撃者は重要なアラート機構を無効にし、作成または変更することで、監視を混乱させたり圧倒させたりするために、誤設定や偽のポジティブを作成することができます。
|
||||
```bash
|
||||
aws cloudwatch delete-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value>]
|
||||
aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <value> --metric-name <value> --dimensions <value> --stat <value> --configuration <value> --metric-characteristics <value>]
|
||||
@@ -355,7 +355,7 @@ aws cloudwatch put-anomaly-detector [--cli-input-json <value> | --namespace <val
|
||||
|
||||
### **`cloudwatch:DeleteDashboards`, `cloudwatch:PutDashboard`**
|
||||
|
||||
攻撃者は、ダッシュボードを作成、変更、または削除することによって、組織の監視および視覚化機能を妨害することができます。この権限は、システムのパフォーマンスと健康に関する重要な可視性を削除したり、ダッシュボードを変更して不正確なデータを表示させたり、悪意のある活動を隠すために利用される可能性があります。
|
||||
攻撃者は、ダッシュボードを作成、変更、または削除することで、組織の監視および視覚化機能を妨害することができます。この権限は、システムのパフォーマンスと健康に関する重要な可視性を削除したり、ダッシュボードを変更して不正確なデータを表示させたり、悪意のある活動を隠すために利用される可能性があります。
|
||||
```bash
|
||||
aws cloudwatch delete-dashboards --dashboard-names <value>
|
||||
aws cloudwatch put-dashboard --dashboard-name <value> --dashboard-body <value>
|
||||
@@ -370,7 +370,7 @@ aws cloudwatch delete-insight-rules --rule-names <value>
|
||||
aws cloudwatch put-insight-rule --rule-name <value> --rule-definition <value> [--rule-state <value>]
|
||||
aws cloudwatch put-managed-insight-rules --managed-rules <value>
|
||||
```
|
||||
**潜在的な影響**: パフォーマンスの問題や異常を検出し対応するのが難しくなり、誤った意思決定を引き起こし、悪意のある活動やシステムの障害を隠す可能性があります。
|
||||
**潜在的影響**: パフォーマンスの問題や異常を検出し対応するのが難しくなり、誤った意思決定を引き起こし、悪意のある活動やシステムの障害を隠す可能性があります。
|
||||
|
||||
### **`cloudwatch:DisableInsightRules`, `cloudwatch:EnableInsightRules`**
|
||||
|
||||
@@ -385,8 +385,8 @@ aws cloudwatch enable-insight-rules --rule-names <value>
|
||||
|
||||
**`cloudwatch:DeleteMetricStream`** 、**`cloudwatch:PutMetricStream`** の権限を持つ攻撃者は、メトリックデータストリームを作成および削除でき、セキュリティ、監視、データの整合性が損なわれる可能性があります:
|
||||
|
||||
- **悪意のあるストリームの作成**: 機密データを不正な宛先に送信するメトリックストリームを作成する。
|
||||
- **リソースの操作**: 過剰なデータを持つ新しいメトリックストリームの作成は、多くのノイズを生じさせ、誤ったアラートを引き起こし、真の問題を隠す可能性があります。
|
||||
- **悪意のあるストリームの作成**: メトリックストリームを作成して、機密データを不正な宛先に送信する。
|
||||
- **リソース操作**: 過剰なデータを持つ新しいメトリックストリームの作成は、多くのノイズを生み出し、誤ったアラートを引き起こし、真の問題を隠す可能性があります。
|
||||
- **監視の中断**: メトリックストリームを削除することで、攻撃者は監視データの継続的な流れを妨害します。このようにして、彼らの悪意のある活動は効果的に隠されます。
|
||||
|
||||
同様に、**`cloudwatch:PutMetricData`** の権限を持つことで、メトリックストリームにデータを追加することが可能になります。これにより、不適切なデータの量が原因でDoSが発生し、完全に無用になる可能性があります。
|
||||
@@ -399,16 +399,16 @@ EC2インスタンスのCPU使用率が70%に相当するデータを追加す
|
||||
```bash
|
||||
aws cloudwatch put-metric-data --namespace "AWS/EC2" --metric-name "CPUUtilization" --value 70 --unit "Percent" --dimensions "InstanceId=i-0123456789abcdefg"
|
||||
```
|
||||
**潜在的な影響**: 監視データの流れの中断により、異常やインシデントの検出、リソースの操作、過剰なメトリックストリームの作成によるコストの増加に影響を与える。
|
||||
**潜在的影響**: 監視データの流れの中断、異常やインシデントの検出への影響、リソースの操作および過剰なメトリックストリームの作成によるコストの増加。
|
||||
|
||||
### **`cloudwatch:StopMetricStreams`, `cloudwatch:StartMetricStreams`**
|
||||
|
||||
攻撃者は、影響を受けたメトリックデータストリームの流れを制御します(リソース制限がない場合はすべてのデータストリーム)。権限 **`cloudwatch:StopMetricStreams`** を使用することで、攻撃者は重要なメトリックストリームを停止することにより、自らの悪意のある活動を隠すことができます。
|
||||
攻撃者は、影響を受けたメトリックデータストリームの流れを制御します(リソース制限がない場合はすべてのデータストリーム)。権限 **`cloudwatch:StopMetricStreams`** を使用することで、攻撃者は重要なメトリックストリームを停止させることにより、自らの悪意のある活動を隠すことができます。
|
||||
```bash
|
||||
aws cloudwatch stop-metric-streams --names <value>
|
||||
aws cloudwatch start-metric-streams --names <value>
|
||||
```
|
||||
**潜在的な影響**: 監視データの流れの中断により、異常やインシデントの検出に影響を与える可能性があります。
|
||||
**潜在的な影響**: 監視データの流れが中断され、異常やインシデントの検出に影響を与える。
|
||||
|
||||
### **`cloudwatch:TagResource`, `cloudwatch:UntagResource`**
|
||||
|
||||
|
||||
@@ -26,7 +26,7 @@ az storage blob download \
|
||||
```
|
||||
### `Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write`
|
||||
|
||||
この権限を持つプリンシパルは、**コンテナ内のファイルを書き込みおよび上書きする**ことができ、これにより損害を引き起こしたり、特権を昇格させたりする可能性があります(例:ブロブに保存されているコードを上書きする)。
|
||||
この権限を持つプリンシパルは、**コンテナ内のファイルを書き込み、上書きする**ことができ、これにより損害を引き起こしたり、特権を昇格させたりする可能性があります(例:ブロブに保存されているコードを上書きする)。
|
||||
```bash
|
||||
# e.g. Microsoft.Storage/storageAccounts/blobServices/containers/blobs/write
|
||||
az storage blob upload \
|
||||
|
||||
@@ -11,7 +11,7 @@ SQL データベースに関する詳細情報は、以下を確認してくだ
|
||||
|
||||
|
||||
### `Microsoft.DocumentDB/databaseAccounts/read` && `Microsoft.DocumentDB/databaseAccounts/write`
|
||||
この権限を持つことで、Azure Cosmos DB アカウントを作成または更新できます。これには、アカウントレベルの設定の変更、リージョンの追加または削除、一貫性レベルの変更、マルチリージョン書き込みなどの機能の有効化または無効化が含まれます。
|
||||
この権限を持つことで、Azure Cosmos DB アカウントを作成または更新できます。これには、アカウントレベルの設定の変更、リージョンの追加または削除、一貫性レベルの変更、マルチリージョン書き込みのような機能の有効化または無効化が含まれます。
|
||||
```bash
|
||||
az cosmosdb update \
|
||||
--name <account_name> \
|
||||
@@ -79,7 +79,7 @@ az cosmosdb sql trigger create \
|
||||
--operation All
|
||||
```
|
||||
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/storedProcedures/read`
|
||||
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内でストアドプロシージャを作成または変更できます。Cosmos DB のストアドプロシージャは、データを処理したり、データベース内で直接操作を実行するためのロジックをカプセル化するサーバーサイドの JavaScript 関数です。
|
||||
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内にストアドプロシージャを作成または変更できます。Cosmos DB のストアドプロシージャは、データを処理したり、データベース内で直接操作を実行するためのロジックをカプセル化するサーバーサイドの JavaScript 関数です。
|
||||
```bash
|
||||
az cosmosdb sql stored-procedure create \
|
||||
--account-name <account_name> \
|
||||
@@ -90,7 +90,7 @@ az cosmosdb sql stored-procedure create \
|
||||
--body 'function sample() { return "Hello, Cosmos!"; }'
|
||||
```
|
||||
### `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/write` && `Microsoft.DocumentDB/databaseAccounts/sqlDatabases/containers/triggers/read`
|
||||
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内でトリガーを作成または変更できます。トリガーは、挿入、更新、または削除などの操作に応じてサーバー側のロジックを実行することを可能にします。
|
||||
この権限を持つことで、Azure Cosmos DB アカウント内の SQL データベースのコンテナ内でトリガーを作成または変更できます。トリガーは、挿入、更新、削除などの操作に応じてサーバー側のロジックを実行することを可能にします。
|
||||
```bash
|
||||
az cosmosdb sql trigger create \
|
||||
--account-name <account_name> \
|
||||
@@ -112,7 +112,7 @@ az cosmosdb mongodb collection create \
|
||||
--name <collection_name>
|
||||
```
|
||||
### `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbDatabases/read`
|
||||
この権限を持つことで、Azure Cosmos DB アカウント内に新しい MongoDB データベースを作成できます。これにより、コレクションやドキュメントを保存および管理するための新しいデータベースをプロビジョニングできます。
|
||||
この権限を使用すると、Azure Cosmos DB アカウント内に新しい MongoDB データベースを作成できます。これにより、コレクションやドキュメントを保存および管理するための新しいデータベースをプロビジョニングできます。
|
||||
```bash
|
||||
az cosmosdb mongodb database create \
|
||||
--account-name <account_name> \
|
||||
@@ -120,7 +120,7 @@ az cosmosdb mongodb database create \
|
||||
--name <database_name>
|
||||
```
|
||||
### `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbRoleDefinitions/read`
|
||||
この権限を使用すると、Azure Cosmos DB アカウント内に新しい MongoDB ロール定義を作成できます。これにより、MongoDB ユーザーのために特定の権限を持つカスタムロールを定義できます。
|
||||
この権限を持つことで、Azure Cosmos DB アカウント内に新しい MongoDB ロール定義を作成できます。これにより、MongoDB ユーザーのために特定の権限を持つカスタムロールを定義できます。
|
||||
```bash
|
||||
az cosmosdb mongodb role definition create \
|
||||
--account-name <account_name> \
|
||||
@@ -147,7 +147,7 @@ az cosmosdb mongodb role definition create \
|
||||
}'
|
||||
```
|
||||
### `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/write` && `Microsoft.DocumentDB/databaseAccounts/mongodbUserDefinitions/read`
|
||||
この権限を持つことで、Azure Cosmos DB アカウント内に新しい MongoDB ユーザー定義を作成できます。これにより、MongoDB データベースへの特定の役割とアクセスレベルを持つユーザーのプロビジョニングが可能になります。
|
||||
この権限を使用すると、Azure Cosmos DB アカウント内に新しい MongoDB ユーザー定義を作成できます。これにより、特定の役割とアクセスレベルを持つユーザーを MongoDB データベースにプロビジョニングできます。
|
||||
```bash
|
||||
az cosmosdb mongodb user definition create \
|
||||
--account-name <account_name> \
|
||||
|
||||
@@ -10,7 +10,7 @@ Logic Appsに関する詳細情報は、以下を参照してください:
|
||||
{{#endref}}
|
||||
|
||||
### `Microsoft.Logic/workflows/read`, `Microsoft.Logic/workflows/write` && `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`
|
||||
これらの権限を使用すると、Logic Appのワークフローを変更し、そのアイデンティティを管理できます。具体的には、システム割り当ておよびユーザー割り当てのマネージドアイデンティティをワークフローに割り当てたり、削除したりすることができ、これによりLogic Appは明示的な資格情報なしで他のAzureリソースに認証し、アクセスすることができます。
|
||||
これらの権限を持つことで、Logic Appのワークフローを変更し、そのアイデンティティを管理できます。具体的には、システム割り当ておよびユーザー割り当てのマネージドアイデンティティをワークフローに割り当てたり、削除したりすることができ、これによりLogic Appは明示的な資格情報なしで他のAzureリソースに認証しアクセスすることができます。
|
||||
```bash
|
||||
az logic workflow identity remove/assign \
|
||||
--name <workflow_name> \
|
||||
@@ -35,7 +35,7 @@ az webapp start/stop/restart \
|
||||
```
|
||||
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/read` && `Microsoft.Web/sites/config/write`
|
||||
|
||||
この権限を持つことで、App Service Plan上でホストされているLogic Appsを含むWebアプリの設定を構成または変更できます。これにより、アプリ設定、接続文字列、認証設定などの変更が可能になります。
|
||||
この権限を持つことで、App Service Plan上でホストされているLogic Appsを含むWebアプリの設定を構成または変更できます。これにより、アプリ設定、接続文字列、認証構成などの変更が可能になります。
|
||||
```bash
|
||||
az logicapp config appsettings set \
|
||||
--name <logic_app_name> \
|
||||
@@ -43,7 +43,7 @@ az logicapp config appsettings set \
|
||||
--settings "<key>=<value>"
|
||||
```
|
||||
### `Microsoft.Logic/integrationAccounts/write`
|
||||
この権限を使用すると、Azure Logic Appsの統合アカウントを作成、更新、または削除できます。これには、マップ、スキーマ、パートナー、合意などの統合アカウントレベルの構成の管理が含まれます。
|
||||
この権限を使用すると、Azure Logic Apps 統合アカウントを作成、更新、または削除できます。これには、マップ、スキーマ、パートナー、契約などの統合アカウントレベルの構成の管理が含まれます。
|
||||
```bash
|
||||
az logic integration-account create \
|
||||
--resource-group <resource_group_name> \
|
||||
@@ -66,7 +66,7 @@ az logic integration-account batch-configuration create \
|
||||
}'
|
||||
```
|
||||
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/maps/write`
|
||||
この権限を持つことで、Azure Logic Apps インテグレーション アカウント内でマップを作成または変更できます。マップは、データをある形式から別の形式に変換するために使用され、異なるシステムやアプリケーション間のシームレスな統合を可能にします。
|
||||
この権限を持つことで、Azure Logic Apps 統合アカウント内のマップを作成または変更できます。マップは、異なるシステムやアプリケーション間でのシームレスな統合を可能にするために、データをある形式から別の形式に変換するために使用されます。
|
||||
```bash
|
||||
az logic integration-account map create \
|
||||
--resource-group <resource_group_name> \
|
||||
@@ -77,7 +77,7 @@ az logic integration-account map create \
|
||||
--map-content map-content.xslt
|
||||
```
|
||||
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/partners/write`
|
||||
この権限を持つことで、Azure Logic Apps 統合アカウント内のパートナーを作成または変更できます。パートナーは、ビジネス間 (B2B) ワークフローに参加するエンティティまたはシステムを表します。
|
||||
この権限を使用すると、Azure Logic Apps 統合アカウント内のパートナーを作成または変更できます。パートナーは、ビジネス間 (B2B) ワークフローに参加するエンティティまたはシステムを表します。
|
||||
```bash
|
||||
az logic integration-account partner create \
|
||||
--resource-group <resource_group_name> \
|
||||
@@ -96,7 +96,7 @@ az logic integration-account partner create \
|
||||
}'
|
||||
```
|
||||
### `Microsoft.Resources/subscriptions/resourcegroups/read` && `Microsoft.Logic/integrationAccounts/sessions/write`
|
||||
この権限を持つことで、Azure Logic Appsの統合アカウント内でセッションを作成または変更できます。セッションはB2Bワークフローでメッセージをグループ化し、定義された期間にわたる関連する取引を追跡するために使用されます。
|
||||
この権限を持つことで、Azure Logic Apps インテグレーション アカウント内でセッションを作成または変更できます。セッションは、B2B ワークフローでメッセージをグループ化し、定義された期間にわたる関連トランザクションを追跡するために使用されます。
|
||||
```bash
|
||||
az logic integration-account session create \
|
||||
--resource-group <resource_group_name> \
|
||||
|
||||
@@ -11,7 +11,7 @@ MySQL データベースに関する詳細情報は以下を確認してくだ
|
||||
|
||||
### `Microsoft.DBforMySQL/flexibleServers/databases/write` && `Microsoft.DBforMySQL/flexibleServers/databases/read`
|
||||
|
||||
この権限を持つことで、Azure の MySQL フレキシブルサーバーインスタンス内に新しいデータベースを作成できます。このアクション自体は既存のリソースを変更しませんが、過剰または不正なデータベースの作成はリソースの消費やサーバーの悪用につながる可能性があります。
|
||||
この権限を持つことで、Azure の MySQL フレキシブル サーバ インスタンス内に新しいデータベースを作成できます。このアクション自体は既存のリソースを変更しませんが、過剰または不正なデータベースの作成はリソースの消費やサーバの悪用につながる可能性があります。
|
||||
```bash
|
||||
az mysql flexible-server db create \
|
||||
--server-name <server_name> \
|
||||
@@ -20,7 +20,7 @@ az mysql flexible-server db create \
|
||||
```
|
||||
### `Microsoft.DBforMySQL/flexibleServers/backups/write`
|
||||
|
||||
この権限を持つことで、Azure上のMySQL Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保持するために、オンデマンドバックアップを生成することができます。
|
||||
この権限を持つことで、Azure上のMySQL Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保存するためにオンデマンドバックアップを生成することができます。
|
||||
```bash
|
||||
az mysql flexible-server backup create \
|
||||
--name <server_name> \
|
||||
@@ -29,7 +29,7 @@ az mysql flexible-server backup create \
|
||||
```
|
||||
### `Microsoft.DBforMySQL/flexibleServers/advancedThreatProtectionSettings/write`
|
||||
|
||||
この権限を使用すると、Azure上のMySQL Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し対応するために設計されたセキュリティ機能を有効または無効にすることができます。
|
||||
この権限を使用すると、Azure上のMySQL Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し、対応するために設計されたセキュリティ機能を有効または無効にすることができます。
|
||||
```bash
|
||||
az mysql flexible-server threat-protection-policy update \
|
||||
--name <server_name> \
|
||||
@@ -67,7 +67,7 @@ az mysql flexible-server reset-gtid \
|
||||
```
|
||||
### `Microsoft.DBforMySQL/flexibleServers/updateConfigurations/action`
|
||||
|
||||
この権限を使用すると、Azure上のMySQL Flexible Serverインスタンスの設定を更新できます。これにより、パフォーマンス調整、セキュリティ設定、または運用設定などのサーバーパラメータをカスタマイズできます。次のパラメータを一括で更新できます: audit_log_enabled, audit_log_events, binlog_expire_logs_seconds, binlog_row_image, character_set_server, collation_server, connect_timeout, enforce_gtid_consistency, gtid_mode, init_connect, innodb_buffer_pool_size, innodb_io_capacity, innodb_io_capacity_max, innodb_purge_threads, innodb_read_io_threads, innodb_thread_concurrency, innodb_write_io_threads, long_query_time, max_connect_errors, および max_connections。
|
||||
この権限を使用すると、Azure上のMySQL Flexible Serverインスタンスの設定を更新できます。これにより、パフォーマンス調整、セキュリティ設定、または運用設定などのサーバーパラメータをカスタマイズできます。次のパラメータをバッチで一緒に更新できます: audit_log_enabled, audit_log_events, binlog_expire_logs_seconds, binlog_row_image, character_set_server, collation_server, connect_timeout, enforce_gtid_consistency, gtid_mode, init_connect, innodb_buffer_pool_size, innodb_io_capacity, innodb_io_capacity_max, innodb_purge_threads, innodb_read_io_threads, innodb_thread_concurrency, innodb_write_io_threads, long_query_time, max_connect_errors, および max_connections。
|
||||
```bash
|
||||
az mysql flexible-server parameter set-batch \
|
||||
--resource-group <resource_group_name> \
|
||||
|
||||
@@ -20,7 +20,7 @@ az postgres flexible-server db create \
|
||||
```
|
||||
### `Microsoft.DBforPostgreSQL/flexibleServers/backups/write`
|
||||
|
||||
この権限を持つことで、Azure上のPostgres Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保存するためにオンデマンドバックアップを生成することができます。
|
||||
この権限を持つことで、Azure上のPostgres Flexible Serverインスタンスのバックアップ作成を開始できます。これにより、ユーザーは特定の時点でのデータを保持するために、オンデマンドバックアップを生成することができます。
|
||||
```bash
|
||||
az postgres flexible-server backup create \
|
||||
--name <server_name> \
|
||||
@@ -29,7 +29,7 @@ az postgres flexible-server backup create \
|
||||
```
|
||||
### `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/write` && `Microsoft.DBforPostgreSQL/flexibleServers/advancedThreatProtectionSettings/read`
|
||||
|
||||
この権限を使用すると、Azure上のPostgres Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し、対応するために設計されたセキュリティ機能を有効または無効にすることができます。
|
||||
この権限を使用すると、Azure上のPostgres Flexible ServerインスタンスのAdvanced Threat Protection (ATP)設定を構成または更新できます。これにより、異常な活動や潜在的な脅威を検出し対応するために設計されたセキュリティ機能を有効または無効にすることができます。
|
||||
```bash
|
||||
az postgres flexible-server threat-protection-policy update \
|
||||
--name <server_name> \
|
||||
|
||||
@@ -12,7 +12,7 @@ SQL Databaseに関する詳細情報は、以下を確認してください:
|
||||
|
||||
### `Microsoft.Sql/servers/databases/read`, `Microsoft.Sql/servers/read` && `Microsoft.Sql/servers/databases/write`
|
||||
|
||||
これらの権限を持つ攻撃者は、侵害された環境内でデータベースを作成および更新できます。このポストエクスプロイト活動により、攻撃者は悪意のあるデータを追加したり、データベースの設定を変更したり、さらなる持続性のためにバックドアを挿入したりすることができ、操作を妨害したり、追加の悪意のある行動を可能にしたりする可能性があります。
|
||||
これらの権限を持つ攻撃者は、侵害された環境内でデータベースを作成および更新することができます。このポストエクスプロイト活動により、攻撃者は悪意のあるデータを追加したり、データベースの設定を変更したり、さらなる持続性のためにバックドアを挿入したりすることができ、操作を妨害したり、追加の悪意のある行動を可能にしたりする可能性があります。
|
||||
```bash
|
||||
# Create Database
|
||||
az sql db create --resource-group <resource-group> --server <server-name> --name <new-database-name>
|
||||
@@ -42,7 +42,7 @@ az sql elastic-pool update \
|
||||
```
|
||||
### `Microsoft.Sql/servers/auditingSettings/read` && `Microsoft.Sql/servers/auditingSettings/write`
|
||||
|
||||
この権限を持つことで、Azure SQL Serverの監査設定を変更または有効にすることができます。これにより、攻撃者や認可されたユーザーが監査構成を操作し、足跡を隠したり、監査ログを自分の管理下にある場所にリダイレクトしたりする可能性があります。これにより、セキュリティ監視が妨げられたり、行動を追跡することができなくなったりする可能性があります。注意: Blob Storageを使用してAzure SQL Serverの監査を有効にするには、監査ログを保存できるストレージアカウントを添付する必要があります。
|
||||
この権限を持つことで、Azure SQL Serverの監査設定を変更または有効にすることができます。これにより、攻撃者や認可されたユーザーが監査構成を操作し、足跡を隠したり、監査ログを自分の管理下にある場所にリダイレクトしたりする可能性があります。これにより、セキュリティ監視が妨げられたり、行動を追跡することができなくなったりする可能性があります。注意:Blob Storageを使用してAzure SQL Serverの監査を有効にするには、監査ログを保存できるストレージアカウントを添付する必要があります。
|
||||
```bash
|
||||
az sql server audit-policy update \
|
||||
--server <server_name> \
|
||||
@@ -53,7 +53,7 @@ az sql server audit-policy update \
|
||||
```
|
||||
### `Microsoft.Sql/locations/connectionPoliciesAzureAsyncOperation/read`, `Microsoft.Sql/servers/connectionPolicies/read` && `Microsoft.Sql/servers/connectionPolicies/write`
|
||||
|
||||
この権限を使用すると、Azure SQL Serverの接続ポリシーを変更できます。この機能は、サーバーレベルの接続設定を有効にしたり変更したりするために悪用できます。
|
||||
この権限を持つことで、Azure SQL Serverの接続ポリシーを変更できます。この機能は、サーバーレベルの接続設定を有効にしたり変更したりするために悪用される可能性があります。
|
||||
```bash
|
||||
az sql server connection-policy update \
|
||||
--server <server_name> \
|
||||
@@ -62,7 +62,7 @@ az sql server connection-policy update \
|
||||
```
|
||||
### `Microsoft.Sql/servers/databases/export/action`
|
||||
|
||||
この権限を持つことで、Azure SQL Serverからストレージアカウントにデータベースをエクスポートできます。この権限を持つ攻撃者または認可されたユーザーは、データベースから敏感なデータをエクスポートして自分が管理する場所に移すことで、重大なデータ漏洩のリスクを引き起こす可能性があります。これを実行するには、ストレージキーを知っておくことが重要です。
|
||||
この権限を持つことで、Azure SQL Serverからストレージアカウントにデータベースをエクスポートできます。この権限を持つ攻撃者または認可されたユーザーは、データベースから敏感なデータをエクスポートして自分が制御する場所に持ち出すことができ、重大なデータ漏洩のリスクを引き起こします。これを実行するにはストレージキーを知っておくことが重要です。
|
||||
```bash
|
||||
az sql db export \
|
||||
--server <server_name> \
|
||||
@@ -76,7 +76,7 @@ az sql db export \
|
||||
```
|
||||
### `Microsoft.Sql/servers/databases/import/action`
|
||||
|
||||
この権限を持つことで、Azure SQL Serverにデータベースをインポートできます。この権限を持つ攻撃者または認可されたユーザーは、悪意のあるまたは操作されたデータベースをアップロードする可能性があります。これにより、機密データの制御を獲得したり、インポートされたデータベース内に有害なスクリプトやトリガーを埋め込んだりすることができます。さらに、Azure内の自分のサーバーにインポートすることもできます。注意: サーバーは、Azureサービスおよびリソースがサーバーにアクセスすることを許可する必要があります。
|
||||
この権限を持つことで、Azure SQL Serverにデータベースをインポートできます。この権限を持つ攻撃者または認可されたユーザーは、悪意のあるまたは操作されたデータベースをアップロードする可能性があります。これにより、機密データの制御を獲得したり、インポートされたデータベース内に有害なスクリプトやトリガーを埋め込んだりすることができます。さらに、Azure内の自分のサーバーにインポートすることもできます。注意: サーバーは、Azureサービスとリソースがサーバーにアクセスすることを許可する必要があります。
|
||||
```bash
|
||||
az sql db import --admin-user <admin-user> \
|
||||
--admin-password <admin-password> \
|
||||
|
||||
@@ -14,11 +14,11 @@
|
||||
|
||||
関数データを保存するストレージアカウント内のコンテナを読み取る権限があれば、**異なるコンテナ**(カスタムまたは事前定義された名前のもの)を見つけることができ、**関数によって実行されるコード**が含まれている可能性があります。
|
||||
|
||||
関数のコードがどこにあるかを見つけたら、書き込み権限があれば、関数に任意のコードを実行させ、関数に付随する管理されたアイデンティティの特権を昇格させることができます。
|
||||
関数のコードがどこにあるかを見つけたら、それに対する書き込み権限があれば、関数に任意のコードを実行させ、関数に付随する管理されたアイデンティティの権限を昇格させることができます。
|
||||
|
||||
- **`File Share`** (`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING` と `WEBSITE_CONTENTSHARE`)
|
||||
|
||||
関数のコードは通常、ファイル共有内に保存されます。十分なアクセス権があれば、コードファイルを変更して**関数に任意のコードを読み込ませる**ことができ、関数に付随する管理されたアイデンティティの特権を昇格させることができます。
|
||||
関数のコードは通常、ファイル共有内に保存されます。十分なアクセス権があれば、コードファイルを変更して**関数に任意のコードを読み込ませる**ことができ、関数に付随する管理されたアイデンティティの権限を昇格させることができます。
|
||||
|
||||
このデプロイメント方法は通常、**`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** と **`WEBSITE_CONTENTSHARE`** の設定を構成します。これらは次のように取得できます。
|
||||
```bash
|
||||
@@ -31,7 +31,7 @@ az functionapp config appsettings list \
|
||||
> [!CAUTION]
|
||||
> ファイル共有に接続して**スクリプトを変更する**のに十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
|
||||
|
||||
以下の例ではmacOSを使用してファイル共有に接続しますが、ファイル共有に関する詳細情報については、以下のページも確認することをお勧めします:
|
||||
以下の例ではmacOSを使用してファイル共有に接続しますが、ファイル共有に関する詳細情報については、次のページも確認することをお勧めします:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-file-shares.md
|
||||
@@ -49,7 +49,7 @@ open "smb://<STORAGE-ACCOUNT>.file.core.windows.net/<FILE-SHARE-NAME>"
|
||||
|
||||
関数アプリが使用しているストレージアカウントコンテナのフォルダ `function-releases` 内に **zipリリース** が見つかることも一般的です。このコンテナは **通常 `function-releases` と呼ばれます**。
|
||||
|
||||
通常、このデプロイメント方法は次の場所で `WEBSITE_RUN_FROM_PACKAGE` 設定を行います:
|
||||
通常、このデプロイメント方法は次の場所に `WEBSITE_RUN_FROM_PACKAGE` 設定を行います:
|
||||
```bash
|
||||
az functionapp config appsettings list \
|
||||
--name <app-name> \
|
||||
@@ -66,7 +66,7 @@ az functionapp config appsettings list \
|
||||
|
||||
- **`scm-releases`**`(WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`および`WEBSITE_CONTENTSHARE`)
|
||||
|
||||
関数データを保存するストレージアカウント内のコンテナを読み取る権限があれば、**`scm-releases`**コンテナを見つけることができます。そこには**Squashfsファイルシステムファイル形式**の最新リリースがあり、したがって関数のコードを読むことが可能です。
|
||||
ストレージアカウント内の関数データを格納するコンテナを読み取る権限があれば、**`scm-releases`**コンテナを見つけることができます。そこには**Squashfsファイルシステムファイル形式**の最新リリースがあり、したがって関数のコードを読むことが可能です。
|
||||
```bash
|
||||
# List containers inside the storage account of the function app
|
||||
az storage container list \
|
||||
@@ -101,7 +101,7 @@ unsquashfs -d /tmp/fs /tmp/scm-latest-<app-name>.zip
|
||||
**マスターおよび関数キー**は、JSONファイルの中にある**`<app-name>`**フォルダー内のコンテナ**`azure-webjobs-secrets`**に保存されていることもあります。
|
||||
|
||||
> [!CAUTION]
|
||||
> **zip拡張子のファイル**(実際には**`squashfs`**)にコードが含まれているBlobコンテナに接続するための十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
|
||||
> **zip拡張子のファイル**(実際には**`squashfs`**)にコードが含まれているブロブコンテナに接続するための十分な権限があれば、Function内で任意のコードを実行し、特権を昇格させることが可能です。
|
||||
```bash
|
||||
# Modify code inside the script in /tmp/fs adding your code
|
||||
|
||||
@@ -183,9 +183,9 @@ az rest --method POST \
|
||||
```
|
||||
### `Microsoft.Web/sites/config/list/action`, `Microsoft.Web/sites/config/write`
|
||||
|
||||
これらの権限は、以前に見たように関数の設定値をリストすることに加えて、**これらの値を変更する**ことを可能にします。これは、これらの設定が関数内で実行されるコードの場所を示すため、便利です。
|
||||
これらの権限は、以前に見たように関数の設定値をリストすることを許可し、さらに**これらの値を変更する**ことを許可します。これは、これらの設定が関数内で実行するコードの場所を示すため、便利です。
|
||||
|
||||
したがって、**`WEBSITE_RUN_FROM_PACKAGE`** 設定の値を、新しいコードを含むURL zipファイルを指すように設定することが可能です:
|
||||
したがって、ウェブアプリケーション内で実行する新しいコードを含むURL zipファイルを指す設定の値**`WEBSITE_RUN_FROM_PACKAGE`**を設定することが可能です:
|
||||
|
||||
- 現在の設定を取得することから始めます。
|
||||
```bash
|
||||
@@ -215,7 +215,7 @@ az rest --method PUT \
|
||||
```
|
||||
### `Microsoft.Web/sites/hostruntime/vfs/write`
|
||||
|
||||
この権限を持つと、**ウェブコンソールを通じてアプリケーションのコードを変更することが可能です**(または次のAPIエンドポイントを通じて):
|
||||
この権限を持つことで、**ウェブコンソールを通じてアプリケーションのコードを変更することが可能です**(または次のAPIエンドポイントを通じて):
|
||||
```bash
|
||||
# This is a python example, so we will be overwritting function_app.py
|
||||
# Store in /tmp/body the raw python code to put in the function
|
||||
@@ -352,20 +352,20 @@ az functionapp identity assign \
|
||||
```
|
||||
### リモートデバッグ
|
||||
|
||||
実行中のAzure関数に接続してデバッグすることも可能です、[**ドキュメントで説明されているように**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs)。ただし、デフォルトでは、開発者が脆弱な構成を残さないように忘れた場合、Azureはこのオプションを2日後にオフにします。
|
||||
実行中の Azure 関数に接続してデバッグすることも可能です、[**ドキュメントで説明されているように**](https://learn.microsoft.com/en-us/azure/azure-functions/functions-develop-vs)。ただし、デフォルトでは、開発者が脆弱な構成を残さないように忘れた場合に備えて、Azure はこのオプションを 2 日後にオフにします。
|
||||
|
||||
デバッグが有効になっているかどうかを確認するには、次のコマンドを使用します:
|
||||
```bash
|
||||
az functionapp show --name <app-name> --resource-group <res-group>
|
||||
```
|
||||
`Microsoft.Web/sites/config/write` の権限を持っている場合、関数をデバッグモードに設定することも可能です(次のコマンドは `Microsoft.Web/sites/config/list/action`、`Microsoft.Web/sites/config/Read` および `Microsoft.Web/sites/Read` の権限も必要です)。
|
||||
`Microsoft.Web/sites/config/write` の権限を持っている場合、関数をデバッグモードに設定することも可能です(次のコマンドは、`Microsoft.Web/sites/config/list/action`、`Microsoft.Web/sites/config/Read`、および `Microsoft.Web/sites/Read` の権限も必要です)。
|
||||
```bash
|
||||
az functionapp config set --remote-debugging-enabled=True --name <app-name> --resource-group <res-group>
|
||||
```
|
||||
### Change Github repo
|
||||
|
||||
Githubリポジトリを変更するために、以下のコマンドを実行しましたが、変更されたとしても、**新しいコードは読み込まれませんでした**(おそらくGithub Actionがコードを更新することを期待しているためです)。\
|
||||
さらに、**マネージドIDのフェデレーテッドクレデンシャルが更新されていなかった**ため、新しいリポジトリを許可していないようです。したがって、これはあまり役に立たないようです。
|
||||
さらに、**マネージドIDのフェデレーテッドクレデンシャルが新しいリポジトリを許可するように更新されていませんでした**ので、あまり役に立たないようです。
|
||||
```bash
|
||||
# Remove current
|
||||
az functionapp deployment source delete \
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
|
||||
### `Microsoft.KeyVault/vaults/write`
|
||||
|
||||
この権限を持つ攻撃者は、キー ボールトのポリシーを変更することができます(キー ボールトは RBAC の代わりにアクセス ポリシーを使用している必要があります)。
|
||||
この権限を持つ攻撃者は、キー ボールトのポリシーを変更することができます(キー ボールトはRBACの代わりにアクセス ポリシーを使用している必要があります)。
|
||||
```bash
|
||||
# If access policies in the output, then you can abuse it
|
||||
az keyvault show --name <vault-name>
|
||||
@@ -29,4 +29,14 @@ az keyvault set-policy \
|
||||
--certificate-permissions all \
|
||||
--storage-permissions all
|
||||
```
|
||||
### ネットワーク制限の変更
|
||||
|
||||
機密データ(秘密の値など)にアクセスするのに十分な権限があるかもしれませんが、キー バルブが特定のネットワークに制限されているため、アクセスできない場合があります。ネットワーク制限を変更する権限がある場合は、自分のIPを許可されたIPのリストに追加できます。
|
||||
```bash
|
||||
# Get the current network restrictions
|
||||
az keyvault network-rule list --name <vault-name>
|
||||
|
||||
# Add your IP to the list
|
||||
az keyvault network-rule add --name <vault-name> --ip-address <your-ip>
|
||||
```
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## Logic Apps Privesc
|
||||
SQL Databaseに関する詳細情報は次を確認してください:
|
||||
SQL Databaseに関する詳細情報は、以下を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-logic-apps.md
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
## MySQLデータベースの特権昇格
|
||||
SQLデータベースに関する詳細情報は次を確認してください:
|
||||
SQLデータベースに関する詳細情報は以下を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-mysql.md
|
||||
@@ -11,7 +11,7 @@ SQLデータベースに関する詳細情報は次を確認してください:
|
||||
|
||||
### `Microsoft.DBforMySQL/flexibleServers/read` && `Microsoft.DBforMySQL/flexibleServers/write`
|
||||
|
||||
この権限を持つことで、Azure上でMySQL Flexible Serverインスタンスを作成、更新、または削除できます。これには、新しいサーバーのプロビジョニング、既存のサーバー構成の変更、またはサーバーの廃止が含まれます。
|
||||
この権限を持つことで、Azure上でMySQL Flexible Serverインスタンスを作成、更新、または削除できます。これには新しいサーバーのプロビジョニング、既存のサーバー構成の変更、またはサーバーの廃止が含まれます。
|
||||
```bash
|
||||
az mysql flexible-server create \
|
||||
--name <ServerName> \
|
||||
@@ -31,13 +31,13 @@ az mysql flexible-server update \
|
||||
--name <server_name> \
|
||||
--admin-password <password_to_update>
|
||||
```
|
||||
さらに、プライベートエンドポイント以外からアクセスする場合は、パブリックアクセスを有効にする必要があります。有効にするには:
|
||||
さらに、プライベートエンドポイント以外からアクセスする場合は、パブリックアクセスを有効にする必要があります。有効にするには:
|
||||
```bash
|
||||
az mysql flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
|
||||
```
|
||||
### `Microsoft.DBforMySQL/flexibleServers/read`, `Microsoft.DBforMySQL/flexibleServers/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action`, `Microsoft.DBforMySQL/flexibleServers/administrators/write` && `Microsoft.DBforMySQL/flexibleServers/administrators/read`
|
||||
|
||||
この権限を持つことで、MySQL Flexible ServerのAzure Active Directory (AD) 管理者を構成できます。これは、自分自身または他のアカウントをAD管理者として設定することで悪用でき、MySQLサーバーに対する完全な管理権限を付与します。フレキシブルサーバーには、使用するためにユーザー割り当てのマネージドアイデンティティが必要です。
|
||||
この権限を使用すると、MySQL Flexible ServerのAzure Active Directory (AD) 管理者を構成できます。これは、自分自身または他のアカウントをAD管理者として設定することで悪用でき、MySQLサーバーに対する完全な管理権限を付与します。フレキシブルサーバーには、使用するためにユーザー割り当てのマネージドアイデンティティが必要です。
|
||||
```bash
|
||||
az mysql flexible-server ad-admin create \
|
||||
--resource-group <ResourceGroupName> \
|
||||
|
||||
@@ -24,14 +24,14 @@ az postgres flexible-server create \
|
||||
--tier <PricingTier> \
|
||||
--version <PostgreSQLVersion>
|
||||
```
|
||||
例えば、これらの権限はPostgreSQLのパスワードを変更することを許可します。これは、もちろんPostgreSQL認証が有効な場合に役立ちます。
|
||||
例えば、これらの権限はPostgreSQLのパスワードを変更することを許可します。これは、もちろんPostgreSQL認証が有効な場合に便利です。
|
||||
```bash
|
||||
az postgres flexible-server update \
|
||||
--resource-group <resource_group_name> \
|
||||
--name <server_name> \
|
||||
--admin-password <password_to_update>
|
||||
```
|
||||
パブリックアクセスを有効にする必要があります。非プライベートエンドポイントからアクセスしたい場合は、これを有効にするには:
|
||||
パブリックアクセスを有効にする必要があります。プライベートエンドポイント以外からアクセスしたい場合は、これを有効にするには:
|
||||
```bash
|
||||
az postgres flexible-server update --resource-group <resource_group_name> --server-name <server_name> --public-access Enabled
|
||||
```
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Service Bus
|
||||
|
||||
詳細については、次を確認してください:
|
||||
詳細については、次を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../az-services/az-servicebus-enum.md
|
||||
|
||||
@@ -28,7 +28,7 @@ az sql server create \
|
||||
--admin-user <admin_username> \
|
||||
--admin-password <admin_password>
|
||||
```
|
||||
パブリックアクセスを有効にする必要があります。プライベートエンドポイント以外からアクセスしたい場合は、これを有効にするには:
|
||||
パブリックアクセスを有効にする必要があります。非プライベートエンドポイントからアクセスする場合は、これを有効にするには:
|
||||
```bash
|
||||
az sql server update \
|
||||
--name <server-name> \
|
||||
@@ -74,7 +74,7 @@ az sql server firewall-rule create \
|
||||
|
||||
### `Microsoft.Sql/servers/administrators/write` && `Microsoft.Sql/servers/administrators/read`
|
||||
|
||||
この権限を使用すると、Azure SQL Server 環境で SQL データベースにアクセスし、重要な情報を取得することができます。以下のコマンドを使用することで、攻撃者または認可されたユーザーは、自分自身または別のアカウントを Azure AD 管理者として設定できます。「Microsoft Entra Authentication Only」が有効になっている場合、サーバーとそのインスタンスにアクセスできます。SQL サーバーの Azure AD 管理者を設定するためのコマンドは次のとおりです:
|
||||
これらの権限を使用すると、Azure SQL Server 環境で SQL データベースにアクセスし、重要な情報を取得することができます。以下のコマンドを使用することで、攻撃者または認可されたユーザーは、自分自身または別のアカウントを Azure AD 管理者として設定できます。「Microsoft Entra Authentication Only」が有効になっている場合、サーバーとそのインスタンスにアクセスできます。SQL サーバーの Azure AD 管理者を設定するためのコマンドは次のとおりです:
|
||||
```bash
|
||||
az sql server ad-admin create \
|
||||
--server <server_name> \
|
||||
|
||||
@@ -18,7 +18,7 @@ az storage account keys list --account-name <acc-name>
|
||||
```
|
||||
### `Microsoft.Storage/storageAccounts/regenerateKey/action`
|
||||
|
||||
この権限を持つプリンシパルは、ストレージアカウントの**アクセスキー**の新しい秘密値を更新および取得できるようになります。これにより、プリンシパルはストレージアカウントに対する権限を昇格させることができます。
|
||||
この権限を持つプリンシパルは、ストレージアカウントの**アクセスキー**の新しい秘密値を更新および取得することができます。これにより、プリンシパルはストレージアカウントに対する権限を昇格させることができます。
|
||||
|
||||
さらに、レスポンスには更新されたキーの値と更新されていないキーの値も含まれます:
|
||||
```bash
|
||||
@@ -26,7 +26,7 @@ az storage account keys renew --account-name <acc-name> --key key2
|
||||
```
|
||||
### `Microsoft.Storage/storageAccounts/write`
|
||||
|
||||
この権限を持つプリンシパルは、既存のストレージアカウントを作成または更新し、ネットワークルールやポリシーなどの設定を更新することができます。
|
||||
この権限を持つプリンシパルは、ネットワークルールやポリシーなどの設定を更新して、既存のストレージアカウントを作成または更新することができます。
|
||||
```bash
|
||||
# e.g. set default action to allow so network restrictions are avoided
|
||||
az storage account update --name <acc-name> --default-action Allow
|
||||
@@ -41,7 +41,7 @@ az storage account update --name <acc-name> --add networkRuleSet.ipRules value=<
|
||||
最初の権限はコンテナ内の**不変ポリシーを変更する**ことを許可し、2番目はそれらを削除することを許可します。
|
||||
|
||||
> [!NOTE]
|
||||
> 不変ポリシーがロック状態にある場合、どちらも実行できないことに注意してください。
|
||||
> 不変ポリシーがロック状態にある場合、どちらの操作も行えないことに注意してください。
|
||||
```bash
|
||||
az storage container immutability-policy delete \
|
||||
--account-name <STORAGE_ACCOUNT_NAME> \
|
||||
@@ -112,7 +112,7 @@ az storage blob undelete \
|
||||
```
|
||||
### `Microsoft.Storage/storageAccounts/fileServices/shares/restore/action` && `Microsoft.Storage/storageAccounts/read`
|
||||
|
||||
これらの権限を持つ攻撃者は、削除されたバージョンIDを指定することで削除されたAzureファイル共有を復元できます。この特権の昇格により、攻撃者は永続的に削除される予定だった機密データを回復できる可能性があり、無許可のアクセスにつながる可能性があります。
|
||||
これらの権限を持つ攻撃者は、削除されたバージョンIDを指定することで削除されたAzureファイル共有を復元できます。この特権の昇格により、攻撃者は永久に削除される予定だった機密データを回復できる可能性があり、無許可のアクセスにつながる可能性があります。
|
||||
```bash
|
||||
az storage share-rm restore \
|
||||
--storage-account <STORAGE_ACCOUNT_NAME> \
|
||||
|
||||
@@ -186,7 +186,7 @@ Connect-AzureAD -AccountId test@corp.onmicrosoft.com -AadAccessToken $token
|
||||
|
||||
Azureに**CLI**を介してログインするとき、あなたは**Microsoft**に属する**テナント**からの**Azureアプリケーション**を使用しています。これらのアプリケーションは、あなたのアカウントで作成できるものと同様に、**クライアントID**を持っています。**コンソールで見ることができる許可されたアプリケーションのリスト**にはすべて表示されませんが、**デフォルトで許可されています**。
|
||||
|
||||
例えば、**認証**を行う**PowerShellスクリプト**は、クライアントID **`1950a258-227b-4e31-a9cf-717495945fc2`**を持つアプリを使用します。アプリがコンソールに表示されなくても、システム管理者は**そのアプリケーションをブロック**して、ユーザーがそのアプリを介して接続できないようにすることができます。
|
||||
例えば、**認証**を行う**PowerShellスクリプト**は、クライアントID**`1950a258-227b-4e31-a9cf-717495945fc2`**を持つアプリを使用します。アプリがコンソールに表示されなくても、システム管理者は**そのアプリケーションをブロック**して、ユーザーがそのアプリを介して接続できないようにすることができます。
|
||||
|
||||
しかし、**Azureに接続を許可する他のクライアントID**のアプリケーションもあります:
|
||||
```bash
|
||||
@@ -601,7 +601,7 @@ Get-AzureADServicePrincipal -ObjectId <id> | Get-AzureADServicePrincipalMembersh
|
||||
|
||||
<details>
|
||||
|
||||
<summary>各エンタープライズアプリにクライアントシークレットをリストして追加しようとする</summary>
|
||||
<summary>各エンタープライズアプリにクライアントシークレットを追加しようとするリスト</summary>
|
||||
```bash
|
||||
# Just call Add-AzADAppSecret
|
||||
Function Add-AzADAppSecret
|
||||
@@ -796,11 +796,11 @@ Get-AzureADApplication -ObjectId <id> | Get-AzureADApplicationOwner |fl *
|
||||
> 詳細については [**こちらを確認してください**](https://posts.specterops.io/azure-privilege-escalation-via-azure-api-permissions-abuse-74aee1006f48)。
|
||||
|
||||
> [!NOTE]
|
||||
> アプリケーションがトークンを要求する際にそのアイデンティティを証明するために使用する秘密の文字列は、アプリケーションパスワードです。\
|
||||
> アプリケーションがトークンを要求する際にそのアイデンティティを証明するために使用する秘密の文字列はアプリケーションパスワードです。\
|
||||
> したがって、この **パスワード** を見つけると、**テナント** 内の **サービスプリンシパル** としてアクセスできます。\
|
||||
> このパスワードは生成時にのみ表示されることに注意してください(変更することはできますが、再取得することはできません)。\
|
||||
> **アプリケーション** の **所有者** は、(彼がそれを偽装できるように)**パスワード** を追加できます。\
|
||||
> これらのサービスプリンシパルとしてのログインは **リスクあり** としてマークされず、**MFA** はありません。
|
||||
> **アプリケーション** の **所有者** はそれに **パスワード** を **追加** できます(そのため、彼はそれを偽装できます)。\
|
||||
> これらのサービスプリンシパルとしてのログインは **リスクあり** として **マークされず**、**MFA** は **ありません**。
|
||||
|
||||
一般的に使用される Microsoft のアプリ ID のリストは [https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications](https://learn.microsoft.com/en-us/troubleshoot/entra/entra-id/governance/verify-first-party-apps-sign-in#application-ids-of-commonly-used-microsoft-applications) で見つけることができます。
|
||||
|
||||
@@ -824,7 +824,7 @@ az identity list --output table
|
||||
|
||||
### Azure Roles
|
||||
|
||||
Azureロールに関する詳細情報は、以下を確認してください:
|
||||
Azure ロールに関する詳細情報は、以下を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -1033,11 +1033,11 @@ Get-AzureADMSAdministrativeUnit | where { Get-AzureADMSAdministrativeUnitMember
|
||||
|
||||
> [!WARNING]
|
||||
> デバイス (VM) が **AzureAD に参加している** 場合、AzureAD のユーザーは **ログインできる** ようになります。\
|
||||
> さらに、ログインしているユーザーがデバイスの **オーナー** である場合、彼は **ローカル管理者** になります。
|
||||
> さらに、ログインしているユーザーがデバイスの **所有者** である場合、彼は **ローカル管理者** になります。
|
||||
|
||||
### 管理単位
|
||||
|
||||
管理単位に関する詳細情報は、以下を確認してください:
|
||||
管理単位に関する詳細情報は、以下を確認してください:
|
||||
|
||||
{{#ref}}
|
||||
../az-basic-information/
|
||||
@@ -1088,16 +1088,16 @@ Get-AzureADMSScopedRoleMembership -Id <id> | fl #Get role ID and role members
|
||||
|
||||
### 特権アイデンティティ管理 (PIM)
|
||||
|
||||
Azure の特権アイデンティティ管理 (PIM) は、**不必要にユーザーに過剰な特権が割り当てられるのを防ぐ**のに役立ちます。
|
||||
Azure の特権アイデンティティ管理 (PIM) は、**不必要にユーザーに過剰な特権が付与されるのを防ぐ**のに役立ちます。
|
||||
|
||||
PIM が提供する主な機能の一つは、常にアクティブなプリンシパルに役割を割り当てるのではなく、**一定の期間(例:6ヶ月)資格を与える**ことができる点です。ユーザーがその役割をアクティブにしたい場合、必要な特権の時間(例:3時間)を示してリクエストを行う必要があります。その後、**管理者が**リクエストを承認する必要があります。\
|
||||
PIM が提供する主な機能の一つは、常にアクティブなプリンシパルにロールを割り当てるのではなく、**一定の期間(例:6ヶ月)資格を与える**ことができる点です。ユーザーがそのロールをアクティブにしたい場合、必要な特権の時間(例:3時間)を示してリクエストを行う必要があります。その後、**管理者が**リクエストを承認する必要があります。\
|
||||
ユーザーはまた、**延長**を求めることもできます。
|
||||
|
||||
さらに、**PIM は**特権役割が誰かに割り当てられるたびにメールを送信します。
|
||||
さらに、**PIM は**特権ロールが誰かに割り当てられるたびにメールを送信します。
|
||||
|
||||
<figure><img src="../../../images/image (354).png" alt=""><figcaption></figcaption></figure>
|
||||
|
||||
PIM が有効になっていると、各役割に対して次のような特定の要件を設定できます:
|
||||
PIM が有効になっていると、各ロールに対して次のような特定の要件を設定できます:
|
||||
|
||||
- アクティベーションの最大期間(時間)
|
||||
- アクティベーション時に MFA を要求
|
||||
@@ -1106,7 +1106,7 @@ PIM が有効になっていると、各役割に対して次のような特定
|
||||
- アクティベーション時にチケット情報を要求
|
||||
- アクティベートするための承認を要求
|
||||
- 資格のある割り当ての最大有効期限
|
||||
- 特定のアクションがその役割で発生したときに通知を送信するタイミングと送信先に関する多くの設定
|
||||
- 特定のアクションがそのロールで発生したときに通知を送信する際の設定がさらに多く
|
||||
|
||||
### 条件付きアクセス ポリシー
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Azure Cloud Shell
|
||||
|
||||
**Azure Cloud Shell** は、Azure リソースを管理するために設計されたインタラクティブで認証されたブラウザアクセス可能なターミナルで、Bash または PowerShell のいずれかで作業する柔軟性を提供します。これは、20 分間の非アクティブ状態の後にタイムアウトする一時的なセッションホスト上で実行され、$HOME ロケーションに 5 GB のファイル共有を使用してファイルを保持します。Cloud Shell は、Azure ポータル、shell.azure.com、Azure CLI および PowerShell ドキュメント、Azure モバイルアプリ、Visual Studio Code Azure アカウント拡張機能など、複数のポイントからアクセスできます。
|
||||
**Azure Cloud Shell** は、Azure リソースを管理するために設計されたインタラクティブで認証されたブラウザアクセス可能なターミナルで、Bash または PowerShell のいずれかで作業する柔軟性を提供します。これは、20 分間の非アクティブ状態の後にタイムアウトする一時的なセッションホスト上で実行され、$HOME ロケーションに 5 GB のファイル共有を使用してファイルを保持します。Cloud Shell には、Azure ポータル、shell.azure.com、Azure CLI および PowerShell ドキュメント、Azure モバイルアプリ、Visual Studio Code Azure アカウント拡張機能など、複数のポイントからアクセスできます。
|
||||
|
||||
このサービスには権限が割り当てられていないため、特権昇格技術はありません。また、列挙の種類もありません。
|
||||
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
|
||||
Azure Cosmos DB は、ドキュメント、リレーショナル、キー-バリュー、グラフ、およびカラムファミリーデータモデルを使用して現実のデータをモデル化するための複数のデータベース API を提供します。これらの API は NoSQL、MongoDB、PostgreSQL、Cassandra、Gremlin および Table です。
|
||||
|
||||
CosmosDB の重要な側面の一つは Azure Cosmos アカウントです。**Azure Cosmos アカウント** は、データベースへのエントリーポイントとして機能します。このアカウントは、グローバル配信、一貫性レベル、および使用する特定の API(NoSQL など)などの主要な設定を決定します。アカウントを通じて、データが複数のリージョンで低遅延アクセスのために利用可能であることを保証するグローバルレプリケーションを構成できます。さらに、パフォーマンスとデータの正確性のバランスを取る一貫性レベルを選択でき、強い一貫性から最終的な一貫性までのオプションがあります。
|
||||
CosmosDB の重要な側面の一つは Azure Cosmos アカウントです。**Azure Cosmos アカウント** は、データベースへの入り口として機能します。このアカウントは、グローバル配信、一貫性レベル、および使用する特定の API(NoSQL など)などの主要な設定を決定します。アカウントを通じて、データが複数のリージョンで低遅延アクセスのために利用可能であることを保証するグローバルレプリケーションを構成できます。さらに、パフォーマンスとデータの正確性のバランスを取る一貫性レベルを選択でき、強い一貫性から最終的な一貫性までのオプションがあります。
|
||||
|
||||
### NoSQL (sql)
|
||||
Azure Cosmos DB NoSQL API は、JSON をデータ形式として使用するドキュメントベースの API です。これは、JSON オブジェクトをクエリするための SQL に似たクエリ構文を提供し、構造化データおよび半構造化データの操作に適しています。サービスのエンドポイントは次のとおりです:
|
||||
@@ -19,7 +19,7 @@ https://<Account-Name>.documents.azure.com:443/
|
||||
アカウント内で、1つ以上のデータベースを作成できます。これらはコンテナの論理的なグループとして機能します。データベースは、リソース管理とユーザー権限の境界として機能します。データベースは、コンテナ間でプロビジョニングされたスループットを共有するか、個々のコンテナに専用のスループットを割り当てることができます。
|
||||
|
||||
#### コンテナ
|
||||
データストレージのコアユニットはコンテナであり、JSONドキュメントを保持し、効率的なクエリのために自動的にインデックスが付けられます。コンテナは弾力的にスケーラブルで、ユーザー定義のパーティションキーによって決定されるパーティションに分散されています。パーティションキーは、最適なパフォーマンスと均等なデータ分配を確保するために重要です。たとえば、コンテナは顧客データを保存し、「customerId」をパーティションキーとして使用することがあります。
|
||||
データストレージのコアユニットはコンテナであり、JSONドキュメントを保持し、効率的なクエリのために自動的にインデックスが付けられます。コンテナは弾力的にスケーラブルで、ユーザー定義のパーティションキーによって決定されるパーティションに分散されます。パーティションキーは、最適なパフォーマンスと均等なデータ分配を確保するために重要です。たとえば、コンテナは顧客データを保存し、「customerId」をパーティションキーとして使用することがあります。
|
||||
|
||||
#### 列挙
|
||||
|
||||
@@ -149,7 +149,7 @@ print("All items in the container:")
|
||||
for item in all_items:
|
||||
print(item)
|
||||
```
|
||||
接続を確立する別の方法は、**DefaultAzureCredential()**を使用することです。権限を持つアカウントでログイン(az login)し、それを実行するだけです。この場合、必要な権限を与えるロール割り当てを行う必要があります(詳細については参照してください)。
|
||||
接続を確立する別の方法は、**DefaultAzureCredential()**を使用することです。必要な権限を持つアカウントでログイン(az login)し、それを実行するだけです。この場合、必要な権限を付与するロール割り当てを行う必要があります(詳細については参照してください)。
|
||||
```python
|
||||
from azure.identity import DefaultAzureCredential
|
||||
from azure.cosmos import CosmosClient
|
||||
@@ -183,7 +183,7 @@ mongodb://<hostname>:<port>/<database>
|
||||
MongoDBでは、インスタンス内に1つ以上のデータベースを作成できます。各データベースはコレクションの論理的なグループとして機能し、リソースの組織と管理の境界を提供します。データベースは、異なるアプリケーションやプロジェクトのためにデータを論理的に分離し、管理するのに役立ちます。
|
||||
|
||||
#### コレクション
|
||||
MongoDBにおけるデータストレージのコアユニットはコレクションであり、ドキュメントを保持し、効率的なクエリと柔軟なスキーマ設計のために設計されています。コレクションは弾力的にスケーラブルであり、分散セットアップ内の複数のノードにわたって高スループットの操作をサポートできます。
|
||||
MongoDBにおけるデータストレージのコアユニットはコレクションであり、ドキュメントを保持し、効率的なクエリと柔軟なスキーマ設計のために設計されています。コレクションは弾力的にスケーラブルで、分散セットアップ内の複数のノードにわたって高スループットの操作をサポートできます。
|
||||
|
||||
#### 列挙
|
||||
|
||||
|
||||
@@ -4,29 +4,29 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
**Azure Files** は、標準の **SMB (Server Message Block)** および **NFS (Network File System)** プロトコルを介してアクセス可能な共有ファイルストレージを提供する完全に管理されたクラウドファイルストレージサービスです。主に使用されるプロトコルはSMBですが、NFS Azureファイル共有はWindowsではサポートされていません([**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)による)。これにより、複数の仮想マシン(VM)やオンプレミスシステムから同時にアクセスできる高可用性のネットワークファイル共有を作成でき、環境間でシームレスなファイル共有が可能になります。
|
||||
**Azure Files** は、標準の **SMB (Server Message Block)** および **NFS (Network File System)** プロトコルを介してアクセス可能な共有ファイルストレージを提供する完全に管理されたクラウドファイルストレージサービスです。主に使用されるプロトコルはSMBですが、NFS Azureファイル共有はWindowsではサポートされていません([**docs**](https://learn.microsoft.com/en-us/azure/storage/files/files-nfs-protocol)による)。これにより、複数の仮想マシン (VM) またはオンプレミスシステムによって同時にアクセス可能な高可用性のネットワークファイル共有を作成でき、環境間でシームレスなファイル共有が可能になります。
|
||||
|
||||
### アクセス階層
|
||||
|
||||
- **トランザクション最適化**: トランザクションが多い操作に最適化されています。
|
||||
- **ホット**: トランザクションとストレージのバランスが取れています。
|
||||
- **クール**: ストレージに対してコスト効果があります。
|
||||
- **クール**: ストレージにコスト効果的です。
|
||||
- **プレミアム**: 低遅延およびIOPS集中的なワークロードに最適化された高性能ファイルストレージです。
|
||||
|
||||
### バックアップ
|
||||
|
||||
- **日次バックアップ**: 指定された時間(例:19.30 UTC)に毎日バックアップポイントが作成され、1日から200日間保存されます。
|
||||
- **日次バックアップ**: 指定された時間(例: 19.30 UTC)に毎日バックアップポイントが作成され、1日から200日間保存されます。
|
||||
- **週次バックアップ**: 指定された曜日と時間(毎週日曜日の19.30)にバックアップポイントが作成され、1週間から200週間保存されます。
|
||||
- **月次バックアップ**: 指定された日と時間(例:毎月の最初の日曜日の19.30)にバックアップポイントが作成され、1ヶ月から120ヶ月保存されます。
|
||||
- **年次バックアップ**: 指定された日と時間(例:1月の最初の日曜日の19.30)にバックアップポイントが作成され、1年から10年保存されます。
|
||||
- **月次バックアップ**: 指定された日と時間(例: 毎月の最初の日曜日の19.30)にバックアップポイントが作成され、1ヶ月から120ヶ月保存されます。
|
||||
- **年次バックアップ**: 指定された日と時間(例: 1月の最初の日曜日の19.30)にバックアップポイントが作成され、1年から10年間保存されます。
|
||||
- **手動バックアップおよびスナップショットをいつでも実行することも可能です**。この文脈では、バックアップとスナップショットは実際には同じです。
|
||||
|
||||
### SMB経由でサポートされる認証
|
||||
|
||||
- **オンプレミスAD DS認証**: オンプレミスのActive Directory資格情報を使用し、Microsoft Entra IDと同期してアイデンティティベースのアクセスを提供します。オンプレミスAD DSへのネットワーク接続が必要です。
|
||||
- **オンプレミスAD DS認証**: オンプレミスのActive Directory資格情報を使用し、Microsoft Entra IDと同期されているアイデンティティベースのアクセスを提供します。オンプレミスAD DSへのネットワーク接続が必要です。
|
||||
- **Microsoft Entraドメインサービス認証**: Microsoft Entraドメインサービス(クラウドベースのAD)を利用して、Microsoft Entra資格情報を使用してアクセスを提供します。
|
||||
- **ハイブリッドアイデンティティ用のMicrosoft Entra Kerberos**: Microsoft Entraユーザーがインターネット経由でAzureファイル共有をKerberosを使用して認証できるようにします。オンプレミスのドメインコントローラーへの接続を必要とせず、ハイブリッドMicrosoft Entra参加またはMicrosoft Entra参加のVMをサポートします。ただし、クラウド専用のアイデンティティはサポートされていません。
|
||||
- **Linuxクライアント用のAD Kerberos認証**: LinuxクライアントがオンプレミスAD DSまたはMicrosoft Entraドメインサービスを介してSMB認証にKerberosを使用できるようにします。
|
||||
- **ハイブリッドアイデンティティのためのMicrosoft Entra Kerberos**: Microsoft Entraユーザーがインターネット経由でAzureファイル共有をKerberosを使用して認証できるようにします。オンプレミスのドメインコントローラーへの接続を必要とせず、ハイブリッドMicrosoft Entra参加またはMicrosoft Entra参加のVMをサポートします。ただし、クラウド専用のアイデンティティはサポートされていません。
|
||||
- **LinuxクライアントのためのAD Kerberos認証**: LinuxクライアントがオンプレミスAD DSまたはMicrosoft Entraドメインサービスを介してSMB認証のためにKerberosを使用できるようにします。
|
||||
|
||||
## 列挙
|
||||
|
||||
@@ -89,11 +89,11 @@ Get-AzStorageFile -ShareName "<share-name>" -Context (New-AzStorageContext -Stor
|
||||
|
||||
> [!TIP]
|
||||
> 使用するアカウントキーを示すには、パラメータ`--account-key`を使用します\
|
||||
> SASトークンを使用してアクセスするには、SASトークンと共にパラメータ`--sas-token`を使用します
|
||||
> SASトークンを使用してアクセスするには、SASトークンと共にパラメータ`--sas-token`を使用します。
|
||||
|
||||
### 接続
|
||||
|
||||
これらは、執筆時点でAzureが提案するファイル共有に接続するためのスクリプトです:
|
||||
これらは、執筆時にAzureが提案したファイル共有に接続するためのスクリプトです:
|
||||
|
||||
`<STORAGE-ACCOUNT>`、`<ACCESS-KEY>`、および`<FILE-SHARE-NAME>`のプレースホルダーを置き換える必要があります。
|
||||
|
||||
|
||||
@@ -4,10 +4,10 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
**Azure Function Apps** は **サーバーレスコンピューティングサービス** であり、基盤となるインフラストラクチャを管理することなく、**関数**と呼ばれる小さなコードの断片を実行することを可能にします。これらは、**HTTPリクエスト、タイマー、またはBlob StorageやEvent Hubsなどの他のAzureサービスからのイベント**に応じてコードを実行するように設計されています。Function AppsはC#、Python、JavaScript、Javaなど複数のプログラミング言語をサポートしており、**イベント駆動型アプリケーション**の構築、ワークフローの自動化、サービスの統合に適しています。通常、コードが実行されるときに使用されたコンピューティング時間に対してのみ支払うため、コスト効率が高いです。
|
||||
**Azure Function Apps** は **サーバーレスコンピューティングサービス** で、基盤となるインフラを管理することなく、**関数** と呼ばれる小さなコードの断片を実行できます。これらは、**HTTPリクエスト、タイマー、またはBlob StorageやEvent Hubsなどの他のAzureサービスからのイベント** など、さまざまなトリガーに応じてコードを実行するように設計されています。Function AppsはC#、Python、JavaScript、Javaなど複数のプログラミング言語をサポートしており、**イベント駆動型アプリケーション**の構築、ワークフローの自動化、サービスの統合に適しています。通常、コードが実行されるときに使用されたコンピューティング時間に対してのみ支払うため、コスト効率が高いです。
|
||||
|
||||
> [!NOTE]
|
||||
> **FunctionsはApp Servicesのサブセット**であるため、ここで説明される多くの機能はAzure Apps(cliでは`webapp`)として作成されたアプリケーションでも使用されます。
|
||||
> **FunctionsはApp Servicesのサブセット**であるため、ここで説明される多くの機能はAzure Apps(CLIでは`webapp`)として作成されたアプリケーションでも使用されます。
|
||||
|
||||
### 異なるプラン
|
||||
|
||||
@@ -15,20 +15,20 @@
|
||||
- **Traditional Consumption Plan**: デフォルトのサーバーレスオプションで、**関数が実行されるときのみコンピューティングリソースに対して支払います**。受信イベントに基づいて自動的にスケールし、**コールドスタートの最適化**が含まれていますが、コンテナデプロイメントはサポートしていません。自動スケーリングを必要とする**断続的なワークロード**に最適です。
|
||||
- **Premium Plan**: **一貫したパフォーマンス**を提供するように設計されており、コールドスタートを排除するための**事前ウォームされたワーカー**を備えています。**拡張実行時間、仮想ネットワーキング**を提供し、**カスタムLinuxイメージ**をサポートしており、高パフォーマンスと高度な機能を必要とする**ミッションクリティカルなアプリケーション**に最適です。
|
||||
- **Dedicated Plan**: 専用の仮想マシン上で実行され、**予測可能な請求**を提供し、手動または自動スケーリングをサポートします。同じプランで複数のアプリを実行でき、**コンピューティングの隔離**を提供し、App Service Environmentsを介して**安全なネットワークアクセス**を確保し、一貫したリソース割り当てを必要とする**長時間実行されるアプリケーション**に最適です。
|
||||
- **Container Apps**: **コンテナ化された関数アプリ**を管理された環境でデプロイすることを可能にし、マイクロサービスやAPIと共に使用できます。カスタムライブラリ、レガシーアプリの移行、**GPU処理**をサポートし、Kubernetesクラスターの管理を排除します。**イベント駆動型でスケーラブルなコンテナ化されたアプリケーション**に最適です。
|
||||
- **Container Apps**: **コンテナ化された関数アプリ**を管理された環境でデプロイでき、マイクロサービスやAPIと共に使用できます。カスタムライブラリ、レガシーアプリの移行、**GPU処理**をサポートし、Kubernetesクラスターの管理を排除します。**イベント駆動型でスケーラブルなコンテナ化されたアプリケーション**に最適です。
|
||||
|
||||
### **ストレージバケット**
|
||||
|
||||
新しいFunction Appをコンテナ化せずに作成する場合(実行するコードを提供する場合)、**コードおよびその他のFunction関連データはストレージアカウントに保存されます**。デフォルトでは、Webコンソールはコードを保存するために関数ごとに新しいものを作成します。
|
||||
新しいFunction Appをコンテナ化せずに作成する場合(実行するコードを提供する場合)、**コードとその他のFunction関連データはストレージアカウントに保存されます**。デフォルトでは、Webコンソールはコードを保存するために関数ごとに新しいものを作成します。
|
||||
|
||||
さらに、バケット内のコードを変更すると(保存されるさまざまな形式で)、**アプリのコードは新しいものに変更され、次回Functionが呼び出されると実行されます**。
|
||||
|
||||
> [!CAUTION]
|
||||
> これは攻撃者の視点から非常に興味深いものであり、**このバケットに対する書き込みアクセス**があれば、攻撃者は**コードを妥協し、Function App内の管理されたIDの権限を昇格させる**ことができます。
|
||||
> これは攻撃者の視点から非常に興味深いもので、**このバケットに対する書き込みアクセス**があれば、攻撃者は**コードを妥協し、Function App内の管理されたIDの権限を昇格させる**ことができます。
|
||||
>
|
||||
> これについては**権限昇格セクション**で詳しく説明します。
|
||||
|
||||
ストレージアカウント内のコンテナ **`azure-webjobs-secrets`** に、フォルダ **`<app-name>`** 内のJSONファイルに保存された**マスターキーと関数キー**を見つけることも可能です。
|
||||
ストレージアカウント内のコンテナ **`azure-webjobs-secrets`** に保存されている**マスターキーと関数キー**を見つけることも可能です。これは **`<app-name>`** フォルダ内のJSONファイルにあります。
|
||||
|
||||
Functionsは、リモートロケーションにコードを保存することも可能で、URLを指定するだけで済みます。
|
||||
|
||||
@@ -36,47 +36,47 @@ Functionsは、リモートロケーションにコードを保存すること
|
||||
|
||||
HTTPトリガーを使用する場合:
|
||||
|
||||
- **インターネット全体から関数へのアクセスを提供**することが可能で、認証を必要としないか、IAMベースのアクセスを提供することができます。ただし、このアクセスを制限することも可能です。
|
||||
- **インターネット全体から関数へのアクセスを提供**することが可能で、認証を必要としないか、IAMベースのアクセスを提供できます。ただし、このアクセスを制限することも可能です。
|
||||
- **内部ネットワーク(VPC)**からFunction Appへのアクセスを**提供または制限**することも可能です。
|
||||
|
||||
> [!CAUTION]
|
||||
> これは攻撃者の視点から非常に興味深いものであり、インターネットに公開された脆弱なFunctionから**内部ネットワークにピボットする**ことが可能かもしれません。
|
||||
> これは攻撃者の視点から非常に興味深いもので、インターネットに公開された脆弱なFunctionから**内部ネットワークにピボットする**ことが可能かもしれません。
|
||||
|
||||
### **Function Appの設定と環境変数**
|
||||
|
||||
アプリ内で環境変数を構成することが可能で、これには機密情報が含まれる可能性があります。さらに、デフォルトで環境変数 **`AzureWebJobsStorage`** と **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`**(他にもいくつか)が作成されます。これらは特に興味深いもので、**アプリケーションのデータを含むストレージアカウントを完全に制御するためのアカウントキーを含んでいます**。これらの設定は、ストレージアカウントからコードを実行するためにも必要です。
|
||||
アプリ内で環境変数を設定することが可能で、これには機密情報が含まれる場合があります。さらに、デフォルトで環境変数 **`AzureWebJobsStorage`** と **`WEBSITE_CONTENTAZUREFILECONNECTIONSTRING`** (他にもいくつか)が作成されます。これらは特に興味深いもので、**アプリケーションのデータを含むストレージアカウントを完全に制御するためのアカウントキーを含んでいます**。これらの設定は、ストレージアカウントからコードを実行するためにも必要です。
|
||||
|
||||
これらの環境変数や構成パラメータは、Functionがコードを実行する方法も制御します。たとえば、**`WEBSITE_RUN_FROM_PACKAGE`** が存在する場合、アプリケーションのコードがあるURLを示します。
|
||||
これらの環境変数や設定パラメータは、Functionがコードを実行する方法も制御します。たとえば、**`WEBSITE_RUN_FROM_PACKAGE`** が存在する場合、アプリケーションのコードがあるURLを示します。
|
||||
|
||||
### **Function Sandbox**
|
||||
|
||||
Linuxサンドボックス内では、ソースコードは **`/home/site/wwwroot`** にあり、ファイル **`function_app.py`**(Pythonを使用している場合)に格納されています。コードを実行するユーザーは **`app`** で(sudo権限なし)。
|
||||
Linuxサンドボックス内では、ソースコードは **`/home/site/wwwroot`** にあり、ファイル **`function_app.py`** (Pythonを使用している場合)に格納されています。コードを実行するユーザーは **`app`** で、sudo権限はありません。
|
||||
|
||||
**Windows**関数でNodeJSを使用している場合、コードは **`C:\home\site\wwwroot\HttpTrigger1\index.js`** にあり、ユーザー名は **`mawsFnPlaceholder8_f_v4_node_20_x86`** で、**グループ**には `Mandatory Label\High Mandatory Level Label`、`Everyone`、`BUILTIN\Users`、`NT AUTHORITY\INTERACTIVE`、`CONSOLE LOGON`、`NT AUTHORITY\Authenticated Users`、`NT AUTHORITY\This Organization`、`BUILTIN\IIS_IUSRS`、`LOCAL`、`10-30-4-99\Dwas Site Users` が含まれていました。
|
||||
|
||||
### **管理されたIDとメタデータ**
|
||||
|
||||
[**VMs**](vms/index.html)と同様に、Functionsは2種類の**管理されたID**を持つことができます:システム割り当てとユーザー割り当て。
|
||||
[**VMs**](vms/index.html) と同様に、Functionsは2種類の**管理されたID**を持つことができます:システム割り当てとユーザー割り当て。
|
||||
|
||||
**システム割り当て**のものは、**そのIDが割り当てられた関数のみが使用できる**管理されたIDであり、**ユーザー割り当て**の管理されたIDは、**他のAzureサービスが使用できる**管理されたIDです。
|
||||
|
||||
> [!NOTE]
|
||||
> [**VMs**](vms/index.html)と同様に、Functionsは**1つのシステム割り当て**の管理されたIDと**複数のユーザー割り当て**の管理されたIDを持つことができるため、関数を妥協した場合は、すべての管理されたIDを見つけることが常に重要です。1つのFunctionから複数の管理されたIDに権限を昇格させることができるかもしれません。
|
||||
> [**VMs**](vms/index.html) と同様に、Functionsは**1つのシステム割り当て**の管理されたIDと**複数のユーザー割り当て**の管理されたIDを持つことができるため、関数を妥協した場合は、すべての管理されたIDを見つけることが常に重要です。1つのFunctionから複数の管理されたIDに権限を昇格させることができるかもしれません。
|
||||
>
|
||||
> システム管理されたIDが使用されていないが、1つ以上のユーザー管理されたIDが関数に添付されている場合、デフォルトではトークンを取得することはできません。
|
||||
> システム管理されたIDが使用されていない場合でも、1つ以上のユーザー管理されたIDが関数に添付されている場合、デフォルトではトークンを取得することはできません。
|
||||
|
||||
[**PEASSスクリプト**](https://github.com/peass-ng/PEASS-ng)を使用して、メタデータエンドポイントからデフォルトの管理されたIDのトークンを取得することが可能です。また、以下のように**手動で**取得することもできます:
|
||||
|
||||
{% embed url="https://book.hacktricks.wiki/en/pentesting-web/ssrf-server-side-request-forgery/cloud-ssrf.html#azure-vm" %}
|
||||
|
||||
関数に添付された**すべての管理されたIDを確認する方法を見つける必要がある**ことに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを確認してください)。
|
||||
関数に添付されている**すべての管理されたIDを確認する方法**を見つける必要があることに注意してください。指定しない場合、メタデータエンドポイントは**デフォルトのもののみを使用します**(詳細については前のリンクを確認してください)。
|
||||
|
||||
## アクセスキー
|
||||
|
||||
> [!NOTE]
|
||||
> ユーザーが関数を呼び出すためのアクセスを与えるRBAC権限は存在しないことに注意してください。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
|
||||
> ユーザーが関数を呼び出すためのアクセスを与えるRBAC権限はありません。**関数の呼び出しは、作成時に選択されたトリガーに依存します**。HTTPトリガーが選択された場合、**アクセスキー**を使用する必要があるかもしれません。
|
||||
|
||||
HTTPトリガーを使用して関数内にエンドポイントを作成する際、関数をトリガーするために必要な**アクセスキーの認証レベル**を指定することが可能です。3つのオプションがあります:
|
||||
HTTPトリガーを使用して関数内にエンドポイントを作成する際、関数をトリガーするために必要な**アクセスキーの認証レベル**を指定することが可能です。利用可能なオプションは3つあります:
|
||||
|
||||
- **ANONYMOUS**: **誰でも**URLを通じて関数にアクセスできます。
|
||||
- **FUNCTION**: エンドポイントは**関数、ホスト、またはマスターキー**を使用するユーザーのみがアクセスできます。
|
||||
@@ -84,10 +84,10 @@ HTTPトリガーを使用して関数内にエンドポイントを作成する
|
||||
|
||||
**キーの種類:**
|
||||
|
||||
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかであり、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。
|
||||
- **ホストキー**: ホストキーもデフォルトまたはユーザー定義のいずれかであり、**FUNCTIONアクセスレベル**を持つFunction App内の**すべての関数エンドポイント**へのアクセスを提供します。
|
||||
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを含む管理キーであり、権限が昇格されます。この**キーは取り消すことができません**。
|
||||
- **システムキー**: システムキーは**特定の拡張機能によって管理され**、内部コンポーネントによって使用されるWebhookエンドポイントにアクセスするために必要です。例としては、Event GridトリガーやDurable Functionsがあり、システムキーを使用してそれぞれのAPIと安全に対話します。
|
||||
- **関数キー**: 関数キーはデフォルトまたはユーザー定義のいずれかで、Function App内の**特定の関数エンドポイント**へのアクセスを独占的に付与するように設計されています。これにより、エンドポイントに対するより細かいアクセスが可能になります。
|
||||
- **ホストキー**: ホストキーもデフォルトまたはユーザー定義のいずれかで、**FUNCTIONアクセスレベル**を持つFunction App内の**すべての関数エンドポイント**へのアクセスを提供します。
|
||||
- **マスターキー**: マスターキー(`_master`)は、すべての関数エンドポイントへのアクセスを含む管理キーで、権限が昇格されます。この**キーは取り消すことができません**。
|
||||
- **システムキー**: システムキーは**特定の拡張機能によって管理され**、内部コンポーネントによって使用されるWebhookエンドポイントにアクセスするために必要です。例としては、Event GridトリガーやDurable Functionsがあり、これらはそれぞれのAPIと安全に対話するためにシステムキーを利用します。
|
||||
|
||||
> [!TIP]
|
||||
> キーを使用して関数APIエンドポイントにアクセスする例:
|
||||
@@ -96,7 +96,7 @@ HTTPトリガーを使用して関数内にエンドポイントを作成する
|
||||
|
||||
### 基本認証
|
||||
|
||||
App Servicesと同様に、Functionsも**SCM**および**FTP**に接続してコードをデプロイするための基本認証をサポートしています。これは、Azureが提供する**ユーザー名とパスワードを含むURL**を使用します。詳細については以下を参照してください:
|
||||
App Servicesと同様に、Functionsも**SCM**および**FTP**に接続してコードをデプロイするための基本認証をサポートしています。これは、Azureが提供する**ユーザー名とパスワードを含むURL**を使用します。詳細については:
|
||||
|
||||
{{#ref}}
|
||||
az-app-services.md
|
||||
@@ -104,7 +104,7 @@ az-app-services.md
|
||||
|
||||
### Githubベースのデプロイメント
|
||||
|
||||
関数がGithubリポジトリから生成されると、Azure Webコンソールは**特定のリポジトリにGithubワークフローを自動的に作成する**ことを許可します。これにより、このリポジトリが更新されるたびに関数のコードが更新されます。実際、Python関数のGithub Action yamlは次のようになります:
|
||||
関数がGithubリポジトリから生成されると、Azure Webコンソールは**特定のリポジトリにGithubワークフローを自動的に作成**することを許可します。これにより、このリポジトリが更新されるたびに関数のコードが更新されます。実際、Python関数のGithub Action yamlは次のようになります:
|
||||
|
||||
<details>
|
||||
|
||||
@@ -192,14 +192,14 @@ package: ${{ env.AZURE_FUNCTIONAPP_PACKAGE_PATH }}
|
||||
```
|
||||
</details>
|
||||
|
||||
さらに、**Managed Identity**も作成されるため、リポジトリからのGithub Actionはそれを使用してAzureにログインできるようになります。これは、**Managed Identity**上に連邦資格情報を生成することによって行われ、**Issuer** `https://token.actions.githubusercontent.com` と **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` が許可されます。
|
||||
さらに、**Managed Identity**も作成されるため、リポジトリからのGithub Actionはそれを使用してAzureにログインできるようになります。これは、**Managed Identity**上にフェデレーテッド資格情報を生成することによって行われ、**Issuer** `https://token.actions.githubusercontent.com` と **Subject Identifier** `repo:<org-name>/<repo-name>:ref:refs/heads/<branch-name>` が許可されます。
|
||||
|
||||
> [!CAUTION]
|
||||
> したがって、そのリポジトリを侵害した者は、関数およびそれに関連付けられたManaged Identitiesを侵害することができます。
|
||||
|
||||
### コンテナベースのデプロイメント
|
||||
|
||||
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、構成にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、ウェブコンソールでは、構成に**image settings**が表示されます。
|
||||
すべてのプランがコンテナのデプロイを許可しているわけではありませんが、許可されているプランでは、設定にコンテナのURLが含まれます。APIでは、**`linuxFxVersion`**設定は次のようになります: `DOCKER|mcr.microsoft.com/...`、一方、ウェブコンソールでは、設定に**image settings**が表示されます。
|
||||
|
||||
さらに、**ソースコードは関数に関連するストレージ**アカウントに保存されません。必要ないためです。
|
||||
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
|
||||
## 基本情報
|
||||
|
||||
Azure Logic Appsは、Microsoft Azureが提供するクラウドベースのサービスで、開発者が**さまざまなサービス**、データソース、およびアプリケーションを統合するワークフローを**作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を実行するように設計されています。
|
||||
Azure Logic Appsは、Microsoft Azureが提供するクラウドベースのサービスで、開発者が**さまざまなサービス、データソース、アプリケーションを統合するワークフローを作成および実行**できるようにします。これらのワークフローは、**ビジネスプロセスを自動化**し、タスクを調整し、異なるプラットフォーム間でデータ統合を実行するように設計されています。
|
||||
|
||||
Logic Appsは、**幅広い事前構築されたコネクタ**を使用してワークフローを作成するためのビジュアルデザイナーを提供しており、Office 365、Dynamics CRM、Salesforceなどのさまざまなサービスに簡単に接続して対話できます。また、特定のニーズに合わせたカスタムコネクタを作成することもできます。
|
||||
|
||||
### 例
|
||||
|
||||
- **データパイプラインの自動化**: Logic Appsは、Azure Data Factoryと組み合わせて**データ転送および変換プロセス**を自動化できます。これは、Azure SQL DatabaseやAzure Blob Storageなどのさまざまなデータストア間でデータを移動および変換するスケーラブルで信頼性の高いデータパイプラインを作成するのに役立ち、分析およびビジネスインテリジェンス操作を支援します。
|
||||
- **Azure Functionsとの統合**: Logic Appsは、Azure Functionsと連携して、**必要に応じてスケールする洗練されたイベント駆動型アプリケーションを開発**し、他のAzureサービスとシームレスに統合できます。使用例としては、Logic Appを使用して、Azure Storageアカウントの変更などの特定のイベントに応じてAzure Functionをトリガーし、動的なデータ処理を可能にすることが挙げられます。
|
||||
- **データパイプラインの自動化**: Logic Appsは、Azure Data Factoryと組み合わせて**データ転送および変換プロセスを自動化**できます。これは、Azure SQL DatabaseやAzure Blob Storageなどのさまざまなデータストア間でデータを移動および変換するスケーラブルで信頼性の高いデータパイプラインを作成するのに役立ち、分析およびビジネスインテリジェンス操作を支援します。
|
||||
- **Azure Functionsとの統合**: Logic Appsは、Azure Functionsと連携して**必要に応じてスケールする洗練されたイベント駆動型アプリケーションを開発**し、他のAzureサービスとシームレスに統合できます。使用例としては、Logic Appを使用して、Azure Storageアカウントの変更などの特定のイベントに応じてAzure Functionをトリガーすることが挙げられ、動的なデータ処理を可能にします。
|
||||
|
||||
### LogicAPPの可視化
|
||||
|
||||
@@ -34,12 +34,12 @@ curl -XPOST 'https://prod-44.westus.logic.azure.com:443/workflows/2d8de4be6e9741
|
||||
|
||||
いくつかのホスティングオプションがあります:
|
||||
|
||||
* **消費型**
|
||||
- **マルチテナント**:共有コンピューティングリソースを提供し、パブリッククラウドで運営され、操作ごとの料金モデルに従います。これは軽量でコスト効果の高いワークロードに最適です。
|
||||
* **スタンダード**
|
||||
- **ワークフローサービスプラン**:ネットワーキングのためのVNET統合を持つ専用コンピューティングリソースで、ワークフローサービスプランインスタンスごとに料金が発生します。これは、より大きな制御を必要とする要求の厳しいワークロードに適しています。
|
||||
- **アプリサービス環境V3**:完全な隔離とスケーラビリティを持つ専用コンピューティングリソースです。また、ネットワーキングのためにVNETと統合され、環境内のアプリサービスインスタンスに基づく料金モデルを使用します。これは、高い隔離を必要とするエンタープライズ規模のアプリケーションに最適です。
|
||||
- **ハイブリッド**:ローカル処理とマルチクラウドサポートのために設計されています。顧客管理のコンピューティングリソースをローカルネットワークアクセスと共に提供し、Kubernetes Event-Driven Autoscaling (KEDA)を利用します。
|
||||
* **消費**
|
||||
- **マルチテナント**: 共有コンピューティングリソースを提供し、パブリッククラウドで運営され、操作ごとの料金モデルに従います。これは軽量でコスト効果の高いワークロードに最適です。
|
||||
* **標準**
|
||||
- **ワークフローサービスプラン**: ネットワーキングのためのVNET統合を持つ専用コンピューティングリソースで、ワークフローサービスプランインスタンスごとに料金が発生します。これは、より高い制御を必要とする要求の厳しいワークロードに適しています。
|
||||
- **アプリサービス環境 V3**: 完全な隔離とスケーラビリティを持つ専用コンピューティングリソースです。また、ネットワーキングのためにVNETと統合され、環境内のアプリサービスインスタンスに基づく料金モデルを使用します。これは、高い隔離を必要とするエンタープライズ規模のアプリケーションに最適です。
|
||||
- **ハイブリッド**: ローカル処理とマルチクラウドサポートのために設計されています。顧客管理のコンピューティングリソースをローカルネットワークアクセスと共に提供し、Kubernetes Event-Driven Autoscaling (KEDA)を利用します。
|
||||
|
||||
### 列挙
|
||||
|
||||
@@ -137,17 +137,17 @@ Get-AzLogicAppTriggerHistory -ResourceGroupName "<ResourceGroupName>" -Name "<Lo
|
||||
{{#endtab }}
|
||||
{{#endtabs }}
|
||||
|
||||
### インテグレーション アカウント
|
||||
**インテグレーション アカウント**は、Azure Logic Appsの機能です。インテグレーション アカウントは、EDI、AS2、XMLスキーマ管理などの高度なB2B機能を有効にすることによって、エンタープライズレベルの統合を促進するために使用されます。インテグレーション アカウントは、Logic Appsで使用される以下のアーティファクトを格納するAzureのコンテナです。
|
||||
### インテグレーションアカウント
|
||||
**インテグレーションアカウント**は、Azure Logic Appsの機能です。インテグレーションアカウントは、EDI、AS2、XMLスキーマ管理などの高度なB2B機能を有効にすることで、エンタープライズレベルの統合を促進します。インテグレーションアカウントは、Logic Appsで使用される以下のアーティファクトを格納するAzureのコンテナです:
|
||||
|
||||
* スキーマ: インテグレーション アカウント内のメッセージを検証および処理するためのXMLスキーマを管理します。
|
||||
* マップ: インテグレーション ワークフロー内でデータ形式を変換するためのXSLTベースの変換を構成します。
|
||||
* アセンブリ: ロジックとデータ処理を効率化するためにインテグレーション アカウントのアセンブリを管理します。
|
||||
* 証明書: メッセージの暗号化と署名のための証明書を扱い、安全な通信を確保します。
|
||||
* パートナー: B2B取引のための取引先情報を管理し、シームレスな統合を可能にします。
|
||||
* 合意: 取引先とのデータ交換のためのルールと設定を構成します(例: EDI、AS2)。
|
||||
* バッチ構成: メッセージを効率的にグループ化および処理するためのバッチ処理構成を管理します。
|
||||
* RosettaNet PIP: B2B通信を標準化するためのRosettaNetパートナーインターフェースプロセス(PIP)を構成します。
|
||||
* スキーマ:インテグレーションアカウント内のメッセージを検証および処理するためのXMLスキーマを管理します。
|
||||
* マップ:インテグレーションワークフロー内でデータ形式を変換するためのXSLTベースの変換を構成します。
|
||||
* アセンブリ:ロジックとデータ処理を効率化するためにインテグレーションアカウントのアセンブリを管理します。
|
||||
* 証明書:メッセージの暗号化と署名のための証明書を扱い、安全な通信を確保します。
|
||||
* パートナー:B2B取引のための取引先情報を管理し、シームレスな統合を可能にします。
|
||||
* 合意:取引先とのデータ交換のためのルールと設定を構成します(例:EDI、AS2)。
|
||||
* バッチ構成:メッセージを効率的にグループ化して処理するためのバッチ処理構成を管理します。
|
||||
* RosettaNet PIP:B2B通信を標準化するためのRosettaNetパートナーインターフェースプロセス(PIP)を構成します。
|
||||
|
||||
#### 列挙
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ Azure Database for MySQL は、MySQL Community Edition に基づいた完全管
|
||||
- コスト削減のための停止/開始機能を提供します。
|
||||
|
||||
### 主な機能
|
||||
* **サーバー管理**: **ad-admin** 機能は、MySQL サーバーの Azure Active Directory (AAD) 管理者を管理することを可能にし、AAD 認証情報を介して管理アクセスを制御します。一方、**identity** 機能は、Azure Managed Identities の割り当てと管理を可能にし、Azure リソースへの安全な認証情報なしの認証を提供します。
|
||||
* **サーバー管理**: **ad-admin** 機能により、MySQL サーバーの Azure Active Directory (AAD) 管理者を管理でき、AAD 認証情報を介して管理アクセスを制御します。一方、**identity** 機能は、Azure Managed Identities の割り当てと管理を可能にし、Azure リソースへの安全な認証なしのアクセスを提供します。
|
||||
* **ライフサイクル管理**: サーバーの開始または停止、フレキシブルサーバーインスタンスの削除、構成変更を迅速に適用するためのサーバーの再起動、オートメーションスクリプトを進める前に特定の条件を満たすことを確認するための待機オプションがあります。
|
||||
* **セキュリティとネットワーキング**: セキュアなデータベースアクセスのためのサーバーファイアウォールルールを管理し、必要に応じて仮想ネットワーク構成を切り離すことができます。
|
||||
* **データ保護とバックアップ**: データ回復のためのフレキシブルサーバーのバックアップを管理するオプション、異なるリージョンでサーバーを回復するためのジオリストア、外部使用のためのサーバーバックアップのエクスポート(プレビュー中)、特定の時点にバックアップからサーバーを復元するオプションが含まれています。
|
||||
@@ -147,7 +147,7 @@ az mysql flexible-server deploy run \
|
||||
|
||||
## ToDo
|
||||
|
||||
* mysql flexible-server ad-admin にアクセスする方法を探して、権限昇格の手法であることを確認する
|
||||
* mysql flexible-server ad-admin にアクセスする方法を探して、これは権限昇格の手法であることを確認する
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
### 主な機能
|
||||
|
||||
* **カスタムメンテナンスウィンドウ**: 中断を最小限に抑えるために更新をスケジュールします。
|
||||
* **アクティブモニタリング**: 詳細なメトリクスとログにアクセスしてデータベースのパフォーマンスを追跡し、改善します。
|
||||
* **アクティブモニタリング**: データベースのパフォーマンスを追跡し改善するための詳細なメトリクスとログにアクセスします。
|
||||
* **サーバーの停止/開始**: ユーザーはサーバーを停止および開始できます。
|
||||
* **自動バックアップ**: 最大35日間の保持期間を設定可能な組み込みの毎日のバックアップ。
|
||||
* **ロールベースのアクセス**: Azure Active Directory を通じてユーザー権限と管理アクセスを制御します。
|
||||
@@ -122,7 +122,7 @@ psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser
|
||||
../az-privilege-escalation/az-postgresql-privesc.md
|
||||
{{#endref}}
|
||||
|
||||
## ポストエクスプロイト
|
||||
## ポストエクスプロイテーション
|
||||
|
||||
{{#ref}}
|
||||
../az-post-exploitation/az-postgresql-post-exploitation.md
|
||||
@@ -130,7 +130,7 @@ psql -h testpostgresserver1994.postgres.database.azure.com -p 5432 -U adminuser
|
||||
|
||||
## ToDo
|
||||
|
||||
* ad-adminでアクセスする方法を探して、権限昇格の手法であることを確認する
|
||||
* ad-adminでアクセスする方法を探して、これは権限昇格の手法であることを確認する
|
||||
|
||||
|
||||
{{#include ../../../banners/hacktricks-training.md}}
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
|
||||
## Service Bus
|
||||
|
||||
Azure Service Busは、アプリケーションの異なる部分または別々のアプリケーション間の信頼性のある**通信**を可能にするために設計されたクラウドベースの**メッセージングサービス**です。これは、安全な仲介者として機能し、送信者と受信者が同時に操作していなくてもメッセージが安全に配信されることを保証します。システムを分離することで、アプリケーションは独立して動作しながらデータや指示を交換できます。これは、複数のワーカー間での負荷分散、信頼性のあるメッセージ配信、または順序通りのタスク処理やアクセス管理のような複雑な調整が必要なシナリオに特に役立ちます。
|
||||
Azure Service Busは、アプリケーションの異なる部分や別のアプリケーション間での信頼性のある**通信を可能にするために設計された**クラウドベースの**メッセージングサービス**です。これは、安全な仲介者として機能し、送信者と受信者が同時に動作していなくてもメッセージが安全に配信されることを保証します。システムを分離することで、アプリケーションは独立して動作しながらデータや指示を交換できます。これは、複数のワーカー間での負荷分散、信頼性のあるメッセージ配信、または順序通りのタスク処理やアクセスの安全な管理など、複雑な調整が必要なシナリオに特に役立ちます。
|
||||
|
||||
### Key Concepts
|
||||
|
||||
@@ -24,7 +24,7 @@ Azure Service Busは、アプリケーションの異なる部分または別々
|
||||
|
||||
- **メッセージセッション**: FIFO処理を保証し、リクエスト-レスポンスパターンをサポートします。
|
||||
- **自動転送**: 同じネームスペース内のキューまたはトピック間でメッセージを転送します。
|
||||
- **デッドレター**: 配信できないメッセージをレビューのためにキャプチャします。
|
||||
- **デッドレター**: 配信不能なメッセージをレビューのためにキャプチャします。
|
||||
- **スケジュール配信**: 将来のタスクのためにメッセージ処理を遅延させます。
|
||||
- **メッセージ延期**: 準備ができるまでメッセージの取得を延期します。
|
||||
- **トランザクション**: 操作を原子的な実行にグループ化します。
|
||||
@@ -42,7 +42,7 @@ SASポリシーは、Azure Service Busエンティティネームスペース(
|
||||
- 送信: エンティティにメッセージを送信することを許可します。
|
||||
- リスン: エンティティからメッセージを受信することを許可します。
|
||||
- **プライマリおよびセカンダリキー**: アクセスを認証するための安全なトークンを生成するために使用される暗号化キーです。
|
||||
- **プライマリおよびセカンダリ接続文字列**: エンドポイントとキーを含む事前構成された接続文字列で、アプリケーションでの簡単な使用のために提供されます。
|
||||
- **プライマリおよびセカンダリ接続文字列**: エンドポイントとキーを含む事前設定された接続文字列で、アプリケーションでの使用が簡単です。
|
||||
- **SASポリシーARM ID**: プログラムによる識別のためのポリシーへのAzureリソースマネージャー(ARM)パスです。
|
||||
|
||||
### NameSpace
|
||||
|
||||
@@ -21,15 +21,15 @@ Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウド
|
||||
- **標準セキュリティ**: これは特別な構成を必要としないデフォルトのセキュリティタイプです。
|
||||
- **信頼できる起動**: このセキュリティタイプは、Secure Boot と仮想トラステッドプラットフォームモジュール (vTPM) を使用して、ブートキットやカーネルレベルのマルウェアに対する保護を強化します。
|
||||
- **機密 VM**: 信頼できる起動に加えて、VM、ハイパーバイザー、およびホスト管理間のハードウェアベースの分離を提供し、ディスク暗号化を改善し、[**その他**](https://learn.microsoft.com/en-us/azure/confidential-computing/confidential-vm-overview)**。**
|
||||
- **認証**: デフォルトでは新しい **SSH キーが生成されます**が、公開鍵を使用したり、以前のキーとデフォルトのユーザー名 **azureuser** を使用することも可能です。**パスワード**を使用するように構成することもできます。
|
||||
- **認証**: デフォルトでは新しい **SSH キーが生成されます**が、公開鍵を使用したり、以前のキーとデフォルトのユーザー名 **azureuser** を使用することも可能です。また、**パスワード**を使用するように構成することもできます。
|
||||
- **VM ディスク暗号化**: ディスクはデフォルトでプラットフォーム管理キーを使用して静止状態で暗号化されます。
|
||||
- **ホストでの暗号化**を有効にすることも可能で、データはストレージサービスに送信する前にホストで暗号化され、ホストとストレージサービス間のエンドツーエンドの暗号化が保証されます ([**ドキュメント**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data)).
|
||||
- **ホストでの暗号化**を有効にすることも可能で、データはストレージサービスに送信する前にホストで暗号化され、ホストとストレージサービス間のエンドツーエンドの暗号化が保証されます ([**ドキュメント**](https://learn.microsoft.com/en-gb/azure/virtual-machines/disk-encryption#encryption-at-host---end-to-end-encryption-for-your-vm-data))。
|
||||
- **NIC ネットワークセキュリティグループ**:
|
||||
- **なし**: 基本的にすべてのポートを開放します
|
||||
- **基本**: HTTP (80)、HTTPS (443)、SSH (22)、RDP (3389) の受信ポートを簡単に開放できます
|
||||
- **高度**: セキュリティグループを選択します
|
||||
- **バックアップ**: **標準**バックアップ (1 日に 1 回) と **強化** (1 日に複数回) を有効にすることができます
|
||||
- **パッチオーケストレーションオプション**: これは、選択したポリシーに従って VM に自動的にパッチを適用することを可能にします ([**ドキュメント**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching)).
|
||||
- **パッチオーケストレーションオプション**: これは、選択したポリシーに従って VM に自動的にパッチを適用することを可能にします ([**ドキュメント**](https://learn.microsoft.com/en-us/azure/virtual-machines/automatic-vm-guest-patching))。
|
||||
- **アラート**: VM で何かが発生したときに、メールやモバイルアプリで自動的にアラートを受け取ることができます。デフォルトのルール:
|
||||
- CPU 使用率が 80% を超える
|
||||
- 利用可能なメモリバイトが 1GB 未満
|
||||
@@ -45,7 +45,7 @@ Azure 仮想マシン (VMs) は、柔軟でオンデマンドの **クラウド
|
||||
|
||||
## ディスクとスナップショット
|
||||
|
||||
- **2 つ以上の VM にディスクをアタッチすることを有効にする**ことができます。
|
||||
- **ディスクを 2 つ以上の VM にアタッチすることを有効にする**ことができます。
|
||||
- デフォルトでは、すべてのディスクは **暗号化**されています。
|
||||
- スナップショットでも同様です。
|
||||
- デフォルトでは、**すべてのネットワークからディスクを共有する**ことが可能ですが、特定の **プライベートアクセス** のみに **制限**したり、**公開およびプライベートアクセスを完全に無効に**することもできます。
|
||||
@@ -76,10 +76,10 @@ Get-AzDisk -Name <DiskName> -ResourceGroupName <ResourceGroupName>
|
||||
|
||||
## 画像、ギャラリー画像と復元ポイント
|
||||
|
||||
**VMイメージ**は、**新しい仮想マシン(VM)**を作成するために必要なオペレーティングシステム、アプリケーション設定、ファイルシステムを含むテンプレートです。イメージとディスクスナップショットの違いは、ディスクスナップショットが単一の管理ディスクの読み取り専用の時点コピーであり、主にバックアップやトラブルシューティングに使用されるのに対し、イメージは**複数のディスクを含むことができ、新しいVMを作成するためのテンプレートとして機能するように設計されています**。\
|
||||
イメージは、Azureの**イメージセクション**または**Azureコンピュートギャラリー**内で管理でき、これにより**バージョン**を生成したり、イメージをテナント間で**共有**したり、さらには公開することも可能です。
|
||||
**VMイメージ**は、**新しい仮想マシン(VM)**を作成するために必要なオペレーティングシステム、アプリケーション設定、およびファイルシステムを含むテンプレートです。イメージとディスクスナップショットの違いは、ディスクスナップショットが単一の管理ディスクの読み取り専用の時点コピーであり、主にバックアップやトラブルシューティングに使用されるのに対し、イメージは**複数のディスクを含むことができ、新しいVMを作成するためのテンプレートとして機能するように設計されています**。\
|
||||
イメージは、Azureの**イメージセクション**または**Azureコンピュートギャラリー**内で管理でき、**バージョン**を生成したり、イメージをテナント間で**共有**したり、さらには公開することもできます。
|
||||
|
||||
**復元ポイント**は、VMの構成と**時点**でのアプリケーション整合性のある**すべての管理ディスクのスナップショット**を保存します。これはVMに関連しており、その目的は特定の時点でのVMを復元できるようにすることです。
|
||||
**復元ポイント**は、VMの構成と、VMに接続されているすべての管理ディスクの**時点での**アプリケーション整合性のある**スナップショット**を保存します。これはVMに関連しており、その目的は特定の時点でのVMを復元できるようにすることです。
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -144,15 +144,15 @@ Get-AzRestorePointCollection -Name <CollectionName> -ResourceGroupName <Resource
|
||||
|
||||
## Azure Site Recovery
|
||||
|
||||
[**ドキュメント**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview)から: Site Recoveryは、障害時にビジネスアプリケーションとワークロードを稼働させることで、ビジネスの継続性を確保するのに役立ちます。Site Recoveryは、物理および仮想マシン(VM)で稼働しているワークロードをプライマリサイトからセカンダリロケーションに**レプリケート**します。プライマリサイトで障害が発生した場合、セカンダリロケーションにフェイルオーバーし、そこからアプリにアクセスします。プライマリロケーションが再稼働した後、元に戻すことができます。
|
||||
[**ドキュメント**](https://learn.microsoft.com/en-us/azure/site-recovery/site-recovery-overview)から: Site Recoveryは、障害時にビジネスアプリケーションとワークロードを稼働させることで、ビジネスの継続性を確保します。Site Recoveryは、物理および仮想マシン(VM)で稼働しているワークロードをプライマリサイトからセカンダリロケーションに**レプリケート**します。プライマリサイトで障害が発生した場合、セカンダリロケーションにフェイルオーバーし、そこからアプリにアクセスします。プライマリロケーションが再稼働した後、元に戻すことができます。
|
||||
|
||||
## Azure Bastion
|
||||
|
||||
Azure Bastionは、Azureポータルまたはジャンプボックスを介して、仮想マシン(VM)への安全でシームレスな**リモートデスクトッププロトコル(RDP)**および**セキュアシェル(SSH)**アクセスを可能にします。これにより、VMに対する**パブリックIPアドレスの必要性を排除**します。
|
||||
|
||||
Bastionは、必要なVNetに`AzureBastionSubnet`という名前のサブネットを`/26`のネットマスクでデプロイします。次に、`RDP`および`SSH`を使用してブラウザ経由で内部VMに**接続**できるようにし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
|
||||
Bastionは、必要なVNetに`AzureBastionSubnet`という名前のサブネットを`/26`のネットマスクでデプロイします。次に、ブラウザを使用して`RDP`および`SSH`を介して内部VMに**接続**できるようにし、VMのポートをインターネットに公開することを避けます。また、**ジャンプホスト**としても機能します。
|
||||
|
||||
サブスクリプション内のすべてのAzure Bastionホストをリストし、それらを介してVMに接続するには、次のコマンドを使用できます:
|
||||
サブスクリプション内のすべてのAzure Bastionホストをリストし、それらを介してVMに接続するには、次のコマンドを使用できます。
|
||||
|
||||
{{#tabs}}
|
||||
{{#tab name="az cli"}}
|
||||
@@ -635,7 +635,7 @@ az sig gallery-application list --gallery-name <gallery-name> --resource-group <
|
||||
> [!CAUTION]
|
||||
> **個々のアプリやギャラリーを他のサブスクリプションやテナントと共有することが可能です**。これは非常に興味深いことで、攻撃者がアプリケーションにバックドアを仕掛け、他のサブスクリプションやテナントにピボットすることを可能にするかもしれません。
|
||||
|
||||
しかし、**vmアプリ用の「マーケットプレイス」は、拡張機能用のものとは異なります**。
|
||||
しかし、**vmアプリ用の「マーケットプレイス」は、拡張機能用のものとは異なり存在しません**。
|
||||
|
||||
必要な権限は次のとおりです:
|
||||
|
||||
@@ -729,7 +729,7 @@ az vm application set \
|
||||
|
||||
### ユーザーデータ
|
||||
|
||||
これは**永続データ**であり、メタデータエンドポイントからいつでも取得できます。Azureのユーザーデータは、**ここにスクリプトを置いてもデフォルトでは実行されない**ため、AWSやGCPとは異なります。
|
||||
これは**永続データ**であり、メタデータエンドポイントからいつでも取得できます。AzureのユーザーデータはAWSやGCPとは異なることに注意してください。**ここにスクリプトを置いても、デフォルトでは実行されません**。
|
||||
|
||||
### カスタムデータ
|
||||
|
||||
@@ -737,8 +737,8 @@ VMにいくつかのデータを渡すことが可能で、期待されるパス
|
||||
|
||||
- **Windows**では、カスタムデータは`%SYSTEMDRIVE%\AzureData\CustomData.bin`にバイナリファイルとして配置され、処理されません。
|
||||
- **Linux**では、`/var/lib/waagent/ovf-env.xml`に保存されていましたが、現在は`/var/lib/waagent/CustomData/ovf-env.xml`に保存されています。
|
||||
- **Linuxエージェント**: デフォルトではカスタムデータを処理しないため、データが有効なカスタムイメージが必要です。
|
||||
- **cloud-init:** デフォルトではカスタムデータを処理し、このデータは[**いくつかのフォーマット**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)である可能性があります。カスタムデータにスクリプトを送信するだけで、スクリプトを簡単に実行できます。
|
||||
- **Linuxエージェント**:デフォルトではカスタムデータを処理しません。データが有効なカスタムイメージが必要です。
|
||||
- **cloud-init:** デフォルトではカスタムデータを処理し、このデータは[**いくつかのフォーマット**](https://cloudinit.readthedocs.io/en/latest/explanation/format.html)である可能性があります。カスタムデータにスクリプトを送信するだけで、簡単にスクリプトを実行できます。
|
||||
- UbuntuとDebianの両方がここに置いたスクリプトを実行することを試しました。
|
||||
- これが実行されるためにユーザーデータを有効にする必要はありません。
|
||||
```bash
|
||||
|
||||
@@ -9,7 +9,7 @@ Azureは、ユーザーがAzureクラウド内に**孤立した****ネットワ
|
||||
|
||||
## 仮想ネットワーク(VNET)とサブネット
|
||||
|
||||
Azure仮想ネットワーク(VNet)は、クラウド内の自分のネットワークの表現であり、サブスクリプションに専用のAzure環境内で**論理的な隔離**を提供します。VNetは、Azureで仮想プライベートネットワーク(VPN)をプロビジョニングおよび管理できるようにし、仮想マシン(VM)、データベース、アプリケーションサービスなどのリソースをホストします。これにより、IPアドレス範囲、サブネットの作成、ルートテーブル、ネットワークゲートウェイなどの**ネットワーク設定を完全に制御**できます。
|
||||
Azure仮想ネットワーク(VNet)は、クラウド内の自分のネットワークの表現であり、サブスクリプションに専用のAzure環境内での**論理的隔離**を提供します。VNetは、Azureで仮想プライベートネットワーク(VPN)をプロビジョニングおよび管理できるようにし、仮想マシン(VM)、データベース、アプリケーションサービスなどのリソースをホストします。これにより、IPアドレス範囲、サブネットの作成、ルートテーブル、ネットワークゲートウェイなどの**ネットワーク設定に対する完全な制御**が提供されます。
|
||||
|
||||
**サブネット**は、特定の**IPアドレス範囲**によって定義されたVNet内の細分化です。VNetを複数のサブネットに分割することで、ネットワークアーキテクチャに応じてリソースを整理し、保護できます。\
|
||||
デフォルトでは、同じAzure仮想ネットワーク(VNet)内のすべてのサブネットは、制限なしに**相互に通信**できます。
|
||||
@@ -93,18 +93,18 @@ Get-AzNetworkSecurityGroup -Name <NSGName> -ResourceGroupName <ResourceGroupName
|
||||
|
||||
Azure Firewallは、クラウドリソースを保護するためにトラフィックを検査および制御する**管理されたネットワークセキュリティサービス**です。これは**ステートフルファイアウォール**であり、レイヤー3から7のルールに基づいてトラフィックをフィルタリングし、**Azure内**(東西トラフィック)および**外部ネットワークとの間**(南北トラフィック)の通信をサポートします。**仮想ネットワーク(VNet)レベル**で展開され、VNet内のすべてのサブネットに対して集中保護を提供します。Azure Firewallは、トラフィックの需要に応じて自動的にスケールし、手動設定を必要とせずに高可用性を確保します。
|
||||
|
||||
これは、特定の顧客ニーズに合わせた**Basic**、**Standard**、および**Premium**の3つのSKUで利用可能です:
|
||||
これは、特定の顧客ニーズに合わせた3つのSKU—**Basic**、**Standard**、および**Premium**で利用可能です:
|
||||
|
||||
| Criteria/Feature | Option 1 | Option 2 | Option 3 |
|
||||
| ------------------------------ | ------------------------------------------------- | ------------------------------------------- | --------------------------------------------------------- |
|
||||
| **Recommended Use Case** | 限られたニーズを持つ中小企業(SMB) | 一般的な企業利用、レイヤー3–7フィルタリング | 高度に機密性の高い環境(例:支払い処理) |
|
||||
| **Performance** | 最大250 Mbpsのスループット | 最大30 Gbpsのスループット | 最大100 Gbpsのスループット |
|
||||
| **Threat Intelligence** | アラートのみ | アラートとブロック(悪意のあるIP/ドメイン) | アラートとブロック(高度な脅威インテリジェンス) |
|
||||
| **L3–L7 Filtering** | 基本的なフィルタリング | プロトコル全体にわたるステートフルフィルタリング | 高度な検査を伴うステートフルフィルタリング |
|
||||
| **Advanced Threat Protection** | 利用不可 | 脅威インテリジェンスに基づくフィルタリング | 侵入検知および防止システム(IDPS)を含む |
|
||||
| **TLS Inspection** | 利用不可 | 利用不可 | インバウンド/アウトバウンドTLS終端をサポート |
|
||||
| **Availability** | 固定バックエンド(2つのVM) | オートスケーリング | オートスケーリング |
|
||||
| **Ease of Management** | 基本的なコントロール | ファイアウォールマネージャー経由で管理 | ファイアウォールマネージャー経由で管理 |
|
||||
| **推奨使用ケース** | 限定的なニーズを持つ中小企業(SMB) | 一般的な企業利用、レイヤー3–7フィルタリング | 高度に機密性の高い環境(例:支払い処理) |
|
||||
| **パフォーマンス** | 最大250 Mbpsのスループット | 最大30 Gbpsのスループット | 最大100 Gbpsのスループット |
|
||||
| **脅威インテリジェンス** | アラートのみ | アラートとブロック(悪意のあるIP/ドメイン) | アラートとブロック(高度な脅威インテリジェンス) |
|
||||
| **L3–L7フィルタリング** | 基本的なフィルタリング | プロトコル全体にわたるステートフルフィルタリング | 高度な検査を伴うステートフルフィルタリング |
|
||||
| **高度な脅威保護** | 利用不可 | 脅威インテリジェンスに基づくフィルタリング | 侵入検知および防止システム(IDPS)を含む |
|
||||
| **TLS検査** | 利用不可 | 利用不可 | インバウンド/アウトバウンドTLS終端をサポート |
|
||||
| **可用性** | 固定バックエンド(2つのVM) | オートスケーリング | オートスケーリング |
|
||||
| **管理の容易さ** | 基本的なコントロール | ファイアウォールマネージャー経由で管理 | ファイアウォールマネージャー経由で管理 |
|
||||
|
||||
### Enumeration
|
||||
|
||||
@@ -172,16 +172,16 @@ Get-AzRouteTable
|
||||
|
||||
## Azure Private Link
|
||||
|
||||
Azure Private Linkは、**Azureサービスへのプライベートアクセスを可能にするAzureのサービス**です。これにより、**Azure仮想ネットワーク(VNet)とサービス間のトラフィックが完全にMicrosoftのAzureバックボーンネットワーク内を移動することが保証されます**。これにより、サービスがVNetに取り込まれます。この設定は、データをパブリックインターネットにさらさないことでセキュリティを強化します。
|
||||
Azure Private Linkは、**Azureサービスへのプライベートアクセスを可能にするAzureのサービス**です。これは、**Azure仮想ネットワーク(VNet)とサービス間のトラフィックが完全にMicrosoftのAzureバックボーンネットワーク内を移動することを保証します**。これにより、サービスがVNetに取り込まれます。この設定は、データを公共のインターネットにさらさないことでセキュリティを強化します。
|
||||
|
||||
Private Linkは、Azure Storage、Azure SQL Database、Private Linkを介して共有されるカスタムサービスなど、さまざまなAzureサービスで使用できます。これにより、自分のVNet内または異なるAzureサブスクリプションからサービスを安全に利用する方法が提供されます。
|
||||
Private Linkは、Azure Storage、Azure SQL Database、Private Linkを介して共有されるカスタムサービスなど、さまざまなAzureサービスで使用できます。これは、自分のVNet内または異なるAzureサブスクリプションからサービスを消費するための安全な方法を提供します。
|
||||
|
||||
> [!CAUTION]
|
||||
> NSGはプライベートエンドポイントには適用されないため、Private Linkを含むサブネットにNSGを関連付けても効果はありません。
|
||||
|
||||
**例:**
|
||||
|
||||
**VNetから安全にアクセスしたいAzure SQL Databaseがあるシナリオを考えてみましょう**。通常、これはパブリックインターネットを経由することを含むかもしれません。Private Linkを使用すると、**VNet内にプライベートエンドポイントを作成**し、Azure SQL Databaseサービスに直接接続できます。このエンドポイントにより、データベースは自分のVNetの一部であるかのように見え、プライベートIPアドレスを介してアクセスできるため、安全でプライベートなアクセスが確保されます。
|
||||
あなたが**VNetから安全にアクセスしたいAzure SQL Databaseを持っているシナリオを考えてみてください**。通常、これは公共のインターネットを経由することを含むかもしれません。Private Linkを使用すると、**VNet内にプライベートエンドポイントを作成**し、Azure SQL Databaseサービスに直接接続できます。このエンドポイントにより、データベースは自分のVNetの一部であるかのように見え、プライベートIPアドレスを介してアクセスできるため、安全でプライベートなアクセスが保証されます。
|
||||
|
||||
### **Enumeration**
|
||||
|
||||
@@ -208,7 +208,7 @@ Get-AzPrivateEndpoint | Select-Object Name, Location, ResourceGroupName, Private
|
||||
|
||||
## Azure Service Endpoints
|
||||
|
||||
Azure Service Endpointsは、仮想ネットワークのプライベートアドレス空間とVNetのアイデンティティを、直接接続を介してAzureサービスに拡張します。サービスエンドポイントを有効にすることで、**VNet内のリソースがAzureのバックボーンネットワークを使用して、Azure StorageやAzure SQL DatabaseなどのAzureサービスに安全に接続できるようになります**。これにより、**VNetからAzureサービスへのトラフィックがAzureネットワーク内に留まることが保証され**、より安全で信頼性の高い経路が提供されます。
|
||||
Azure Service Endpointsは、仮想ネットワークのプライベートアドレス空間とVNetのアイデンティティを、直接接続を介してAzureサービスに拡張します。サービスエンドポイントを有効にすることで、**VNet内のリソースがAzureのバックボーンネットワークを使用してAzureサービスに安全に接続できるようになります**。これにより、**VNetからAzureサービスへのトラフィックがAzureネットワーク内に留まることが保証され**、より安全で信頼性の高い経路が提供されます。
|
||||
|
||||
**例:**
|
||||
|
||||
@@ -256,7 +256,7 @@ Microsoftは、[**docs**](https://learn.microsoft.com/en-us/azure/virtual-networ
|
||||
- プライベートリンクは、VNet内のプライベートIPアドレスを持つネットワークインターフェースであるプライベートエンドポイントを介してAzureサービスをVNetにマッピングします。
|
||||
- AzureサービスはこのプライベートIPアドレスを使用してアクセスされ、ネットワークの一部であるかのように見えます。
|
||||
- プライベートリンクを介して接続されたサービスは、VNetまたは接続されたネットワークからのみアクセス可能であり、サービスへの公共のインターネットアクセスはありません。
|
||||
- AzureサービスやAzureにホストされている自分のサービスへの安全な接続を可能にし、他者が共有するサービスへの接続も提供します。
|
||||
- AzureサービスやAzureにホストされている自分のサービスへの安全な接続を可能にし、他者と共有されているサービスへの接続も提供します。
|
||||
- サービスエンドポイントでのサブネットレベルの広範なアクセス制御に対して、VNet内のプライベートエンドポイントを介してより詳細なアクセス制御を提供します。
|
||||
|
||||
要約すると、サービスエンドポイントとプライベートリンクの両方がAzureサービスへの安全な接続を提供しますが、**プライベートリンクはサービスが公共のインターネットにさらされることなくプライベートにアクセスされることを保証することにより、より高いレベルの隔離とセキュリティを提供します**。一方、サービスエンドポイントは、VNet内にプライベートIPを必要とせず、Azureサービスへのシンプルで安全なアクセスが必要な一般的なケースに対して設定が容易です。
|
||||
@@ -265,7 +265,7 @@ Microsoftは、[**docs**](https://learn.microsoft.com/en-us/azure/virtual-networ
|
||||
|
||||
**Azure Front Door**は、**グローバルなウェブアプリケーションの迅速な配信**のためのスケーラブルで安全なエントリーポイントです。これは、グローバルな**負荷分散、サイト加速、SSLオフロード、Webアプリケーションファイアウォール(WAF)**機能など、さまざまなサービスを単一のサービスに**統合**しています。Azure Front Doorは、**ユーザーに最も近いエッジロケーション**に基づいてインテリジェントなルーティングを提供し、最適なパフォーマンスと信頼性を確保します。さらに、URLベースのルーティング、複数サイトホスティング、セッションアフィニティ、アプリケーション層のセキュリティを提供します。
|
||||
|
||||
**Azure Front Door WAF**は、バックエンドコードを変更することなく、**ウェブアプリケーションをウェブベースの攻撃から保護する**ように設計されています。SQLインジェクション、クロスサイトスクリプティング、その他の一般的な攻撃に対する脅威から保護するためのカスタムルールと管理されたルールセットを含んでいます。
|
||||
**Azure Front Door WAF**は、**バックエンドコードを変更することなくウェブアプリケーションをウェブベースの攻撃から保護する**ように設計されています。SQLインジェクション、クロスサイトスクリプティング、その他の一般的な攻撃に対する脅威から保護するためのカスタムルールと管理されたルールセットが含まれています。
|
||||
|
||||
**例:**
|
||||
|
||||
@@ -296,12 +296,12 @@ Get-AzFrontDoorWafPolicy -Name <policyName> -ResourceGroupName <resourceGroupNam
|
||||
|
||||
## Azure Application Gateway と Azure Application Gateway WAF
|
||||
|
||||
Azure Application Gateway は、**ウェブトラフィックのロードバランサー**であり、**ウェブ**アプリケーションへのトラフィックを管理することを可能にします。これは、サービスとしてのアプリケーションデリバリーコントローラー (ADC) において、**レイヤー 7 ロードバランシング、SSL 終端、およびウェブアプリケーションファイアウォール (WAF) 機能**を提供します。主な機能には、URL ベースのルーティング、クッキー ベースのセッションアフィニティ、およびセキュアソケットレイヤー (SSL) オフロードが含まれ、グローバルルーティングやパスベースのルーティングのような複雑なロードバランシング機能を必要とするアプリケーションにとって重要です。
|
||||
Azure Application Gateway は **ウェブトラフィックロードバランサー** であり、**ウェブ** アプリケーションへのトラフィックを管理することを可能にします。これは、サービスとしてのアプリケーションデリバリーコントローラー (ADC) において **レイヤー 7 ロードバランシング、SSL ターミネーション、およびウェブアプリケーションファイアウォール (WAF) 機能** を提供します。主な機能には、URL ベースのルーティング、クッキー ベースのセッションアフィニティ、およびセキュアソケットレイヤー (SSL) オフロードが含まれ、グローバルルーティングやパスベースのルーティングのような複雑なロードバランシング機能を必要とするアプリケーションにとって重要です。
|
||||
|
||||
**例:**
|
||||
|
||||
ユーザーアカウントや支払い処理など、異なる機能のための複数のサブドメインを含むeコマースウェブサイトがあるシナリオを考えてみてください。Azure Application Gateway は、**URL パスに基づいて適切なウェブサーバーにトラフィックをルーティング**できます。たとえば、`example.com/accounts` へのトラフィックはユーザーアカウントサービスに、`example.com/pay` へのトラフィックは支払い処理サービスに向けられる可能性があります。\
|
||||
そして、**WAF 機能を使用してウェブサイトを攻撃から保護します。**
|
||||
複数のサブドメインを持つeコマースウェブサイトがあるシナリオを考えてみてください。これには、ユーザーアカウントや支払い処理などの異なる機能が含まれます。Azure Application Gateway は **URL パスに基づいて適切なウェブサーバーにトラフィックをルーティング** できます。たとえば、`example.com/accounts` へのトラフィックはユーザーアカウントサービスに、`example.com/pay` へのトラフィックは支払い処理サービスに向けられる可能性があります。\
|
||||
そして **WAF 機能を使用してウェブサイトを攻撃から保護します。**
|
||||
|
||||
### **列挙**
|
||||
|
||||
@@ -325,13 +325,13 @@ az network application-gateway waf-config list --gateway-name <AppGatewayName> -
|
||||
**VNet Peering**は、Azureのネットワーキング機能であり、**異なる仮想ネットワーク(VNet)を直接かつシームレスに接続することを可能にします**。VNetピアリングを通じて、1つのVNet内のリソースは、**同じネットワークにいるかのように、別のVNet内のリソースとプライベートIPアドレスを使用して通信できます**。\
|
||||
**VNetピアリングは、オンプレミスネットワークとも使用できます**。サイト間VPNまたはAzure ExpressRouteを設定することで実現します。
|
||||
|
||||
**Azure Hub and Spoke**は、Azureでネットワークトラフィックを管理および整理するために使用されるネットワークトポロジーです。**「ハブ」は、異なる「スポーク」間のトラフィックを制御しルーティングする中央ポイントです**。ハブには通常、ネットワーク仮想アプライアンス(NVA)、Azure VPN Gateway、Azure Firewall、またはAzure Bastionなどの共有サービスが含まれています。**「スポーク」は、ワークロードをホストし、VNetピアリングを使用してハブに接続するVNetです**。これにより、ハブ内の共有サービスを活用できます。このモデルは、クリーンなネットワークレイアウトを促進し、異なるVNet間で複数のワークロードが使用できる共通サービスを集中化することで複雑さを軽減します。
|
||||
**Azure Hub and Spoke**は、Azureでネットワークトラフィックを管理および整理するために使用されるネットワークトポロジーです。**「ハブ」は、異なる「スポーク」間のトラフィックを制御しルーティングする中央ポイントです**。ハブには通常、ネットワーク仮想アプライアンス(NVA)、Azure VPN Gateway、Azure Firewall、またはAzure Bastionなどの共有サービスが含まれます。**「スポーク」は、ワークロードをホストし、VNetピアリングを使用してハブに接続するVNetです**。これにより、ハブ内の共有サービスを活用できます。このモデルは、クリーンなネットワークレイアウトを促進し、異なるVNet間で複数のワークロードが使用できる共通サービスを集中化することで複雑さを軽減します。
|
||||
|
||||
> [!CAUTION] > **AzureにおけるVNETピアリングは非推移的です**。つまり、スポーク1がスポーク2に接続され、スポーク2がスポーク3に接続されている場合、スポーク1はスポーク3と直接通信できません。
|
||||
> [!CAUTION] > **AzureではVNETピアリングは非推移的であり**、スポーク1がスポーク2に接続され、スポーク2がスポーク3に接続されている場合、スポーク1はスポーク3と直接通信できません。
|
||||
|
||||
**例:**
|
||||
|
||||
販売、HR、開発などの別々の部門を持つ会社を想像してください。**それぞれが独自のVNet(スポーク)を持っています**。これらのVNetは、**中央データベース、ファイアウォール、インターネットゲートウェイなどの共有リソースへのアクセスを必要とします**。これらはすべて**別のVNet(ハブ)**にあります。ハブとスポークモデルを使用することで、各部門は**ハブVNetを介して共有リソースに安全に接続でき、これらのリソースをパブリックインターネットにさらすことなく、複雑なネットワーク構造を作成することなく接続できます**。
|
||||
販売、HR、開発などの別々の部門を持つ会社を想像してください。**各部門には独自のVNet(スポーク)が存在します**。これらのVNetは、**中央データベース、ファイアウォール、インターネットゲートウェイなどの共有リソースへのアクセスを必要とします**。これらのリソースはすべて**別のVNet(ハブ)**にあります。ハブとスポークモデルを使用することで、各部門は**ハブVNetを介して共有リソースに安全に接続でき、これらのリソースをパブリックインターネットにさらすことなく、複雑なネットワーク構造を作成することなく接続できます**。
|
||||
|
||||
### Enumeration
|
||||
|
||||
@@ -364,11 +364,11 @@ Get-AzFirewall
|
||||
|
||||
## サイト間VPN
|
||||
|
||||
Azureのサイト間VPNは、**オンプレミスネットワークをAzure仮想ネットワーク(VNet)に接続**することを可能にし、Azure内のVMなどのリソースがローカルネットワーク上にあるかのように見えるようにします。この接続は、**2つのネットワーク間のトラフィックを暗号化するVPNゲートウェイ**を通じて確立されます。
|
||||
Azureのサイト間VPNは、**オンプレミスネットワークをAzure仮想ネットワーク(VNet)に接続**することを可能にし、Azure内のVMなどのリソースがローカルネットワーク上にあるかのように見えるようにします。この接続は、**トラフィックを暗号化するVPNゲートウェイ**を介して確立されます。
|
||||
|
||||
**例:**
|
||||
|
||||
ニューヨークに本社を置く企業が、Azure内のVNetに安全に接続する必要があるオンプレミスデータセンターを持っています。このVNetは、仮想化されたワークロードをホストしています。**サイト間VPNを設定することで、企業はオンプレミスサーバーとAzure VM間の暗号化された接続を確保でき、両方の環境でリソースに安全にアクセスできるようになります。**
|
||||
ニューヨークに本社を置く企業が、Azure内のVNetに安全に接続する必要があるオンプレミスデータセンターを持っています。このVNetは仮想化されたワークロードをホストしています。**サイト間VPNを設定することで、企業はオンプレミスサーバーとAzure VM間の暗号化された接続を確保でき、両方の環境でリソースに安全にアクセスできるようになります。**
|
||||
|
||||
### **列挙**
|
||||
|
||||
|
||||
@@ -14,11 +14,11 @@ Podのセキュリティコンテキストを指定する際、いくつかの
|
||||
- **runAsGroup**や**supplementaryGroups**を介して**privilege** **group**アクセスを与えない
|
||||
|
||||
| パラメータ | 説明 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>ポッド内の<strong>すべてのコンテナ</strong>に適用される特別な補助グループ。いくつかのボリュームタイプでは、Kubeletがそのボリュームの<strong>所有権を変更</strong>できる:<br>1. 所有するGIDはFSGroupになります<br>2. setgidビットが設定されている(ボリューム内で作成された新しいファイルはFSGroupが所有)<br>3. パーミッションビットはrw-rw----とORされる。未設定の場合、Kubeletはボリュームの所有権とパーミッションを変更しません。</p> |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroup</strong></a><br><em>integer</em></p> | <p>ポッド内の<strong>すべてのコンテナ</strong>に適用される特別な補助グループ。いくつかのボリュームタイプでは、Kubeletがそのボリュームの<strong>所有権を変更</strong>できる:<br>1. 所有するGIDはFSGroupになります<br>2. setgidビットが設定されます(ボリューム内で作成された新しいファイルはFSGroupが所有します)<br>3. パーミッションビットはrw-rw----とORされます。未設定の場合、Kubeletはボリュームの所有権とパーミッションを変更しません。</p> |
|
||||
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>fsGroupChangePolicy</strong></a><br><em>string</em></p> | ボリュームの**所有権とパーミッションを変更する**動作を定義します。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**GID**。未設定の場合はランタイムのデフォルトを使用します。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | コンテナが非rootユーザーとして実行される必要があることを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0(root)として実行されないことを確認し、そうでない場合はコンテナの起動に失敗します。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | コンテナが非rootユーザーとして実行される必要があることを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0(root)として実行されないことを確認し、そうであればコンテナの起動に失敗します。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**UID**。未指定の場合は、イメージメタデータで指定されたユーザーがデフォルトになります。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>More info about</em> <em><strong>seLinux</strong></em></p> | **すべてのコンテナに適用されるSELinuxコンテキスト**。未指定の場合、コンテナランタイムは各コンテナに対してランダムなSELinuxコンテキストを割り当てます。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#podsecuritycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a><br><em>More info about</em> <em><strong>Seccomp</strong></em></p> | このポッド内のコンテナが使用する**seccompオプション**。 |
|
||||
@@ -49,7 +49,7 @@ Podのセキュリティコンテキストを指定する際、いくつかの
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>procMount</strong></a><br><em>string</em></p> | procMountは、コンテナに使用する**procマウントのタイプ**を示します。デフォルトはDefaultProcMountで、読み取り専用パスとマスクされたパスに対してコンテナランタイムのデフォルトを使用します。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>readOnlyRootFilesystem</strong></a><br><em>boolean</em></p> | この**コンテナが読み取り専用のルートファイルシステムを持つかどうか**。デフォルトはfalseです。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsGroup</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**GID**。未設定の場合はランタイムのデフォルトを使用します。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | コンテナが**非rootユーザーとして実行される必要がある**ことを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0(root)として実行されないことを確認し、そうでない場合はコンテナの起動に失敗します。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsNonRoot</strong></a><br><em>boolean</em></p> | コンテナが**非rootユーザーとして実行される必要がある**ことを示します。trueの場合、Kubeletはランタイムでイメージを検証し、UID 0(root)として実行されないことを確認し、そうであればコンテナの起動に失敗します。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>runAsUser</strong></a><br><em>integer</em></p> | コンテナプロセスのエントリポイントを実行するための**UID**。未指定の場合は、イメージメタデータで指定されたユーザーがデフォルトになります。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seLinuxOptions</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#selinuxoptions-v1-core"><em>SELinuxOptions</em></a><br><em>More info about</em> <em><strong>seLinux</strong></em></p> | コンテナに適用される**SELinuxコンテキスト**。未指定の場合、コンテナランタイムは各コンテナに対してランダムなSELinuxコンテキストを割り当てます。 |
|
||||
| <p><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#securitycontext-v1-core"><strong>seccompProfile</strong></a><br><a href="https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.23/#seccompprofile-v1-core"><em>SeccompProfile</em></a></p> | このコンテナが使用する**seccompオプション**。 |
|
||||
|
||||
Reference in New Issue
Block a user