AWS IAM ログを収集する
パーサーのバージョン: 1.0
このドキュメントでは、サードパーティ API フィードを使用して AWS Identity and Access Management(IAM)構成データを Google Security Operations に取り込む方法について説明します。
AWS IAM パーサーは、IAM エンティティ データ(ユーザー、グループ、ロール、ポリシー)を構造化された統合データモデル(UDM)に変換し、ユーザーの詳細、ロール情報、権限、タイムスタンプなどのフィールドを抽出して、一貫したセキュリティ分析を行います。
始める前に
次の前提条件を満たしていることを確認してください。
- Google SecOps インスタンス
- AWS コンソールへの特権アクセス
- IAM ユーザーとポリシーを作成する権限
Google SecOps の IP 範囲を取得する
- [設定] > [データ管理] > [フィード] に移動します。SIEM のみのプラットフォームを使用している場合は、[設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- ページの上部に表示されている IP 範囲をメモします。
- または、Feed Management API を使用してプログラムで IP 範囲を取得します。
必要な権限を持つ IAM ユーザーを作成する
重要: Google SecOps が API を使用して AWS IAM データを取得できるようにするには、適切な読み取り権限を持つ IAM ユーザーを作成する必要があります。
オプション A: AWS マネージド ポリシーを使用する(推奨)
- IAM ユーザーの作成のガイドの手順に沿って、ユーザーを作成します。
- 作成したユーザーを選択します。
- [セキュリティ認証情報] タブを選択します。
- [Access Keys] セクションで [Create Access Key] をクリックします。
- [ユースケース] として [サードパーティのサービス] を選択します。
- [Next] をクリックします。
- (省略可)説明タグを追加します。
- [アクセスキーを作成] をクリックします。
- [.csv ファイルをダウンロード] をクリックし、[アクセスキー ID] と [シークレット アクセスキー] を保存して、今後の参照に備えます。
- [完了] をクリックします。
- [権限] タブを選択します。
- [権限ポリシー] セクションで [権限を追加] をクリックします。
- [権限を追加] を選択します。
- [ポリシーを直接アタッチする] を選択します。
- IAMReadOnlyAccess(AWS マネージド ポリシー)を検索します。
- ポリシーを選択します。
- [次へ] をクリックします。
- [権限を追加] をクリックします。
重要: IAMReadOnlyAccess ポリシーには、必要な権限がすべて含まれています。
iam:GetUseriam:ListUsersiam:GetGroupiam:ListGroupsiam:GetPolicyiam:ListPoliciesiam:GetRoleiam:ListRolesiam:ListAttachedUserPoliciesiam:ListAttachedGroupPoliciesiam:ListAttachedRolePoliciesiam:GetAccountSummary
オプション B: カスタム ポリシーを作成する(最小権限)
セキュリティ ポリシーで、マネージド ポリシーではなく最小限の権限が必要な場合:
- AWS コンソールで、[IAM] > [ポリシー] > [ポリシーを作成] > [JSON] タブに移動します。
次のポリシーを貼り付けます。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "iam:GetUser", "iam:ListUsers", "iam:GetGroup", "iam:ListGroups", "iam:GetPolicy", "iam:ListPolicies", "iam:GetRole", "iam:ListRoles", "iam:ListAttachedUserPolicies", "iam:ListAttachedGroupPolicies", "iam:ListAttachedRolePolicies", "iam:GetAccountSummary" ], "Resource": "*" } ] }[次へ] をクリックします。
ポリシーに「
chronicle-iam-api-read-policy」という名前を付けます。[ポリシーを作成] をクリックします。
IAM ユーザーの作成のガイドの手順に沿って、ユーザーを作成します。
作成したユーザーを選択します。
[セキュリティ認証情報] タブを選択します。
[Access Keys] セクションで [Create Access Key] をクリックします。
[ユースケース] として [サードパーティのサービス] を選択します。
[次へ] をクリックします。
- (省略可)説明タグを追加します。
[アクセスキーを作成] をクリックします。
[.csv ファイルをダウンロード] をクリックし、[アクセスキー ID] と [シークレット アクセスキー] を保存して、今後の参照に備えます。
[完了] をクリックします。
[権限] タブを選択します。
[権限ポリシー] セクションで [権限を追加] をクリックします。
[権限を追加] を選択します。
[ポリシーを直接アタッチする] を選択します。
「
chronicle-iam-api-read-policy」を検索して選択します。[次へ] をクリックします。
[権限を追加] をクリックします。
IAM 構成データを取り込むように Google SecOps でフィードを構成する
AWS IAM フィードは、[API タイプ] フィールド([ユーザー]、[ロール]、[グループ])で選択されたフィードごとに 1 つの IAM エンティティ リストを収集します。すべての IAM エンティティを収集するには、API タイプごとに 1 つのフィードを作成します。すべて AWS IAM ログタイプを使用します。
コンテンツ ハブを使用する(推奨)
- [Content Hub] > [Content Packs] > [Get Started] に移動します。
- [Amazon Cloud Platform] パックをクリックします。
- リストで AWS IAM ログタイプを見つけます。
- [ソースタイプ] プルダウンから [サードパーティ API] を選択します。
- 次の構成情報を指定します。
- ユーザー名: 前の手順で作成した IAM ユーザーのアクセスキー ID。
- Secret: 前の手順で作成した IAM ユーザーのシークレット アクセスキー。
- API タイプ: 収集する IAM エンティティ リスト(ユーザー、ロール、グループ)を選択します。
- フィード名: フィードを識別する事前入力された値(例:
AWS IAM Users)。 - アセットの名前空間: フィードに関連付けられた名前空間。
- 取り込みラベル: このフィードのすべてのイベントに適用されるラベル。
- [フィードを作成] をクリックします。
このプロダクト ファミリー内のさまざまなログタイプに複数のフィードを構成する方法については、プロダクト別にフィードを構成するをご覧ください。
SIEM 設定の使用
- [設定] > [データ管理] > [フィード] に移動します。SIEM のみのプラットフォームを使用している場合は、[設定] > [フィード] に移動します。
- [Add New Feed] をクリックします。
- 次のページで、[単一のフィードを構成する] をクリックします。
- [フィード名] フィールドに、フィードの名前を入力します(例:
AWS IAM API Configuration)。 - [ソースタイプ] として [サードパーティ API] を選択します。
- [Log type] で [AWS IAM] を選択します。
- [次へ] をクリックします。
- 次の入力パラメータの値を指定します。
- ユーザー名: 前の手順で作成した IAM ユーザーのアクセスキー ID。
- Secret: 前の手順で作成した IAM ユーザーのシークレット アクセスキー。
- API タイプ: 収集する IAM エンティティ リスト(ユーザー、ロール、グループ)を選択します。
- Asset namespace: アセットの名前空間。
- Ingestion labels: このフィードのイベントに適用されるラベル。
- [次へ] をクリックします。
- [Finalize] 画面で新しいフィードの設定を確認し、[送信] をクリックします。
UDM マッピング テーブル
| ログフィールド | UDM マッピング | ロジック |
|---|---|---|
Group.CreateDate |
entity.group.attribute.creation_time |
ISO8601 として解析 |
Group.Path |
entity.group.attribute.labels.value |
直接マッピングされます。 |
IsTruncated |
entity.group.attribute.labels.value |
直接マッピングされます。 |
Marker |
entity.group.attribute.labels.value |
直接マッピングされます。 |
Group.GroupName |
entity.group.email_addresses |
統合済み |
Group.GroupName |
entity.group.group_display_name |
直接マッピングされます。 |
Group.GroupID |
entity.group.product_object_id |
直接マッピングされます。 |
RoleLastUsed.Region |
entity.location.name |
直接マッピングされます。 |
CreateDate |
entity.resource.attribute.creation_time |
ISO8601 として解析 |
MaxSessionDuration |
entity.resource.attribute.labels.value |
直接マッピングされます。 |
Path |
entity.resource.attribute.labels.value |
直接マッピングされます。 |
RoleLastUsed.LastUsedDate |
entity.resource.attribute.labels.value |
直接マッピングされます。 |
AssumeRolePolicyDocument |
entity.resource.attribute.permissions.name |
直接マッピングされます。 |
Description |
entity.resource.attribute.roles.description |
直接マッピングされます。 |
RoleName |
entity.resource.attribute.roles.name |
直接マッピングされます。 |
Arn |
entity.resource.name |
直接マッピングされます。 |
Group.Arn |
entity.resource.name |
直接マッピングされます。 |
RoleID |
entity.resource.product_object_id |
直接マッピングされます。 |
CreateDate |
entity.user.attribute.creation_time |
ISO8601 として解析 |
PasswordLastUsed |
entity.user.last_login_time |
ISO8601 として解析 |
UserID |
entity.user.product_object_id |
直接マッピングされます。 |
UserName |
entity.user.userid |
直接マッピングされます。 |
PermissionsBoundary.PermissionsBoundaryArn |
relations.entity.resource.attribute.labels.value |
直接マッピングされます。 |
PermissionsBoundary.PermissionsBoundaryType |
relations.entity.resource.attribute.labels.value |
直接マッピングされます。 |
user.PermissionsBoundary.PermissionsBoundaryArn |
relations.entity.resource.attribute.labels.value |
直接マッピングされます。 |
user.PermissionsBoundary.PermissionsBoundaryType |
relations.entity.resource.attribute.labels.value |
直接マッピングされます。 |
user.Arn |
relations.entity.resource.name |
直接マッピングされます。 |
user.CreateDate |
relations.entity.user.attribute.creation_time |
ISO8601 として解析 |
tag.Key |
relations.entity.user.attribute.labels.key |
直接マッピングされます。 |
Path |
relations.entity.user.attribute.labels.value |
直接マッピングされます。 |
tag.Value |
relations.entity.user.attribute.labels.value |
直接マッピングされます。 |
user.Path |
relations.entity.user.attribute.labels.value |
直接マッピングされます。 |
user.PasswordLastUsed |
relations.entity.user.last_login_time |
ISO8601 として解析 |
user.UserID |
relations.entity.user.product_object_id |
直接マッピングされます。 |
user.UserName |
relations.entity.user.userid |
直接マッピングされます。 |
| なし | entity.group.attribute.labels.key |
定数: is_truncated |
| なし | entity.resource.attribute.cloud.environment |
定数: AMAZON_WEB_SERVICES |
| なし | entity.resource.attribute.labels.key |
定数: max_session_duration |
| なし | entity.resource.resource_subtype |
定数: User |
| なし | entity.resource.resource_type |
定数: ACCESS_POLICY |
| なし | metadata.entity_type |
定数: USER |
| なし | metadata.product_name |
定数: AWS IAM |
| なし | metadata.vendor_name |
定数: AWS |
| なし | relations.direction |
定数: UNIDIRECTIONAL |
| なし | relations.entity.resource.attribute.labels.key |
定数: permissions_boundary_arn |
| なし | relations.entity.resource.resource_subtype |
定数: User |
| なし | relations.entity.user.attribute.labels.key |
定数: path |
| なし | relations.entity_type |
定数: USER |
| なし | relations.relationship |
定数: MEMBER |
変更ログ
さらにサポートが必要な場合 コミュニティ メンバーや Google SecOps のプロフェッショナルから回答を得ることができます。