【CloudTrail解説編】IAM操作ってどんなログ出るの？

## はじめに
皆様、CloudTrailをうまく活用出来てますか？
**CloudTrail解説編**の第三弾はIAMに関する操作ログです！

<img width="800" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/90150b4c-aa51-0731-ec74-9b702ff47dfd.png>

ご要望にお応えできるナレッジ提供を続けられたら良いなと思っています。
以下は、過去の記事になります。

**【参考】**
・ [【CloudTrail解説編】AWSマネージメントコンソールのログイン監視][00]
・ [【CloudTrail解説編】VPC操作ってどんなログ出るの？][01]

## 今回実施したこと
マネージメントコンソールでの**IAMに関する操作**に特化した内容になっています。
よく利用する下記のサービスを中心に解説したいと思います。

- IAMユーザ
- IAMグループ
- IAMロール
- IAMポリシー

## テストシナリオ
具体的には以下の31個のシナリオで動作テストしてみました。

| # | サービス名 | 分類 | テストシナリオ | eventName (=API名) |
|---|--------|-----|--------|-----------|
| 01 | IAMユーザ | 作成 | IAMユーザを新規作成する | [CreateUser][02], [CreateLoginProfile][03] |
| 02 | IAMユーザ | 変更 | IAMユーザのパスワードを変更する | [UpdateLoginProfile][04] |
| 03 | IAMユーザ | 変更 | IAMユーザのアクセスキーを発行する | [CreateAccessKey][05] |
| 04 | IAMユーザ | 変更 | IAMユーザでMFAを有効化する | [CreateVirtualMFADevice][06],  [EnableMFADevice][07] |
| 05 | IAMユーザ | 変更 | IAMユーザをIAMグループに追加する | [AddUserToGroup][08] |
| 06 | IAMユーザ | 変更 | IAMユーザにインラインポリシーを付与する | [PutUserPolicy][09] |
| 07 | IAMユーザ | 変更 | IAMユーザにIAMポリシーを付与する | [AttachUserPolicy][10] |
| 08 | IAMユーザ | 変更 | IAMユーザのアクセスキーを無効化する | [UpdateAccessKey][11] |
| 09 | IAMユーザ | 変更 | IAMユーザでMFAを無効化する | [DeleteVirtualMFADevice][12], [DeactivateMFADevice][13] |
| 10 | IAMユーザ | 変更 | IAMユーザをIAMグループから削除する | [RemoveUserFromGroup][14] |
| 11 | IAMユーザ | 変更 | IAMユーザのインラインポリシーを削除する | [DeleteUserPolicy][15] |
| 12 | IAMユーザ | 変更 | IAMユーザのIAMポリシーを削除する | [DetachUserPolicy][16] |
| 13 | IAMユーザ | 削除 | IAMユーザを削除する | [DeleteAccessKey][17], [DeleteLoginProfile][18], [DeleteUser][19] |
| 14 | IAMグループ | 作成 | IAMグループを新規作成する | [CreateGroup][20] |
| 15 | IAMグループ | 変更 | IAMグループのインラインポリシーを付与する | [PutGroupPolicy][21] |
| 16 | IAMグループ | 変更 | IAMグループのIAMポリシーを付与する | [AttachGroupPolicy][22] |
| 17 | IAMグループ | 変更 | IAMグループのインラインポリシーを削除する | [DeleteGroupPolicy][23] |
| 18 | IAMグループ | 変更 | IAMグループのIAMポリシーを削除する | [DetachGroupPolicy][24] |
| 19 | IAMグループ | 削除 | IAMグループを削除する | [DeleteGroup][25] |
| 20 | IAMロール | 作成 | IAMロールを新規作成する | [CreateRole][26] |
| 21 | IAMロール | 変更 | IAMロールのインラインポリシーを付与する | [PutRolePolicy][27] |
| 22 | IAMロール | 変更 | IAMロールのIAMポリシーを付与する | [AttachRolePolicy][28] |
| 23 | IAMロール | 変更 | IAMロールとIAMユーザの信頼関係を結ぶ | [UpdateAssumeRolePolicy][29] |
| 24 | IAMロール | 変更 | IAMロールのインラインポリシーを削除する | [DeleteRolePolicy][30] |
| 25 | IAMロール | 変更 | IAMロールのIAMポリシーを削除する | [DetachRolePolicy][31] |
| 26 | IAMロール | 変更 | IAMロールとIAMユーザの信頼関係を削除する | [UpdateAssumeRolePolicy][29] |
| 27 | IAMロール | 削除 | IAMロールを削除する | [DeleteRole][33] |
| 28 | IAMポリシー | 作成 | IAMポリシーを新規作成する | [CreatePolicy][33] |
| 29 | IAMポリシー | 変更 | IAMポリシーにポリシーを追加する | [CreatePolicyVersion][34] |
| 30 | IAMポリシー | 変更 | IAMポリシーからポリシーを削除する | [CreatePolicyVersion][34] |
| 31 | IAMポリシー | 削除 | IAMポリシーを削除する | [DeletePolicy][35] |

## セキュリティ観点で理解しておいた方が良い内容
以下の内容については、CloudTrailでIAM操作を見張ることをお勧めします。

- IAMユーザを新規作成する (No.01)
- IAMユーザのパスワードを変更する (No.02)
- IAMユーザのアクセスキーを発行する (No.03)
- IAMユーザにインラインポリシーを付与する (No.06)
- IAMロールを新規作成する (No.20)
- IAMロールとIAMユーザの信頼関係を結ぶ (No.23)

## 共通するフィールド
以下、CloudTrail証跡ログのサンプルになります。形式はJSONになります。
`requestParameters`と`responseElements`以外のフィールドはどのイベントにも存在します。

```json:共通するフィールド
{
    "eventVersion": "<ログイベント形式のバージョン>",
    "userIdentity": {
        "type": "<イベントの種類>",
        "principalId": "<呼び出しを行ったエンティティの一意の識別子>",
        "arn": "<操作したIAMユーザのARN>",
        "accountId": "<AWSアカウント(12桁)>",
        "accessKeyId": "<AWSアクセスキー>",
        "userName": "<操作したIAMユーザ名>",
        "sessionContext": {
            "sessionIssuer": {"<認証情報がどのように取得されたかに関する情報>"},
            "webIdFederationData": {"<IDプロバイダーに関する情報>"},
            "attributes": {
                "mfaAuthenticated": "<MFAデバイスによる認証有無(true/false)>",
                "creationDate": "<一時的セキュリティ認証情報が発行された時刻(ISO8601形式)>"
            }
        }
    },
    "eventTime": "<イベント発生時刻(ISO8601形式)>",
    "eventSource": "<リクエストが行われたAWSサービス>",
    "eventName": "<イベント名(=API名)>",
    "awsRegion": "<ログインしたAWSリージョン>",
    "sourceIPAddress": "<送信元IPアドレス>",
    "userAgent": "<接続元のユーザーエージェント(マネージメントコンソール操作だとconsole.amazonaws.comになる)",
    "requestParameters": {
        "<リクエストとともに送信されたパラメータ(後述しますが、APIに応じて内容が異なる)>"
    },
    "responseElements": {
        "<変更を行うアクションのレスポンスの要素(後述しますが、APIに応じて内容が異なる)>"
    },
    "requestID": "<リクエストを識別するID>",
    "eventID": "<CloudTrail証跡ログの中で一意となるイベントID>",
    "readOnly": <読み取り専用の操作であるかどうか(falseになる)>,
    "eventType": "<イベントレコードを生成したイベントのタイプ(AwsApiCallになる)>",
    "managementEvent": <管理用イベントかどうか(trueになる)>,
    "eventCategory": "<イベントのカテゴリ(Managementになる)>",
    "recipientAccountId": "<イベントを受信したAWSアカウント(12桁)>"
}
```

**【参考】**
・ [CloudTrail レコードの内容][36]
・ [CloudTrail userIdentity要素][37]

## 各イベントごとのログ内容
ここからは、シナリオごとに出力された証跡ログの中でも
個々に異なる`requestParameters`と`responseElements`に絞って解説します。

### 1. IAMユーザを新規作成する
`test_user`というIAMユーザを新規作成した時に出力されたログになります。

```json:CreateUser
    "requestParameters": {
        "userName": "test_user",
        "tags": []
    },
    "responseElements": {
        "user": {
            "path": "/",
            "userName": "test_user",
            "userId": "AIDA6BYSTFHIOKMWQZPQK",
            "arn": "arn:aws:iam::123456789012:user/test_user",
            "createDate": "Apr 19, 2021 3:49:02 PM"
        }
    }
```

このIAMユーザはマネージメントコンソールのログインを許可したため
同時にパスワードが生成されています。(パスワードは、LoginProfileに書き込まれます)

```json:CreateLoginProfile
    "requestParameters": {
        "userName": "test_user",
        "passwordResetRequired": false
    },
    "responseElements": {
        "loginProfile": {
            "userName": "test_user",
            "createDate": "Apr 19, 2021 3:49:03 PM",
            "passwordResetRequired": false
        }
    }
```

### 2. IAMユーザのパスワードを変更する
IAMユーザである`test_user`のパスワードを変更した時に出力されたログになります。
パスワード作成時に生成されたLoginProfileを更新する動作になります。

```json:UpdateLoginProfile
    "requestParameters": {
        "userName": "test_user"
    },
    "responseElements": null
```

### 3. IAMユーザのアクセスキーを発行する
IAMユーザである`test_user`でアクセスキーを発行した時に出力されたログになります。
アクセスキーは、アクセスキーID(ここでは`AKIA6BYSTFHIHTUPIP4U`)と
シークレットアクセスキーで構成されます。

```json:CreateAccessKey
    "requestParameters": {
        "userName": "test_user"
    },
    "responseElements": {
        "accessKey": {
            "userName": "test_user",
            "accessKeyId": "AKIA6BYSTFHIHTUPIP4U",
            "status": "Active",
            "createDate": "Apr 19, 2021 3:53:13 PM"
        }
    }
```

### 4. IAMユーザでMFAを有効化する
IAMユーザである`test_user`で仮想MFAを有効化した時に出力されたログになります。

```json:CreateVirtualMFADevice
    "requestParameters": {
        "path": "/",
        "virtualMFADeviceName": "test_user"
    },
    "responseElements": {
        "virtualMFADevice": {
            "serialNumber": "arn:aws:iam::123456789012:mfa/test_user"
        }
    }
```

仮想MFAを生成後、MFAデバイスを有効化するという2種類のログが出力されます。

```json:EnableMFADevice
    "requestParameters": {
        "userName": "test_user",
        "serialNumber": "arn:aws:iam::123456789012:mfa/test_user"
    },
    "responseElements": null
```

### 5. IAMユーザをIAMグループに追加する
IAMユーザである`test_user`を`test_group`というIAMグループに
追加した時に出力されたログになります。

```json:AddUserToGroup
    "requestParameters": {
        "groupName": "test_group",
        "userName": "test_user"
    },
    "responseElements": null
```

### 6. IAMユーザにインラインポリシーを付与する
IAMユーザである`test_user`に`inline_policy1`というインラインポリシーを
割り当てた時に出力されたログになります。

```json:PutUserPolicy
    "requestParameters": {
        "userName": "test_user",
        "policyName": "inline_policy1",
        "policyDocument": "{\n
                            \"Version\": \"2012-10-17\",\n
                            \"Statement\": [\n
                               {\n
                                \"Sid\": \"VisualEditor0\",\n
                                \"Effect\": \"Allow\",\n
                                \"Action\": [\n
                                    \"access-analyzer:ListAnalyzers\",\n 
                                    \"access-analyzer:ListAccessPreviews\",\n
                                    \"access-analyzer:ListArchiveRules\"\n
                                 ],\n
                              \"Resource\": \"*\"\n
                             }\n
                           ]\n
        }"
    },
    "responseElements": null
```

※ `inline_policy1`には、**IAM Access Analyzer**の権限を付与しています。

### 7. IAMユーザにIAMポリシーを付与する
IAMユーザである`test_user`に`test_policy`というIAMポリシーを
割り当てた時に出力されたログになります。

```json:AttachUserPolicy
    "requestParameters": {
        "userName": "test_user",
        "policyArn": "arn:aws:iam::123456789012:policy/test_policy"
    },
    "responseElements": null
```

### 8. IAMユーザのアクセスキーを無効化する
IAMユーザである`test_user`で発行したアクセスキーを無効化した時に
出力されたログになります。

```json:UpdateAccessKey

```

### 9. IAMユーザでMFAを無効化する
IAMユーザである`test_user`で仮想MFAを無効化した時に出力されたログになります。

```json:DeleteVirtualMFADevice
    "requestParameters": {
        "serialNumber": "arn:aws:iam::123456789012:mfa/test_user"
    },
    "responseElements": null
```

MFA有効化時と同様に無効化じも2種類のログが出力されます。

```json:DeactivateMFADevice
    "requestParameters": {
        "userName": "test_user",
        "serialNumber": "arn:aws:iam::123456789012:mfa/test_user"
    },
    "responseElements": null
```

### 10. IAMユーザをIAMグループから削除する
IAMユーザである`test_user`を`test_group`のIAMグループから
削除した時に出力されたログになります。

```json:RemoveUserFromGroup
    "requestParameters": {
        "groupName": "test_group",
        "userName": "test_user"
    },
    "responseElements": null
```

### 11. IAMユーザのインラインポリシーを削除する
IAMユーザである`test_user`から`inline_policy1`というインラインポリシーを
削除した時に出力されたログになります。

```json:DeleteUserPolicy
    "requestParameters": {
        "userName": "test_user",
        "policyName": "inline_policy1"
    },
    "responseElements": null
```

### 12. IAMユーザのIAMポリシーを削除する
IAMユーザである`test_user`から`test_policy`というIAMポリシーを
削除した時に出力されたログになります。

```json:DetachUserPolicy
    "requestParameters": {
        "userName": "test_user",
        "policyArn": "arn:aws:iam::123456789012:policy/test_policy"
    },
    "responseElements": null
```

### 13. IAMユーザを削除する
IAMユーザである`test_user`を削除すると3種類のログが出力されます。
アクセスキーの削除、LoginProfileの削除、ユーザの削除の3種類です。

```json:DeleteAccessKey
    "requestParameters": {
        "userName": "test_user",
        "accessKeyId": "AKIA6BYSTFHIHTUPIP4U"
    },
    "responseElements": null
```

```json:DeleteLoginProfile
    "requestParameters": {
        "userName": "test_user"
    },
    "responseElements": null
```

```json:DeleteUser
    "requestParameters": {
        "userName": "test_user"
    },
    "responseElements": null
```

### 14. IAMグループを新規作成する
`test_group`というIAMグループを新規作成した時に出力されたログになります。

```json:CreateGroup
    "requestParameters": {
        "groupName": "test_group"
    },
    "responseElements": {
        "group": {
            "path": "/",
            "groupName": "test_group",
            "groupId": "AGPA6BYSTFHIGYL72W2SC",
            "arn": "arn:aws:iam::123456789012:group/test_group",
            "createDate": "Apr 19, 2021 3:55:39 PM"
        }
    }
```

### 15. IAMグループのインラインポリシーを付与する
IAMグループである`test_group`に`inline_policy2`というインラインポリシーを
割り当てた時に出力されたログになります。

```json:PutGroupPolicy
    "requestParameters": {
        "groupName": "test_group",
        "policyName": "inline_policy2",
        "policyDocument": "{\n
                            \"Version\": \"2012-10-17\",\n
                            \"Statement\": [\n
                               {\n
                                \"Sid\": \"Stmt1618848610000\",\n
                                \"Effect\": \"Allow\",\n
                                \"Action\": [\n
                                    \"aws-portal:*\"\n
                                 ],\n
                                \"Resource\": [\n
                                  \"*\"\n
                                 ]\n
                               }\n
                             ]\n
                           }"
    },
    "responseElements": null
```

※ `inline_policy2`には、**AWS Portal**の権限を付与しています。

### 16. IAMグループのIAMポリシーを付与する
IAMグループである`test_group`に`test_policy2`というIAMポリシーを
割り当てた時に出力されたログになります。

```json:AttachGroupPolicy
    "requestParameters": {
        "groupName": "test_group",
        "policyArn": "arn:aws:iam::123456789012:policy/test_policy2"
    },
    "responseElements": null
```

### 17. IAMグループのインラインポリシーを削除する
IAMグループである`test_group`から`inline_policy2`というインラインポリシーを
削除した時に出力されたログになります。

```json:DeleteGroupPolicy
    "requestParameters": {
        "groupName": "test_group",
        "policyName": "inline_policy2"
    },
    "responseElements": null
```

### 18. IAMグループのIAMポリシーを削除する
IAMグループである`test_group`から`test_policy2`というIAMポリシーを
削除した時に出力されたログになります。

```json:DetachGroupPolicy
    "requestParameters": {
        "groupName": "test_group",
        "policyArn": "arn:aws:iam::123456789012:policy/test_policy2"
    },
    "responseElements": null
```

### 19. IAMグループを削除する
`test_group`というIAMグループを削除した時に出力されたログになります。

```json:DeleteGroup
    "requestParameters": {
        "groupName": "test_group"
    },
    "responseElements": null
```

### 20. IAMロールを新規作成する
`test_role`というIAMロールを新規作成した時に出力されたログになります。

```json:CreateRole
    "requestParameters": {
        "roleName": "test_role",
        "assumeRolePolicyDocument": "{
                                      \"Version\":\"2012-10-17\",
                                      \"Statement\":[
                                         {
                                          \"Effect\":\"Allow\",
                                          \"Action\":[
                                            \"sts:AssumeRole\"
                                           ],
                                          \"Principal\":{
                                            \"Service\":[
                                              \"ec2.amazonaws.com\"
                                             ]
                                           }
                                         }
                                       ]
                                     }",
        "description": "Allows EC2 instances to call AWS services on your behalf.",
        "tags": []
    },
    "responseElements": {
        "role": {
            "path": "/",
            "roleName": "test_role",
            "roleId": "AROA6BYSTFHIJ2S6TFRFT",
            "arn": "arn:aws:iam::123456789012:role/test_role",
            "createDate": "Apr 19, 2021 4:17:06 PM",
            "assumeRolePolicyDocument": "%7B%22Version%22%3A%222012-10-17%22%2C%22Statement%22%3A%5B%7B%22Effect%22%3A%22Allow%22%2C%22Action%22%3A%5B%22sts%3AAssumeRole%22%5D%2C%22Principal%22%3A%7B%22Service%22%3A%5B%22ec2.amazonaws.com%22%5D%7D%7D%5D%7D"
        }
    }
```

※ 適当にEC2用のIAMロールとして作成しています。

### 21. IAMロールのインラインポリシーを付与する
IAMロールである`test_role`に`inline_policy3`というインラインポリシーを
割り当てた時に出力されたログになります。

```json:PutRolePolicy
    "requestParameters": {
        "roleName": "test_role",
        "policyName": "inline_policy3",
        "policyDocument": "{\n
                            \"Version\": \"2012-10-17\",\n
                            \"Statement\": [\n
                               {\n
                                \"Sid\": \"VisualEditor0\",\n
                                \"Effect\": \"Allow\",\n
                                \"Action\": \"glue:GetMLTaskRuns\",\n
                                \"Resource\": \"*\"\n
                               }\n
                             ]\n
                           }"
    },
    "responseElements": null
```

※ `inline_policy2`には、適当に`glue:GetMLTaskRuns`の権限を付与しています。

### 22. IAMロールのIAMポリシーを付与する

```json:AttachRolePolicy
    "requestParameters": {
        "roleName": "test_role",
        "policyArn": "arn:aws:iam::123456789012:policy/test_policy3"
    },
    "responseElements": null
```

### 23. IAMロールとIAMユーザの信頼関係を結ぶ
IAMロールである`test_role`とIAMユーザである`test_user`で
信頼関係を結んだ時に出力されたログになります。

```json:UpdateAssumeRolePolicy
    "requestParameters": {
        "roleName": "test_role",
        "policyDocument": "{\n
                            \"Version\": \"2012-10-17\",\n
                            \"Statement\": [\n
                               {\n
                                \"Effect\": \"Allow\",\n
                                \"Principal\": {\n
                                  \"AWS\": \"arn:aws:iam::123456789012:user/test_user\"\n
                                 },\n
                                \"Action\": \"sts:AssumeRole\"\n
                               }\n
                             ]\n
                           }"
    },
    "responseElements": null
```

### 24. IAMロールのインラインポリシーを削除する
IAMロールである`test_role`から`inline_policy3`というインラインポリシーを
削除した時に出力されたログになります。

```json:DeleteRolePolicy
    "requestParameters": {
        "roleName": "test_role",
        "policyName": "inline_policy3"
    },
    "responseElements": null
```

### 25. IAMロールのIAMポリシーを削除する
IAMロールである`test_role`から`test_policy3`というIAMポリシーを
削除した時に出力されたログになります。

```json:DetachRolePolicy
    "requestParameters": {
        "roleName": "test_role",
        "policyArn": "arn:aws:iam::123456789012:policy/test_policy3"
    },
    "responseElements": null
```

### 26. IAMロールとIAMユーザの信頼関係を削除する
IAMロールである`test_role`とIAMユーザである`test_user`で
結んだ信頼関係を解除した時に出力されたログになります。

```json:UpdateAssumeRolePolicy
    "requestParameters": {
        "roleName": "test_role",
        "policyDocument": "{\n
                            \"Version\": \"2012-10-17\",\n
                            \"Statement\": [\n
                               {\n
                                \"Effect\": \"Allow\",\n
                                \"Principal\": {\n
                                  \"Service\": \"ec2.amazonaws.com\"\n
                                 },\n
                                \"Action\": \"sts:AssumeRole\"\n
                               }\n
                             ]\n
                           }"
    },
    "responseElements": null
```

### 27. IAMロールを削除する
`test_role`というIAMロールを削除した時に出力されたログになります。

```json:DeleteRole
    "requestParameters": {
        "roleName": "test_role"
    },
    "responseElements": null
```

### 28. IAMポリシーを新規作成する
`test_policy`というIAMポリシーを新規作成した時に出力されたログになります。

```json:CreatePolicy
    "requestParameters": {
        "policyName": "test_policy",
        "policyDocument": "{\n
                            \"Version\": \"2012-10-17\",\n
                            \"Statement\": [\n
                               {\n
                                \"Sid\": \"VisualEditor0\",\n
                                \"Effect\": \"Allow\",\n
                                \"Action\": \"aws-portal:*\",\n
                                \"Resource\": \"*\"\n
                               }\n
                             ]\n
                           }",
        "tags": []
    },
    "responseElements": {
        "policy": {
            "policyName": "test_policy",
            "policyId": "ANPA6BYSTFHIFEULOJK27",
            "arn": "arn:aws:iam::123456789012:policy/test_policy",
            "path": "/",
            "defaultVersionId": "v1",
            "attachmentCount": 0,
            "permissionsBoundaryUsageCount": 0,
            "isAttachable": true,
            "createDate": "Apr 19, 2021 3:59:03 PM",
            "updateDate": "Apr 19, 2021 3:59:03 PM",
            "tags": []
        }
    }
```

※ `test_policy`には、**AWS Portal**の権限を付与しています。

### 29. IAMポリシーにポリシーを追加する
`test_policy`というIAMポリシーに追加でポリシーを追加した時に出力されたログになります。
MQサービスに関する権限を追加しています。これまで付与されていた権限と合わせて
Actionに権限が追加されています。

```json:CreatePolicyVersion
    "requestParameters": {
        "policyArn": "arn:aws:iam::123456789012:policy/test_policy",
        "policyDocument": "{\n
                            \"Version\": \"2012-10-17\",\n
                            \"Statement\": [\n
                               {\n
                                \"Sid\": \"VisualEditor0\",\n
                                \"Effect\": \"Allow\",\n
                                \"Action\": [\n
                                    \"mq:ListConfigurationRevisions\",\n
                                    \"mq:ListBrokers\",\n
                                    \"mq:ListTags\",\n
                                    \"aws-portal:*\",\n
                                    \"mq:ListConfigurations\",\n
                                    \"mq:ListUsers\"\n
                                 ],\n
                                \"Resource\": \"*\"\n
                               }\n
                             ]\n
                           }",
        "setAsDefault": true
    },
    "responseElements": {
        "policyVersion": {
            "versionId": "v2",
            "isDefaultVersion": true,
            "createDate": "Apr 19, 2021 4:15:01 PM"
        }
    }
```

### 30. IAMポリシーからポリシーを削除する
`test_policy`というIAMポリシーから追加したポリシーを
削除した時に出力されたログになります。
再度、**AWS Portal**の権限だけに戻っています。

```json:CreatePolicyVersion
    "requestParameters": {
        "policyArn": "arn:aws:iam::123456789012:policy/test_policy",
        "policyDocument": "{\n
                            \"Version\": \"2012-10-17\",\n
                            \"Statement\": [\n
                               {\n
                                \"Sid\": \"VisualEditor0\",\n
                                \"Effect\": \"Allow\",\n
                                \"Action\": \"aws-portal:*\",\n
                                \"Resource\": \"*\"\n
                               }\n
                             ]\n
                           }",
        "setAsDefault": true
    },
    "responseElements": {
        "policyVersion": {
            "versionId": "v3",
            "isDefaultVersion": true,
            "createDate": "Apr 19, 2021 4:36:19 PM"
        }
    }
```

### 31. IAMポリシーを削除する
`test_policy`というIAMポリシーを削除した時に出力されたログになります。

```json:DeletePolicy
    "userAgent": "console.amazonaws.com",
    "requestParameters": {
        "policyArn": "arn:aws:iam::123456789012:policy/test_policy"
    },
    "responseElements": null
```

## まとめ
さて、いかがでしたでしょうか？

不正アクセスによってAWS環境が乗っ取られた際、不正にIAMユーザが作成されたり
権限昇格が行われたりされていないか、見張ることが重要になります。

そのためには、CloudTrailの証跡ログでIAMに関する操作内容を理解しておくと良いでしょう。

自分も誰かがIAMユーザを新規で作成したり、アクセスキーを発行したりするタイミングで
自分のSlackに通知が来るようにしています。

知らないうちにIAMユーザやアクセスキーが不用意に増えていることを防止するには大事な対応ですね！
AWS環境をクリーンに維持する上で皆様のお役に立てる内容になっていることを願うばかりです^^

では、また。

[00]:https://qiita.com/hssh2_bin/items/b71da0455cf21e4c823d "【CloudTrail解説編】AWSマネージメントコンソールのログイン監視"
[01]:https://qiita.com/hssh2_bin/items/0cd863c6e357963b58d1 "【CloudTrail解説編】VPC操作ってどんなログ出るの？"
[02]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateUser.html "CreateUser"
[03]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateLoginProfile.html "CreateLoginProfile"
[04]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateLoginProfile.html "UpdateLoginProfile"
[05]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateAccessKey.html "CreateAccessKey"
[06]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateVirtualMFADevice.html "CreateVirtualMFADevice"
[07]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_EnableMFADevice.html "EnableMFADevice"
[08]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_AddUserToGroup.html "AddUserToGroup"
[09]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutUserPolicy.html "PutUserPolicy"
[10]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachUserPolicy.html "AttachUserPolicy"
[11]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAccessKey.html "UpdateAccessKey"
[12]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteVirtualMFADevice.html "DeleteVirtualMFADevice"
[13]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeactivateMFADevice.html "DeactivateMFADevice"
[14]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_RemoveUserFromGroup.html "RemoveUserFromGroup"
[15]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteUserPolicy.html "DeleteUserPolicy"
[16]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachUserPolicy.html "DetachUserPolicy"
[17]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteAccessKey.html "DeleteAccessKey"
[18]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteLoginProfile.html "DeleteLoginProfile"
[19]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteUser.html "DeleteUser"
[20]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateGroup.html "CreateGroup"
[21]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutGroupPolicy.html "PutGroupPolicy"
[22]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachGroupPolicy.html "AttachGroupPolicy"
[23]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteGroupPolicy.html "DeleteGroupPolicy"
[24]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachGroupPolicy.html "DetachGroupPolicy"
[25]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteGroup.html "DeleteGroup"
[26]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreateRole.html "CreateRole"
[27]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_PutRolePolicy.html "PutRolePolicy"
[28]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_AttachRolePolicy.html "AttachRolePolicy"
[29]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_UpdateAssumeRolePolicy.html "UpdateAssumeRolePolicy"
[30]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteRolePolicy.html "DeleteRolePolicy"
[31]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DetachRolePolicy.html "DetachRolePolicy"
[32]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeleteRole.html "DeleteRole"
[33]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicy.html "CreatePolicy"
[34]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_CreatePolicyVersion.html "CreatePolicyVersion"
[35]:https://docs.aws.amazon.com/IAM/latest/APIReference/API_DeletePolicy.html "DeletePolicy"
[36]:https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html "CloudTrail レコードの内容"
[37]:https://docs.aws.amazon.com/ja_jp/awscloudtrail/latest/userguide/cloudtrail-event-reference-user-identity.html "CloudTrail userIdentity要素"