AWS CloudTrail による IAM および AWS STS の API コールのログ記録 - AWS Identity and Access Management

AWS CloudTrail による IAM および AWS STS の API コールのログ記録

IAM および AWS STS は AWS CloudTrail と統合されています。このサービスは、IAM ユーザーやロールのサービスによって実行されたアクションを記録するサービスです。CloudTrail は、コンソールからの呼び出しや API 呼び出しを含む、IAM と AWS STS のすべての API 呼び出しをイベントとしてキャプチャします。証跡を作成する場合は、 のイベントなど、Amazon S3 バケットへの CloudTrail イベントの継続的な配信を有効にすることができます 証跡を設定しない場合でも、CloudTrail コンソールの [イベント履歴] で最新のイベントを表示できます。CloudTrail を使用して、IAM または AWS STS に対して行われたリクエストに関する情報を取得できます。たとえば、リクエストの実行元 IP アドレス、実行者、実行日時、およびその他の詳細を表示できます。

CloudTrail の詳細については、AWS CloudTrail ユーザーガイドを参照してください。

CloudTrail での IAM および AWS STS 情報

CloudTrail は、AWS アカウントを作成すると、その中で有効になります。IAM または AWS STS でアクティビティが発生すると、そのアクティビティは [Event history] (イベント履歴) で AWS のその他のサービスのイベントと共に CloudTrail イベントに記録されます。最近のイベントは、AWS アカウント で表示、検索、ダウンロードできます。詳細については、「CloudTrail イベント履歴でイベントを表示する」を参照してください。

IAM や AWS STS のイベントなど、AWS アカウント のイベントの継続的な記録については、証跡を作成します。証跡により、CloudTrail はログファイルを Amazon S3 バケットに配信できます。デフォルトでは、コンソールで証跡を作成するときに、証跡がすべての リージョンに適用されます。証跡は、AWS パーティションのすべてのリージョンからのイベントをログに記録し、指定した Amazon S3 バケットにログファイルを配信します。さらに、CloudTrail ログで収集したイベントデータをより詳細に分析し、それに基づく対応するためにその他の AWS のサービスを設定できます。詳細については、次を参照してください。

すべての IAM およびAWS STSアクションは CloudTrail によってログに記録されます。これらのアクションについては、IAM API リファレンスAWS Security Token ServiceAPI リファレンス

IAM および AWS STS API リクエストのログ記録

CloudTrailは、認証されたすべての API リクエスト(資格情報を使用して作成)を IAM および AWS STS APIオペレーションにログに記録します。CloudTrail は、認証されていないリクエストを AWS STS アクション、AssumeRoleWithSAML および AssumeRoleWithWebIdentity に記録し、ID プロバイダーから提供された情報も記録します。この情報を使用して、引き受けたロールを持つフェデレーティッドユーザーによって行われた呼び出しを元の外部フェデレーティッド呼び出し元にマッピングできます。AssumeRole の場合、呼び出しをその元の AWS サービスまたはユーザーのアカウントに再度マッピングすることができます。CloudTrail ログエントリの JSON データの userIdentity セクションには、AssumeRole* リクエストを特定のフェデレーティッドユーザーにマッピングするのに必要な情報が含まれます。詳細については、「AWS CloudTrail ユーザーガイド」の「CloudTrail userIdentity Element」を参照してください。

たとえば、IAM CreateUserDeleteRoleListGroups、およびその他の API オペレーションに対する呼び出しはすべて、CloudTrail によってログに記録されます。

このタイプのログエントリの例については、このトピックの後半で説明します。

他の AWS のサービスへの API リクエストのログ記録

他の AWS のサービス API オペレーションに対する認証されたリクエストは CloudTrail によってログに記録され、そのログエントリにはリクエストの生成元に関する情報が含まれます。

たとえば、Amazon EC2 インスタンスの一覧表示または AWS CodeDeploy のデプロイグループの作成をリクエストしたとします。リクエストを行ったユーザーまたはサービスに関する詳細は、そのリクエストのログエントリに含まれています。この情報は、リクエストが AWS アカウントのルートユーザー、IAM ユーザー、ロール、または別の AWS サービスのいずれによって行われたかを判断するのに役立ちます。

CloudTrail ログエントリのユーザー ID 情報の詳細については、AWS CloudTrail ユーザーガイドの「userIdentity 要素」を参照してください。

ユーザーサインインイベントのログ記録

CloudTrail は、サインインイベントを AWS Management Console、AWS ディスカッションフォーラム、および AWS Marketplace に記録します。CloudTrail は、IAM ユーザーとフェデレーティッドユーザーのサインインの成功と失敗をログに記録します。

rootユーザーのサインインが成功した場合と失敗した場合のサンプルCloudTrailイベントを表示するには、AWS CloudTrail ユーザーガイドの「ルートユーザーのイベントレコードの例」を参照してください。

セキュリティのベストプラクティスとして、AWS は、サインインの失敗した原因が間違ったユーザー名である場合、入力された IAM ユーザー名テキストをログに記録しません。ユーザー名テキストは、HIDDEN_DUE_TO_SECURITY_REASONS という値によってマスクされます。この例として、このトピックの「間違ったユーザー名が原因で発生したサインイン失敗イベントの例」を参照してください。失敗の原因がユーザーエラーであるため、ユーザー名のテキストが隠れています。これらのエラーを記録すると、機密性の高い情報が公開される可能性があります。例:。

  • 誤ってユーザー名ボックスにパスワードを入力した。

  • ある AWS アカウント のサインインページのリンクを選択したが、別の AWS アカウント のアカウント番号を入力した。

  • どのアカウントにサインインしているのかを忘れて、誤って個人メールのアカウント名や銀行のサインイン ID などのプライベート ID を入力した。

一時的な認証情報のサインインイベントのログ記録

プリンシパルが一時的な認証情報をリクエストすると、プリンシパルタイプによって CloudTrail がイベントをログに記録する方法が決まります。これは、プリンシパルが別のアカウントのロールを引き受ける場合に複雑になる可能性があります。ロールのクロスアカウントオペレーションに関連するオペレーションを実行するために、複数の API コールがあります。まず、プリンシパルは AWS STS API を呼び出して一時的な認証情報を取得します。このオペレーションは、呼び出し元のアカウントと AWS STS オペレーションが実行されたアカウントに記録されます。次に、プリンシパルはロールを使用して、引き受けたロールのアカウントで他の API コールを実行します。

ロール信頼ポリシーで sts:SourceIdentity 条件キーを使用すると、ユーザーがロールを引き受けるときに ID を指定するように要求できます。例えば、IAM ユーザーがセッション名として自分のユーザー名を指定するように要求できます。これにより、AWS の特定のアクションを実行したユーザーを特定できます。詳細については、「sts:SourceIdentity」を参照してください。sts:RoleSessionName を使用して、ユーザーが役割を引き受けるときにセッション名を指定するようにユーザーに要求することもできます。これは、AWS CloudTrail ログを確認するときに異なるプリンシパルによって使用されるロールのロールセッションを区別するのに役立ちます。

次の表は、一時認証情報を生成する各 AWS STS API に対するさまざまなユーザー ID 情報を CloudTrail がどのようにログに記録しているかを示しています。

プリンシパルタイプ STS API 呼び出し元アカウントの CloudTrail ログ内のユーザー ID 割り当てられたロールのアカウントの CloudTrail ログのユーザー ID ロールの後続の API コールの CloudTrail ログ内のユーザー ID
AWS アカウントのルートユーザー 認証情報 GetSessionToken ルートユーザー ID ロール所有者アカウントと呼び出し元アカウントが同じ ルートユーザー ID
IAM ユーザー GetSessionToken IAM ユーザーアイデンティティ ロール所有者アカウントと呼び出し元アカウントが同じ IAM ユーザーアイデンティティ
IAM ユーザー GetFederationToken IAM ユーザーアイデンティティ ロール所有者アカウントと呼び出し元アカウントが同じ IAM ユーザーアイデンティティ
IAM ユーザー AssumeRole IAM ユーザーアイデンティティ アカウント番号およびプリンシパル ID (ユーザーの場合)、または AWS サービスプリンシパル ロール ID のみ (ユーザーの記録はしない)
外部で認証されたユーザー AssumeRoleWithSAML 該当なし SAML ユーザー ID ロール ID のみ (ユーザーの記録はしない)
外部で認証されたユーザー AssumeRoleWithWebIdentity 該当なし OIDC/Web のユーザー ID ロール ID のみ (ユーザーの記録はしない)

アクションがリソースに変更を加える効果がない場合、そのアクションは CloudTrail で読み取り専用と見なされます。読み取り専用イベントをログに記録すると、CloudTrail はログに含まれる responseElements 情報を編集します。読み取り専用ではないイベントが CloudTrail によってログに記録されると、完全な responseElements がログエントリに表示されます。ただし、AWS STS API の AssumeRoleAssumeRoleWithSAMLAssumeRoleWithWebIdentity の場合、読み取り専用としてログに記録されますが、CloudTrail は、これらの API のログに完全な responseElements を含めます。

次の表は、一時認証情報を生成する各 AWS STS API に対する responseElementsreadOnly の情報を CloudTrail がどのようにログに記録しているかを示しています。

STS API レスポンス要素情報 [Read-only]
AssumeRole 含まれる true
AssumeRoleWithSAML 含まれる true
AssumeRoleWithWebIdentity 含まれる true
GetFederationToken 含まれる false
GetSessionToken 含まれる false

CloudTrail ログの IAM API イベントの例

CloudTrail ログファイルには、イベントが JSON 形式で書き込まれます。API イベントは 1 つの API リクエストを表すものであり、プリンシパル、リクエストされたアクション、すべてのパラメータ、およびアクションの日時に関する情報が含まれます。

CloudTrail ログファイルの IAM API イベントの例

次の例は、IAM の GetUserPolicy アクションに対するリクエストの CloudTrail ログエントリを示しています。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::444455556666:user/JaneDoe", "accountId": "444455556666", "accessKeyId": "AKIAI44QH8DHBEXAMPLE", "userName": "JaneDoe", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2014-07-15T21:39:40Z" } }, "invokedBy": "signin.amazonaws.com" }, "eventTime": "2014-07-15T21:40:14Z", "eventSource": "iam.amazonaws.com", "eventName": "GetUserPolicy", "awsRegion": "us-east-2", "sourceIPAddress": "signin.amazonaws.com", "userAgent": "signin.amazonaws.com", "requestParameters": { "userName": "JaneDoe", "policyName": "ReadOnlyAccess-JaneDoe-201407151307" }, "responseElements": null, "requestID": "9EXAMPLE-0c68-11e4-a24e-d5e16EXAMPLE", "eventID": "cEXAMPLE-127e-4632-980d-505a4EXAMPLE" }

このイベント情報から、このリクエストは、ReadOnlyAccess-JaneDoe-201407151307 要素で指定された、ユーザー JaneDoerequestParameters というユーザーポリシーを取得するために送信されたことを確認できます。また、このリクエストは、JaneDoe という IAM ユーザーによって 2014 年 7 月 15 日の午後 9 時 40 分 (UTC) に送信されたことも確認できます。この例では、userAgent 要素から、このリクエストの実行元は AWS Management Console であることがわかります。

例 AWS STS CloudTrail ログの API イベント

CloudTrail ログファイルには、イベントが JSON 形式で書き込まれます。API イベントは 1 つの API リクエストを表すものであり、プリンシパル、リクエストされたアクション、すべてのパラメータ、およびアクションの日時に関する情報が含まれます。

CloudTrail ログファイル内のクロスアカウント AWS STS API イベントの例

アカウント 777788889999 の JohnDoe という名前の IAM ユーザーは、AWS STS AssumeRole アクションを呼び出して、アカウント 111122223333 のロール EC2-dev を引き受けます。アカウント管理者は、ロールを引き受けるときに、ユーザ名と同じソース ID を設定することをユーザーに要求します。ユーザーは JohnDoe のソースID値を渡します。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDAQRSTUVWXYZEXAMPLE", "arn": "arn:aws:iam::777788889999:user/JohnDoe", "accountId": "777788889999", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName": "JohnDoe" }, "eventTime": "2014-07-18T15:07:39Z", "eventSource": "sts.amazonaws.com", "eventName": "AssumeRole", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.101", "userAgent": "aws-cli/1.11.10 Python/2.7.8 Linux/3.2.45-0.6.wd.865.49.315.metal1.x86_64 botocore/1.4.67", "requestParameters": { "roleArn": "arn:aws:iam::111122223333:role/EC2-dev", "roleSessionName": "JohnDoe-EC2-dev", "sourceIdentity": "JohnDoe", "serialNumber": "arn:aws:iam::777788889999:mfa" }, "responseElements": { "credentials": { "sessionToken": "<encoded session token blob>", "accessKeyId": "ASIAI44QH8DHBEXAMPLE", "expiration": "Jul 18, 2023, 4:07:39 PM" }, "assumedRoleUser": { "assumedRoleId": "AIDAQRSTUVWXYZEXAMPLE:JohnDoe-EC2-dev", "arn": "arn:aws:sts::111122223333:assumed-role/EC2-dev/JohnDoe-EC2-dev" }, "sourceIdentity": "JohnDoe" }, "resources": [ { "ARN": "arn:aws:iam::111122223333:role/EC2-dev", "accountId": "111122223333", "type": "AWS::IAM::Role" } ], "requestID": "4EXAMPLE-0e8d-11e4-96e4-e55c0EXAMPLE", "sharedEventID": "bEXAMPLE-efea-4a70-b951-19a88EXAMPLE", "eventID": "dEXAMPLE-ac7f-466c-a608-4ac8dEXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }

2 番目の例は、同じリクエストを行ったロールアカウント (111122223333) の CloudTrail ログエントリを示しています。

{ "eventVersion": "1.05", "userIdentity": { "type": "AWSAccount", "principalId": "AIDAQRSTUVWXYZEXAMPLE", "accountId": "777788889999" }, "eventTime": "2014-07-18T15:07:39Z", "eventSource": "sts.amazonaws.com", "eventName": "AssumeRole", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.101", "userAgent": "aws-cli/1.11.10 Python/2.7.8 Linux/3.2.45-0.6.wd.865.49.315.metal1.x86_64 botocore/1.4.67", "requestParameters": { "roleArn": "arn:aws:iam::111122223333:role/EC2-dev", "roleSessionName": "JohnDoe-EC2-dev", "sourceIdentity": "JohnDoe", "serialNumber": "arn:aws:iam::777788889999:mfa" }, "responseElements": { "credentials": { "sessionToken": "<encoded session token blob>", "accessKeyId": "ASIAI44QH8DHBEXAMPLE", "expiration": "Jul 18, 2014, 4:07:39 PM" }, "assumedRoleUser": { "assumedRoleId": "AIDAQRSTUVWXYZEXAMPLE:JohnDoe-EC2-dev", "arn": "arn:aws:sts::111122223333:assumed-role/EC2-dev/JohnDoe-EC2-dev" }, "sourceIdentity": "JohnDoe" }, "requestID": "4EXAMPLE-0e8d-11e4-96e4-e55c0EXAMPLE", "sharedEventID": "bEXAMPLE-efea-4a70-b951-19a88EXAMPLE", "eventID": "dEXAMPLE-ac7f-466c-a608-4ac8dEXAMPLE" }

CloudTrail ログファイル内の AWS STS ロール連鎖 API イベントの例

次の例は、アカウント 111111111111 で John Doe によって行われたリクエストの CloudTrail ログエントリを示しています。John は以前、JohnRole1 ロールを引き受けるために JohnDoe ユーザーを使用していました。このリクエストでは、その JohnRole2 ロールの認証情報を使用してロールを引き受けます。これは、ロールの連鎖と呼ばれます。彼が JohnDoe1 ロールを引き受けたときに設定したソースIDは、JohnRole2 を引き受ける要求に存続します。ロールを引き受けるときに John が別のソース ID を設定しようとすると、要求は拒否されます。John は 2 つの セッションタグ をリクエストに渡します。彼はこれらの 2 つのタグを推移的に設定します。ジョンが JohnRole1 を引き受けたときに推移的として設定したため、リクエストは Department タグを推移的として継承します。ソース ID の詳細については、引き受けたロールで実行されるアクションのモニタリングと制御 を参照してください。ロールチェーン内の推移的キーの詳細については、「セッションタグを使用したロールの連鎖」を参照してください。

{ "eventVersion": "1.05", "userIdentity": { "type": "AssumedRole", "principalId": "AROAIN5ATK5U7KEXAMPLE:JohnRole1", "arn": "arn:aws:sts::111111111111:assumed-role/JohnDoe/JohnRole1", "accountId": "111111111111", "accessKeyId": "ASIAIOSFODNN7EXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2019-10-02T21:50:54Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROAIN5ATK5U7KEXAMPLE", "arn": "arn:aws:iam::111111111111:role/JohnRole1", "accountId": "111111111111", "userName": "JohnDoe" }, "sourceIdentity": "JohnDoe" } }, "eventTime": "2019-10-02T22:12:29Z", "eventSource": "sts.amazonaws.com", "eventName": "AssumeRole", "awsRegion": "us-east-2", "sourceIPAddress": "123.145.67.89", "userAgent": "aws-cli/1.16.248 Python/3.4.7 Linux/4.9.184-0.1.ac.235.83.329.metal1.x86_64 botocore/1.12.239", "requestParameters": { "incomingTransitiveTags": { "Department": "Engineering" }, "tags": [ { "value": "johndoe@example.com", "key": "Email" }, { "value": "12345", "key": "CostCenter" } ], "roleArn": "arn:aws:iam::111111111111:role/JohnRole2", "roleSessionName": "Role2WithTags", "sourceIdentity": "JohnDoe", "transitiveTagKeys": [ "Email", "CostCenter" ], "durationSeconds": 3600 }, "responseElements": { "credentials": { "accessKeyId": "ASIAI44QH8DHBEXAMPLE", "expiration": "Oct 2, 2019, 11:12:29 PM", "sessionToken": "AgoJb3JpZ2luX2VjEB4aCXVzLXdlc3QtMSJHMEXAMPLETOKEN+//rJb8Lo30mFc5MlhFCEbubZvEj0wHB/mDMwIgSEe9gk/Zjr09tZV7F1HDTMhmEXAMPLETOKEN/iEJ/rkqngII9///////////ARABGgw0MjgzMDc4NjM5NjYiDLZjZFKwP4qxQG5sFCryASO4UPz5qE97wPPH1eLMvs7CgSDBSWfonmRTCfokm2FN1+hWUdQQH6adjbbrVLFL8c3jSsBhQ383AvxpwK5YRuDE1AI/+C+WKFZb701eiv9J5La2EXAMPLETOKEN/c7S5Iro1WUJ0q3Cxuo/8HUoSxVhQHM7zF7mWWLhXLEQ52ivL+F6q5dpXu4aTFedpMfnJa8JtkWwG9x1Axj0Ypy2ok8v5unpQGWych1vwdvj6ez1Dm8Xg1+qIzXILiEXAMPLETOKEN/vQGqu8H+nxp3kabcrtOvTFTvxX6vsc8OGwUfHhzAfYGEXAMPLETOKEN/L6v1yMM3B1OwFOrQBno1HEjf1oNI8RnQiMNFdUOtwYj7HUZIOCZmjfN8PPHq77N7GJl9lzvIZKQA0Owcjg+mc78zHCj8y0siY8C96paEXAMPLETOKEN/E3cpksxWdgs91HRzJWScjN2+r2LTGjYhyPqcmFzzo2mCE7mBNEXAMPLETOKEN/oJy+2o83YNW5tOiDmczgDzJZ4UKR84yGYOMfSnF4XcEJrDgAJ3OJFwmTcTQICAlSwLEXAMPLETOKEN" }, "assumedRoleUser": { "assumedRoleId": "AROAIFR7WHDTSOYQYHFUE:Role2WithTags", "arn": "arn:aws:sts::111111111111:assumed-role/test-role/Role2WithTags" }, "sourceIdentity": "JohnDoe" }, "requestID": "b96b0e4e-e561-11e9-8b3f-7b396EXAMPLE", "eventID": "1917948f-3042-46ec-98e2-62865EXAMPLE", "resources": [ { "ARN": "arn:aws:iam::111111111111:role/JohnRole2", "accountId": "111111111111", "type": "AWS::IAM::Role" } ], "eventType": "AwsApiCall", "recipientAccountId": "111111111111" }

CloudTrail ログファイルの AWS のサービス AWS STS API イベントの例

次の例は、サービスロールのアクセス許可を使用して別のサービス API を呼び出す AWS のサービスによって行われたリクエストの CloudTrail ログエントリを示しています。アカウント 777788889999 で行われたリクエストの CloudTrail ログエントリが表示されます。

{ "eventVersion": "1.04", "userIdentity": { "type": "AssumedRole", "principalId": "AROAQRSTUVWXYZEXAMPLE:devdsk", "arn": "arn:aws:sts::777788889999:assumed-role/AssumeNothing/devdsk", "accountId": "777788889999", "accessKeyId": "ASIAI44QH8DHBEXAMPLE", "sessionContext": { "attributes": { "mfaAuthenticated": "false", "creationDate": "2016-11-14T17:25:26Z" }, "sessionIssuer": { "type": "Role", "principalId": "AROAQRSTUVWXYZEXAMPLE", "arn": "arn:aws:iam::777788889999:role/AssumeNothing", "accountId": "777788889999", "userName": "AssumeNothing" } } }, "eventTime": "2016-11-14T17:25:45Z", "eventSource": "s3.amazonaws.com", "eventName": "DeleteBucket", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.1", "userAgent": "[aws-cli/1.11.10 Python/2.7.8 Linux/3.2.45-0.6.wd.865.49.315.metal1.x86_64 botocore/1.4.67]", "requestParameters": { "bucketName": "my-test-bucket-cross-account" }, "responseElements": null, "requestID": "EXAMPLE463D56D4C", "eventID": "dEXAMPLE-265a-41e0-9352-4401bEXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "777788889999" }

CloudTrail ログファイル内の SAML AWS STS API イベントの例

次の例は、 AWS STS の AssumeRoleWithSAML アクションに対するリクエストの CloudTrail ログエントリを示しています。リクエストには SAML アサーションを介してセッションタグとして渡される SAML 属性 CostCenterProject が含まれています。これらのタグは推移的として設定され、ロールの連鎖シナリオでも保持されます。リクエストにはオプションの API パラメータ DurationSeconds が含まれます。これは CloudTrail ログでは durationSeconds として表され、1800 秒に設定されます。リクエストには、SAML アサーションで渡される SAML 属性 sourceIdentity も含まれています。作成されたロールセッションの資格情報を使用して別のロールを引き受ける場合、このソース ID は保持されます。

{ "eventVersion": "1.08", "userIdentity": { "type": "SAMLUser", "principalId": "SampleUkh1i4+ExamplexL/jEvs=:SamlExample", "userName": "SamlExample", "identityProvider": "bdGOnTesti4+ExamplexL/jEvs=" }, "eventTime": "2023-08-28T18:30:58Z", "eventSource": "sts.amazonaws.com", "eventName": "AssumeRoleWithSAML", "awsRegion": "us-east-2", "sourceIPAddress": "AWS Internal", "userAgent": "aws-internal/3 aws-sdk-java/1.12.479 Linux/5.10.186-157.751.amzn2int.x86_64 OpenJDK_64-Bit_Server_VM/17.0.7+11 java/17.0.7 kotlin/1.3.72 vendor/Amazon.com_Inc. cfg/retry-mode/standard", "requestParameters": { "sAMLAssertionID": "_c0046cEXAMPLEb9d4b8eEXAMPLE2619aEXAMPLE", "roleSessionName": "MyAssignedRoleSessionName", "sourceIdentity": "MySAMLUser", "principalTags": { "CostCenter": "987654", "Project": "Unicorn", "Department": "Engineering" }, "transitiveTagKeys": [ "CostCenter", "Project" ], "roleArn": "arn:aws:iam::444455556666:role/SAMLTestRoleShibboleth", "principalArn": "arn:aws:iam::444455556666:saml-provider/Shibboleth", "durationSeconds": 1800 }, "responseElements": { "credentials": { "accessKeyId": "ASIAIOSFODNN7EXAMPLE", "sessionToken": "<encoded session token blob>", "expiration": "Aug 28, 2023, 7:00:58 PM" }, "assumedRoleUser": { "assumedRoleId": "AROAD35QRSTUVWEXAMPLE:MyAssignedRoleSessionName", "arn": "arn:aws:sts::444455556666:assumed-role/SAMLTestRoleShibboleth/MyAssignedRoleSessionName" }, "packedPolicySize": 1, "subject": "SamlExample", "subjectType": "transient", "issuer": "https://server.example.com/idp/shibboleth", "audience": "https://signin.aws.amazon.com/saml", "nameQualifier": "bdGOnTesti4+ExamplexL/jEvs=", "sourceIdentity": "MySAMLUser" }, "requestID": "6EXAMPLE-e595-11e5-b2c7-c974fEXAMPLE", "eventID": "dEXAMPLE-265a-41e0-9352-4401bEXAMPLE", "readOnly": true, "resources": [ { "accountId": "444455556666", "type": "AWS::IAM::Role", "ARN": "arn:aws:iam::444455556666:role/SAMLTestRoleShibboleth" }, { "accountId": "444455556666", "type": "AWS::IAM::SAMLProvider", "ARN": "arn:aws:iam::444455556666:saml-provider/test-saml-provider" } ], "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "444455556666", "eventCategory": "Management", "tlsDetails": { "tlsVersion": "TLSv1.2", "cipherSuite": "ECDHE-RSA-AES128-GCM-SHA256", "clientProvidedHostHeader": "sts.us-east-2.amazonaws.com" } }

CloudTrail ログファイル内の OIDC AWS STS API イベントの例

次の例は、AWS STS の AssumeRoleWithWebIdentity アクションに対するリクエストの CloudTrail ログエントリを示しています。リクエストには ID プロバイダートークンを介してセッションタグとして渡される属性 CostCenterProject が含まれています。これらのタグは推移的として設定され、ロールの連鎖でも保持されます。リクエストには、ID プロバイダートークンからの sourceIdentity 属性が含まれています。作成されたロールセッションの資格情報を使用して別のロールを引き受ける場合、このソース ID は保持されます。

{ "eventVersion": "1.05", "userIdentity": { "type": "WebIdentityUser", "principalId": "accounts.google.com:<id-of-application>.apps.googleusercontent.com:<id-of-user>", "userName": "<id of user>", "identityProvider": "accounts.google.com" }, "eventTime": "2016-03-23T01:39:51Z", "eventSource": "sts.amazonaws.com", "eventName": "AssumeRoleWithWebIdentity", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.101", "userAgent": "aws-cli/1.3.23 Python/2.7.6 Linux/2.6.18-164.el5", "requestParameters": { "sourceIdentity": "MyWebIdentityUser", "durationSeconds": 3600, "roleArn": "arn:aws:iam::444455556666:role/FederatedWebIdentityRole", "roleSessionName": "MyAssignedRoleSessionName" "principalTags": { "CostCenter": "24680", "Project": "Pegasus" }, "transitiveTagKeys": [ "CostCenter", "Project" ], }, "responseElements": { "provider": "accounts.google.com", "subjectFromWebIdentityToken": "<id of user>", "sourceIdentity": "MyWebIdentityUser", "audience": "<id of application>.apps.googleusercontent.com", "credentials": { "accessKeyId": "ASIAIOSFODNN7EXAMPLE", "expiration": "Mar 23, 2016, 2:39:51 AM", "sessionToken": "<encoded session token blob>" }, "assumedRoleUser": { "assumedRoleId": "AROACQRSTUVWRAOEXAMPLE:MyAssignedRoleSessionName", "arn": "arn:aws:sts::444455556666:assumed-role/FederatedWebIdentityRole/MyAssignedRoleSessionName" } }, "resources": [ { "ARN": "arn:aws:iam::444455556666:role/FederatedWebIdentityRole", "accountId": "444455556666", "type": "AWS::IAM::Role" } ], "requestID": "6EXAMPLE-e595-11e5-b2c7-c974fEXAMPLE", "eventID": "bEXAMPLE-0b30-4246-b28c-e3da3EXAMPLE", "eventType": "AwsApiCall", "recipientAccountId": "444455556666" }

CloudTrail ログのサインインイベントの例

CloudTrail ログファイルには、イベントが JSON 形式で書き込まれます。サインインイベントは、シングルサインインリクエストを表し、サインインプリンシパル、リージョン、およびアクションの日時に関する情報を含みます。

CloudTrail ログファイル内のサインイン成功イベントの例

成功したサインインイベントの CloudTrail のログエントリの例を以下に示します。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn":"arn:aws:iam::111122223333:user/JohnDoe", "accountId": "111122223333", "userName": "JohnDoe" }, "eventTime": "2014-07-16T15:49:27Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.110", "userAgent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0", "requestParameters": null, "responseElements": { "ConsoleLogin": "Success" }, "additionalEventData": { "MobileVersion": "No", "LoginTo": "https://console.aws.amazon.com/s3/", "MFAUsed": "No" }, "eventID": "3fcfb182-98f8-4744-bd45-10a395ab61cb" }

CloudTrail ログファイルに含まれる情報の詳細については、ユーザーガイド の「AWS CloudTrailCloudTrail イベントリファレンス」を参照してください。

CloudTrail ログファイル内のサインイン失敗イベントの例

失敗したサインインイベントの CloudTrail のログエントリの例を以下に示します。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn":"arn:aws:iam::111122223333:user/JaneDoe", "accountId": "111122223333", "userName": "JaneDoe" }, "eventTime": "2014-07-08T17:35:27Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.100", "userAgent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0", "errorMessage": "Failed authentication", "requestParameters": null, "responseElements": { "ConsoleLogin": "Failure" }, "additionalEventData": { "MobileVersion": "No", "LoginTo": "https://console.aws.amazon.com/sns", "MFAUsed": "No" }, "eventID": "11ea990b-4678-4bcd-8fbe-62509088b7cf" }

この情報から、JaneDoe 要素に示されているように、このサインインは userIdentity という IAM ユーザーによって試行されたことを確認できます。また、responseElements 要素に示されているように、サインインの試行が失敗したこともわかります。さらに、JaneDoe が 2014 年 7 月 8 日、午後 5 時 35 分 (UTC) に Amazon SNS コンソールにサインインしようとしたことも確認できます。

間違ったユーザー名が原因で発生したサインイン失敗イベントの例

以下の例は、ユーザーが間違ったユーザー名を入力したことが原因で発生したサインイン失敗イベントの CloudTrail ログ項目を示しています。AWS は、userName テキストを HIDDEN_DUE_TO_SECURITY_REASONS でマスクして、機密となっている可能性のある情報が漏れないようにします。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "accountId": "123456789012", "accessKeyId": "", "userName": "HIDDEN_DUE_TO_SECURITY_REASONS" }, "eventTime": "2015-03-31T22:20:42Z", "eventSource": "signin.amazonaws.com", "eventName": "ConsoleLogin", "awsRegion": "us-east-2", "sourceIPAddress": "192.0.2.101", "userAgent": "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0", "errorMessage": "No username found in supplied account", "requestParameters": null, "responseElements": { "ConsoleLogin": "Failure" }, "additionalEventData": { "LoginTo": "https://console.aws.amazon.com/console/home?state=hashArgs%23&isauthcode=true", "MobileVersion": "No", "MFAUsed": "No" }, "eventID": "a7654656-0417-45c6-9386-ea8231385051", "eventType": "AwsConsoleSignin", "recipientAccountId": "123456789012" }

IAM ロールの信頼ポリシーの動作

2022 年 9 月 21 日、AWS は IAM ロールの信頼ポリシーの動作を変更し、ロールがそれ自体を引き受けるときにロールの信頼ポリシーで明示的な許可を必要とするようにしました。レガシー動作の許可リストに含まれている IAM ロールには、AssumeRole イベントのための explicitTrustGrant に関連する additionalEventData フィールドがあります。レガシー許可リストのロールがレガシー動作を使用してそれ自体を引き受けた場合、explicitTrustGrant の値は false になります。レガシー許可リストのロールがそれ自体を引き受けたとしても、ロールの信頼ポリシーの動作が更新され、ロールがそれ自体を引き受けることが明示的に許可されている場合、explicitTrustGrant の値は true になります。

レガシー動作の許可リストに含まれている IAM ロールの数は非常に少ないです。このフィールドがこれらのロールの CloudTrail ログに存在するのは、これらのロールがそれら自体を引き受けた場合にのみです。ほとんどの場合、IAM ロールがそれ自体を引き受ける必要はありません。AWS では、プロセス、コード、または設定を更新してこの動作を削除するか、ロールの信頼ポリシーを更新してこの動作を明示的に許可することをお勧めしています。詳細については、「Announcing an update to IAM role trust policy behavior」を参照してください。