SwitchRoleした時のCloudTrailで元のIAMユーザをトレースする流れ

##目的
大規模環境におけるAWSアカウント戦略としては、マルチアカウントが主流になってきていますが、AWSアカウントが増えると各アカウントでIAMユーザを作っていたのでは、パスワード管理が煩雑になります。そういった場合は、IAMユーザ管理用のアカウントを作成してログインしたあと、サービス提供用のアカウントにSwitchRoleしてアクセスする方式がとれます。サービス提供のアカウントは、SwitchRoleするためにIAMロールを作成します。

ここでは、CloudTrailを確認し、SwtchRoleした際のAPI実行者の表示内容を確認したいと思います。

##事前準備
IAMユーザ管理用アカウント
アカウントA
IAMユーザ作成

SwitchRole先
IAMロール作成
アカウントAを信頼する

##手順
Switch Role(ロールの切り替え)実施※アカウントAからアカウントB
S3バケット一覧を表示
アカウントBでCloudTrailログを確認する

SwitchFrom行を確認することで、元のAWSアカウントとIAMユーザ名がわかる

	"SwitchFrom": "arn:aws:iam::<アカウントA>:user/miyamoto",

```json
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIRGONMBKRO5AS3ZXA:miyamoto",
        "arn": "arn:aws:sts::<アカウントB>:assumed-role/SwitchRole/miyamoto",
        "accountId": "<アカウントB>"
    },
    "eventTime": "2018-11-16T15:12:19Z",
    "eventSource": "signin.amazonaws.com",
    "eventName": "SwitchRole",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "72.21.198.64",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "72.21.198.64",
    "userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36",
    "requestParameters": null,
    "responseElements": {
        "SwitchRole": "Success"
    },
    "additionalEventData": {
        "SwitchFrom": "arn:aws:iam::<アカウントA>:user/miyamoto",
        "RedirectTo": "https://ap-northeast-1.console.aws.amazon.com/console/home?region=ap-northeast-1#"
    },
    "eventID": "53964c04-8156-423d-b89e-cf97de594149",
    "eventType": "AwsConsoleSignIn",
    "recipientAccountId": "<アカウントB>"
}
```

S3バケット一覧を表示した時のCloudTrailのuserIdentity-arnを確認することでSwitchRoleする前のIAMユーザが確認できる。
https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_credentials_temp_request.html

        "arn": "arn:aws:sts::<アカウントB>:assumed-role/SwitchRole/miyamoto",
        "arn": "arn:aws:sts::<AWSアカウント>:assumed-role/IAMロール名/ロールセッション名(IAMユーザ名)

ロールセッション名は、管理コンソール操作だとIAMユーザ名となるが、APIの場合は、任意の名称を指定することが可能。

https://docs.aws.amazon.com/ja_jp/IAM/latest/UserGuide/id_roles_use_switch-role-api.html

```json
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AROAIRGONMBKRO5AS3ZXA:miyamoto",
        "arn": "arn:aws:sts::<アカウントB>:assumed-role/SwitchRole/miyamoto",
        "accountId": "<アカウントB>",
        "accessKeyId": "ASIAR2S4A2FVYII6OLNX",
        "sessionContext": {
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AROAIRGONMBKRO5AS3ZXA",
                "arn": "arn:aws:iam::<アカウントB>:role/SwitchRole",
                "accountId": "<アカウントB>",
                "arn": "arn:aws:iam::<アカウントB>:role/SwitchRole",
                "accountId": "<アカウントB>",
                "userName": "SwitchRole"
            },
            "attributes": {
                "creationDate": "2018-11-16T15:14:56Z",
                "mfaAuthenticated": "false"
            }
        }
    },
    "eventTime": "2018-11-16T15:15:04Z",
    "eventSource": "s3.amazonaws.com",
    "eventName": "HeadBucket",
    "awsRegion": "ap-northeast-1",
    "sourceIPAddress": "27.0.3.145",
    "userAgent": "[S3Console/0.4, aws-internal/3 aws-sdk-java/1.11.425 Linux/4.9.124-0.1.ac.198.73.329.metal1.x86_64 OpenJDK_64-Bit_Server_VM/25.19\
2-b12 java/1.8.0_192]",
    "requestParameters": {
	"bucketName": "cloudtrail-***"
    },
    "responseElements": null,
    "additionalEventData": {
        "x-amz-id-2": "Fxy2+VKCRPULTnYCIqvY/uzCJLudQBiHENZY6sZej2xtg8zhRkIaJtqxVIsNyNR7pSrmqsDnk/Q="
    },
    "requestID": "7F70330E8B836AD7",
    "eventID": "c3297949-e0cf-4374-a350-83fe3b96c60d",
    "readOnly": true,
    "resources": [
        {
            "type": "AWS::S3::Object",
            "ARNPrefix": "arn:aws:s3:::cloudtrail-***/"
        },
        {
            "accountId": "<アカウントB>",
            "type": "AWS::S3::Bucket",
            "ARN": "arn:aws:s3:::cloudtrail-***"
        }
    ],
    "eventType": "AwsApiCall",
    ],
    "eventType": "AwsApiCall",
    "recipientAccountId": "<アカウントB>",
    "vpcEndpointId": "vpce-****"
}
```