AWS CloudTrail로 IAM 및 AWS STS API 호출 로깅
AWS CloudTrail로 IAM 및 AWS STS API 호출 로깅
IAM(IAM)과 AWS STS는 IAM 사용자나 역할이 수행한 작업의 기록을 제공하는 AWS CloudTrail과 통합되어 있어요. 이 문서에서는 CloudTrail이 IAM·AWS STS의 API 호출, 사용자 로그인, 임시 자격 증명 이벤트를 어떻게 기록하는지 예시 로그와 함께 설명합니다.
출처: 문서
본문
IAM과 AWS STS는 AWS CloudTrail과 통합되어 있어요. CloudTrail은 IAM 사용자나 역할이 수행한 작업의 기록을 제공하는 서비스입니다. CloudTrail은 IAM과 AWS STS에 대한 모든 API 호출(콘솔 호출과 API 호출 모두)을 이벤트로 캡처합니다. 트레일을 만들면 CloudTrail 이벤트를 Amazon S3 버킷으로 지속적으로 전달할 수 있어요. 트레일을 구성하지 않아도 CloudTrail 콘솔의 이벤트 기록(Event history)에서 가장 최근 이벤트를 볼 수 있습니다. 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 서비스를 구성할 수도 있습니다. 자세한 내용은 다음을 참고하세요.
- 트레일 생성 개요
- CloudTrail 지원 서비스 및 통합
- CloudTrail용 Amazon SNS 알림 구성
- 여러 리전에서 CloudTrail 로그 파일 받기 및 여러 계정에서 CloudTrail 로그 파일 받기
모든 IAM·AWS STS 작업은 CloudTrail에 로깅되며, IAM API 참조와 AWS Security Token Service API 참조에 문서화되어 있습니다.
IAM 및 AWS STS API 요청 로깅
CloudTrail은 IAM·AWS STS API 작업에 대한 모든 인증된 API 요청을 로깅합니다. 또한 AWS STS AssumeRoleWithSAML·AssumeRoleWithWebIdentity 작업에 대한 비인증 요청과 자격 증명 공급자가 제공한 정보도 로깅합니다. 다만 일부 비인증 AWS STS 요청은 정당한 요청으로 신뢰받기에 충분히 유효하다는 최소 기대에 미치지 못해 로깅되지 않을 수도 있어요. CloudTrail은 AssumeRoot API로 시작된 교차 계정 역할 수임과 권한 있는 세션에 대해 대상 계정에서 거부된 AWS STS 요청을 로깅하지 않습니다.
로그 정보를 사용하면 OIDC나 SAML 페더레이션 주체가 수임한 역할로 보낸 호출을 원래의 외부 페더레이션 호출자로 추적할 수 있어요. AssumeRole의 경우 AWS 서비스나 원래 사용자의 계정으로 호출을 추적할 수 있습니다. CloudTrail 로그 항목의 JSON 데이터에 있는 userIdentity 섹션에는 AssumeRole* 요청을 특정 세션 주체와 연결하는 데 필요한 정보가 들어 있어요. 자세한 내용은 AWS CloudTrail 사용자 가이드의 CloudTrail userIdentity 요소를 참고하세요.
IAM 사용자가 MFA로 로그인하면 AWS CloudTrail 로그에 MFA 정보가 포함됩니다. IAM 사용자가 IAM 역할을 수임하면 CloudTrail은 수임한 역할의 자격 증명으로 수행한 작업에 대해 sessionContext 속성에 mfaAuthenticated: true도 기록해요. 다만 CloudTrail 로깅은 수임한 역할의 자격 증명으로 API 호출을 할 때 IAM이 요구하는 것과는 별개입니다. 자세한 내용은 CloudTrail userIdentity 요소를 참고하세요.
예를 들어 IAM CreateUser, DeleteRole, ListGroups 등 API 작업에 대한 호출은 모두 CloudTrail에 로깅됩니다. 이러한 유형의 로그 항목 예시는 이 주제 뒷부분에서 소개합니다.
다른 AWS 서비스로의 API 요청 로깅
다른 AWS 서비스 API 작업에 대한 인증된 요청은 CloudTrail에 로깅되며, 해당 로그 항목에는 요청을 생성한 사람에 대한 정보가 포함됩니다. 예를 들어 Amazon EC2 인스턴스 목록을 요청하거나 AWS CodeDeploy 배포 그룹을 만들었다고 가정해 보세요. 요청한 사람이나 서비스에 대한 세부 정보는 그 요청의 로그 항목에 담깁니다. 이 정보를 통해 요청이 AWS 계정 루트 사용자, IAM 사용자, 역할, 또는 다른 AWS 서비스에 의해 이루어졌는지 판단할 수 있어요.
CloudTrail 로그 항목의 사용자 자격 증명 정보에 대한 자세한 내용은 AWS CloudTrail 사용자 가이드의 userIdentity 요소를 참고하세요.
사용자 로그인 이벤트 로깅
CloudTrail은 AWS Management Console, AWS CLI·SDK 같은 로컬 개발 도구, AWS 토론 포럼, AWS Marketplace에 대한 로그인 이벤트를 로깅합니다. CloudTrail은 IAM 사용자, SAML·OIDC 페더레이션 주체, AWS STS 페더레이션 사용자 주체의 성공·실패 로그인 시도를 모두 기록해요. 루트 사용자의 성공·실패 로그인 샘플 CloudTrail 이벤트를 보려면 AWS CloudTrail 사용자 가이드의 루트 사용자 예제 이벤트 기록을 참고하세요.
보안 모범 사례로서, 잘못된 사용자 이름으로 인한 로그인 실패 시 AWS는 입력된 IAM 사용자 이름 텍스트를 로깅하지 않습니다. 사용자 이름 텍스트는 HIDDEN_DUE_TO_SECURITY_REASONS 값으로 마스킹돼요. 예시는 이 주제 뒷부분의 잘못된 사용자 이름으로 인한 로그인 실패 이벤트 예시를 참고하세요. 이런 실패는 사용자 오류로 발생할 수 있어 로그에 남기면 잠재적으로 민감한 정보가 노출될 수 있기 때문이에요. 예를 들어:
- 사용자 이름 입력란에 실수로 암호를 입력한 경우
- 한 AWS 계정의 로그인 페이지 링크를 선택했지만 다른 AWS 계정의 계정 번호를 입력한 경우
- 어느 계정으로 로그인하는지 잊고 실수로 개인 이메일 계정 이름, 은행 로그인 식별자, 또는 다른 개인 ID를 입력한 경우
임시 자격 증명 로그인 이벤트 로깅
주체가 임시 자격 증명을 요청하면 주체 유형에 따라 CloudTrail이 이벤트를 로깅하는 방식이 달라져요. 주체가 다른 계정의 역할을 수임하면 이 과정이 복잡해질 수 있습니다. 역할 교차 계정 작업 관련 작업을 수행하려면 여러 API 호출이 있어요. 먼저 주체가 임시 자격 증명을 검색하기 위해 AWS STS API를 호출합니다. 이 작업은 호출 계정과 AWS STS 작업을 수행한 계정 양쪽에 로깅됩니다. 그런 다음 주체는 수임한 역할의 계정에서 역할을 사용해 다른 API 호출을 수행합니다.
역할 신뢰 정책에 sts:SourceIdentity 조건 키를 사용하면 사용자가 역할을 수임할 때 자격 증명을 지정하도록 요구할 수 있어요. 예를 들어 IAM 사용자가 자기 사용자 이름을 소스 자격 증명으로 지정하도록 요구할 수 있습니다. 이렇게 하면 AWS에서 특정 작업을 누가 수행했는지 파악하는 데 도움이 돼요. 자세한 내용은 sts:SourceIdentity를 참고하세요. 또한 sts:RoleSessionName을 사용해 사용자가 역할을 수임할 때 세션 이름을 지정하도록 요구할 수도 있습니다. 이는 AWS CloudTrail 로그를 검토할 때 서로 다른 주체가 사용하는 역할의 세션을 구분하는 데 도움이 됩니다.
다음 표는 임시 자격 증명을 생성하는 각 AWS STS API에 대해 CloudTrail이 어떤 사용자 자격 증명 정보를 로깅하는지 보여 줍니다.
| 주체 유형 | STS API | 호출자 계정의 CloudTrail 로그 사용자 자격 증명 | 수임된 역할 계정의 CloudTrail 로그 사용자 자격 증명 | 역할의 후속 API 호출에 대한 CloudTrail 로그 사용자 자격 증명 |
|---|---|---|---|---|
| AWS 계정 루트 사용자 자격 증명 | GetSessionToken |
루트 사용자 자격 증명 | 역할 소유자 계정은 호출 계정과 동일 | 루트 사용자 자격 증명 |
| AWS 계정 루트 사용자 자격 증명 | AssumeRoot |
루트 사용자 세션 | 계정 번호와 주체 ID(사용자인 경우) | 루트 사용자 세션 |
| IAM 사용자 | GetSessionToken |
IAM 사용자 자격 증명 | 역할 소유자 계정은 호출 계정과 동일 | IAM 사용자 자격 증명 |
| IAM 사용자 | GetFederationToken |
IAM 사용자 자격 증명 | 역할 소유자 계정은 호출 계정과 동일 | IAM 사용자 자격 증명 |
| IAM 사용자 | AssumeRole |
IAM 사용자 자격 증명 | 계정 번호와 주체 ID(사용자인 경우), 또는 AWS 서비스 주체 | 역할 자격 증명만(사용자 없음) |
| 외부 인증 사용자 | AssumeRoleWithSAML |
n/a | SAML 사용자 자격 증명 | 역할 자격 증명만(사용자 없음) |
| 외부 인증 사용자 | AssumeRoleWithWebIdentity |
n/a | OIDC/웹 사용자 자격 증명 | 역할 자격 증명만(사용자 없음) |
CloudTrail은 액션에 리소스에 대한 변경 효과가 없으면 그 액션을 읽기 전용으로 간주합니다. 읽기 전용 이벤트를 로깅할 때 CloudTrail은 로그의 responseElements 정보를 편집(redact)합니다. 읽기 전용이 아닌 이벤트를 로깅할 때는 전체 responseElements가 로그 항목에 표시됩니다. AWS STS API AssumeRole, AssumeRoleWithSAML, AssumeRoleWithWebIdentity의 경우 읽기 전용으로 로깅되지만, CloudTrail은 이 API들에 대해 secretAccessKey를 제외한 전체 responseElements를 로그에 포함합니다.
다음 표는 임시 자격 증명을 생성하는 각 AWS STS API에 대해 CloudTrail이 responseElements와 readOnly 정보를 어떻게 로깅하는지 보여 줍니다.
| STS API | 응답 요소 정보 | 읽기 전용 |
|---|---|---|
AssumeRole |
포함 | true |
AssumeRoleWithSAML |
포함 | true |
AssumeRoleWithWebIdentity |
포함 | true |
AssumeRoot |
포함 | false |
GetFederationToken |
포함 | false |
GetSessionToken |
포함 | false |
CloudTrail 로그의 IAM API 이벤트 예시
CloudTrail 로그 파일에는 JSON 형식으로 구성된 이벤트가 들어 있습니다. API 이벤트는 단일 API 요청을 나타내며 주체, 요청된 액션, 모든 파라미터, 액션의 날짜·시각에 대한 정보를 포함해요.
CloudTrail 로그 파일의 IAM API 이벤트 예시
다음 예시는 IAM GetUserPolicy 작업에 대한 요청의 CloudTrail 로그 항목을 보여 줍니다.
{
"eventVersion": "1.09",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AIDACKCEVSQ6C2EXAMPLE:Role-Session-Name",
"arn": "arn:aws:sts::111122223333:assumed-role/Role-Name/Role-Session-Name",
"accountId": "111122223333",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AIDACKCEVSQ6C2EXAMPLE",
"arn": "arn:aws:iam::111122223333:role/Admin",
"accountId": "111122223333",
"userName": "Admin"
},
"attributes": {
"creationDate": "2024-09-09T17:50:16Z",
"mfaAuthenticated": "false"
}
}
},
"eventTime": "2024-09-09T17:51:44Z",
"eventSource": "iam.amazonaws.com",
"eventName": "GetUserPolicy",
"awsRegion": "us-east-1",
"sourceIPAddress": "192.0.2.101",
"userAgent": "aws-cli/1.16.96 Python/2.7.8 Linux/10 botocore/1.12.86",
"requestParameters": {
"userName": "ExampleIAMUserName",
"policyName": "ExamplePoliccyName"
},
"responseElements": null,
"requestID": "9EXAMPLE-0c68-11e4-a24e-d5e16EXAMPLE",
"eventID": "cEXAMPLE-127e-4632-980d-505a4EXAMPLE",
"readOnly": true,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "111122223333",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "iam.amazonaws.com"
}
}
이 이벤트 정보를 통해, requestParameters 요소에 지정된 대로 사용자 JaneDoe에 대해 ReadOnlyAccess-JaneDoe-201407151307라는 이름의 사용자 정책을 가져오는 요청이었음을 알 수 있어요. 또한 이 요청이 2014년 7월 15일 오후 9:40(UTC)에 JaneDoe라는 IAM 사용자에 의해 이루어졌음을 확인할 수 있습니다. 이 경우 요청은 userAgent 요소에서 알 수 있듯이 AWS Management Console에서 시작되었어요.
CloudTrail 로그의 AWS STS API 이벤트 예시
CloudTrail 로그 파일에는 JSON 형식으로 구성된 이벤트가 들어 있습니다. API 이벤트는 단일 API 요청을 나타내며 주체, 요청된 액션, 모든 파라미터, 액션의 날짜·시각에 대한 정보를 포함해요.
CloudTrail 로그 파일의 교차 계정 AWS STS API 이벤트 예시
계정 777788889999의 John이라는 IAM 사용자가 계정 111122223333의 EC2-dev 역할을 수임하기 위해 AWS STS AssumeRole 액션을 호출합니다. 계정 관리자는 사용자가 역할을 수임할 때 소스 자격 증명을 자기 사용자 이름과 동일하게 설정하도록 요구합니다. 사용자는 John이라는 소스 자격 증명 값을 전달해요.
{
"eventVersion": "1.05",
"userIdentity": {
"type": "IAMUser",
"principalId": "AIDAQRSTUVWXYZEXAMPLE",
"arn": "arn:aws:iam::777788889999:user/John",
"accountId": "777788889999",
"accessKeyId": "AKIAIOSFODNN7EXAMPLE",
"userName": "John"
},
"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": "John-EC2-dev",
"sourceIdentity": "John",
"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:John-EC2-dev",
"arn": "arn:aws:sts::111122223333:assumed-role/EC2-dev/John-EC2-dev"
},
"sourceIdentity": "John",
"sessionTokenSize": 1428,
"sessionTokenUtilization": 34
},
"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"
}
두 번째 예시는 같은 요청에 대한 수임된 역할 계정(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": "John-EC2-dev",
"sourceIdentity": "John",
"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:John-EC2-dev",
"arn": "arn:aws:sts::111122223333:assumed-role/EC2-dev/John-EC2-dev"
},
"sourceIdentity": "John",
"sessionTokenSize": 1428,
"sessionTokenUtilization": 34
},
"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은 이전에 John 사용자로 JohnRole1 역할을 수임했습니다. 이 요청에서 그는 그 역할의 자격 증명을 사용해 JohnRole2 역할을 수임해요. 이것을 역할 체이닝(role chaining)이라고 합니다. John1 역할을 수임할 때 설정한 소스 자격 증명은 JohnRole2를 수임하는 요청에도 유지됩니다. John이 역할을 수임할 때 다른 소스 자격 증명을 설정하려 하면 요청이 거부돼요. John은 요청에 세션 태그 두 개를 전달하고, 이 두 태그를 전이적(transitive)으로 설정합니다. 요청은 John이 JohnRole1을 수임할 때 전이적으로 설정했기 때문에 Department 태그를 전이적으로 상속합니다. 소스 자격 증명에 대한 자세한 내용은 수임된 역할로 수행한 작업 모니터링·제어를 참고하세요. 역할 체이닝의 전이 키에 대한 자세한 내용은 세션 태그로 역할 체이닝을 참고하세요.
{
"eventVersion": "1.05",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROAIN5ATK5U7KEXAMPLE:JohnRole1",
"arn": "arn:aws:sts::111111111111:assumed-role/John/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": "John"
},
"sourceIdentity": "John"
}
},
"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": "[email protected]",
"key": "Email"
},
{
"value": "12345",
"key": "CostCenter"
}
],
"roleArn": "arn:aws:iam::111111111111:role/JohnRole2",
"roleSessionName": "Role2WithTags",
"sourceIdentity": "John",
"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": "John",
"sessionTokenSize": 1652,
"sessionTokenUtilization": 40
},
"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 이벤트 예시
다음 예시는 AWS 서비스가 서비스 역할의 권한을 사용해 다른 서비스 API를 호출한 요청에 대한 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": "amzn-s3-demo-bucket"
},
"responseElements": null,
"requestID": "EXAMPLE463D56D4C",
"eventID": "dEXAMPLE-265a-41e0-9352-4401bEXAMPLE",
"eventType": "AwsApiCall",
"recipientAccountId": "777788889999"
}
CloudTrail 로그 파일의 SAML AWS STS API 이벤트 예시
다음 예시는 AWS STS AssumeRoleWithSAML 액션에 대한 요청의 CloudTrail 로그 항목을 보여 줍니다. 요청에는 SAML 어서션으로 전달되는 세션 태그인 CostCenter와 Project SAML 속성이 포함되어 있어요. 이 태그들은 전이적으로 설정되어 역할 체이닝 시나리오에서 유지됩니다. 요청에는 선택적 API 파라미터 DurationSeconds도 포함되는데, CloudTrail 로그에서는 durationSeconds로 표시되며 1800초로 설정됩니다. 요청에는 SAML 어서션으로 전달되는 sourceIdentity SAML 속성도 포함돼요. 누군가 결과 역할 세션 자격 증명으로 다른 역할을 수임하면 이 소스 자격 증명이 유지됩니다.
{
"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": 34,
"sessionTokenSize": 1428,
"sessionTokenUtilization": 34,
"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 로그 항목을 보여 줍니다. 요청에는 OpenID Connect(OIDC) 자격 증명 공급자(IdP) 토큰으로 전달되는 세션 태그인 CostCenter와 Project 속성이 포함되어 있어요. 이 태그들은 전이적으로 설정되어 역할 체이닝에서 유지됩니다. 요청에는 자격 증명 공급자 토큰의 sourceIdentity 속성도 포함됩니다. 누군가 결과 역할 세션 자격 증명으로 다른 역할을 수임하면 이 소스 자격 증명이 유지돼요.
CloudTrail 로그 항목에는 identityProviderConnectionVerificationMethod 속성이 있는 additionalEventData 필드도 포함됩니다. 이 속성은 AWS가 OIDC 공급자와의 연결을 검증하는 데 사용한 방법을 나타냅니다. 속성 값은 IAMTrustStore 또는 Thumbprint 중 하나예요. IAMTrustStore 값은 AWS가 신뢰할 수 있는 루트 CA(인증 기관) 라이브러리를 사용해 OIDC IdP와의 연결을 성공적으로 검증했음을 나타냅니다. Thumbprint 값은 AWS가 IdP 구성에 설정된 인증서 지문(thumbprint)을 사용해 OIDC IdP 서버 인증서를 검증했음을 의미합니다.
{
"eventVersion": "1.08",
"userIdentity": {
"type": "WebIdentityUser",
"principalId": "arn:aws:iam::444455556666:oidc-provider/<issuer url of OIDC provider>:<id of application>:<id of user>",
"userName": "<id of user>",
"identityProvider": "arn:aws:iam::444455556666:oidc-provider/<issuer url of OIDC provider>"
},
"eventTime": "2024-07-09T15:41:37Z",
"eventSource": "sts.amazonaws.com",
"eventName": "AssumeRoleWithWebIdentity",
"awsRegion": "us-east-2",
"sourceIPAddress": "192.0.2.101",
"userAgent": "aws-cli/2.13.29 Python/3.11.6 Windows/10 exe/AMD64 prompt/off command/sts.assume-role-with-web-identity",
"requestParameters": {
"roleArn": "arn:aws:iam::444455556666:role/FederatedWebIdentityRole",
"roleSessionName": "<assigned role session name>",
"sourceIdentity": "MyWebIdentityUser",
"durationSeconds": 3600,
"principalTags": {
"CostCenter": "24680",
"Project": "Pegasus"
},
"transitiveTagKeys": [
"CostCenter",
"Project"
]
},
"responseElements": {
"credentials": {
"accessKeyId": "ASIAIOSFODNN7EXAMPLE",
"sessionToken": "<encoded session token blob>",
"expiration": "Jul 9, 2024, 4:41:37 PM"
},
"subjectFromWebIdentityToken": "<id of user>",
"sourceIdentity": "MyWebIdentityUser",
"assumedRoleUser": {
"assumedRoleId": "AROA123456789EXAMPLE:<assigned role session name>",
"arn": "arn:aws:sts::444455556666:assumed-role/FederatedWebIdentityRole/<assigned role session name>"
},
"provider": "arn:aws:iam::444455556666:oidc-provider/<issuer url of OIDC provider>",
"audience": "<id of application>",
"sessionTokenSize": 1536,
"sessionTokenUtilization": 37
},
"additionalEventData": {
"identityProviderConnectionVerificationMethod": "IAMTrustStore"
},
"requestID": "aEXAMPLE-0b26-40df-8973-c7012EXAMPLE",
"eventID": "aEXAMPLE-ee29-4ac0-a0ed-3f5c5EXAMPLE",
"readOnly": true,
"resources": [
{
"accountId": "444455556666",
"type": "AWS::IAM::Role",
"ARN": "arn:aws:iam::444455556666:role/FederatedWebIdentityRole"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "444455556666",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "sts.us-east-2.amazonaws.com"
}
}
CloudTrail 로그 파일의 글로벌 엔드포인트 사용 AWS STS API 이벤트 예시
AWS Security Token Service(AWS STS) 글로벌 엔드포인트(https://sts.amazonaws.com)에 대한 요청에는 AWS CloudTrail 로그 필드가 추가됩니다: endpointType와 awsServingRegion. 이 필드는 additionalEventData의 RequestDetails 요소 아래에 나타나 호출되는 서빙 AWS 리전과 엔드포인트 유형을 기록합니다. endpointType 필드는 요청을 처리한 글로벌 엔드포인트의 유형을 나타내는 global 또는 regional 값을 가질 수 있어요. AWS STS 글로벌 엔드포인트 변경에 대한 자세한 내용은 AWS STS 리전 및 엔드포인트를 참고하세요.
참고 — AWS STS 글로벌 엔드포인트에 대한 요청 로그는 US East(N. Virginia) 리전으로 전송됩니다. AWS STS 리전별 엔드포인트가 처리한 요청의 CloudTrail 로그는 계속해서 각각의 해당 리전에 기록돼요.
다음 예시는 글로벌 엔드포인트(https://sts.amazonaws.com)에 보낸 AWS STS 요청 중 Europe(Stockholm) 리전(eu-north-1)에서 시작된 요청의 CloudTrail 로그 항목을 보여 줍니다. endpointType 필드 값 global은 AWS STS 요청이 Europe(Stockholm) 리전의 글로벌 엔드포인트에 의해 처리되었음을 나타냅니다.
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROA123456789EXAMPLE:developer",
"arn": "arn:aws:sts::777788889999:assumed-role/Admin/developer",
"accountId": "777788889999",
"accessKeyId": "ASIAIOSFODNN7EXAMPLE",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROA123456789EXAMPLE",
"arn": "arn:aws:iam::777788889999:role/Admin",
"accountId": "777788889999",
"userName": "Admin"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2025-02-12T21:44:28Z",
"mfaAuthenticated": "false"
}
}
},
"eventTime": "2025-02-12T22:16:48Z",
"eventSource": "sts.amazonaws.com",
"eventName": "AssumeRole",
"awsRegion": "us-east-1",
"sourceIPAddress": "192.0.2.0",
"userAgent": "aws-cli/2.15.33 Python/3.11.8 Linux/5.10.233-204.894.amzn2int.x86_64 exe/x86_64.amzn.2 prompt/off command/sts.assume-role",
"requestParameters": {
"roleArn": "arn:aws:iam::777788889999:role/test-role",
"roleSessionName": "test-global-assume-role"
},
"responseElements": {
"credentials": {
"accessKeyId": "ASIAIOSFODNN7EXAMPLE",
"sessionToken": "<encoded session token blob>",
"expiration": "Feb 12, 2025, 11:16:48 PM"
},
"assumedRoleUser": {
"assumedRoleId": "AROA987654321EXAMPLE:test-global-assume-role",
"arn": "arn:aws:sts::777788889999:assumed-role/test-role/test-global-assume-role"
},
"sessionTokenSize": 1096,
"sessionTokenUtilization": 26
},
"additionalEventData": {
"RequestDetails": {
"awsServingRegion": "eu-north-1",
"endpointType": "global"
}
},
"requestID": "EXAMPLE7-2497-457a-9586-f21feEXAMPLE",
"eventID": "EXAMPLEc-3d26-4c3a-9c94-722a9EXAMPLE",
"readOnly": true,
"resources": [
{
"accountId": "777788889999",
"type": "AWS::IAM::Role",
"ARN": "arn:aws:iam::777788889999:role/test-role"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "777788889999",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "sts-global.eu-north-1.amazonaws.com"
}
}
비교를 위해 다음 예시는 리전별 엔드포인트(https://sts.us-west-2.amazonaws.com)에 보내져 Europe(Stockholm) 리전(eu-north-1)의 리전별 엔드포인트가 처리한 AWS STS 요청의 CloudTrail 로그 항목을 보여 줍니다. endpointType 필드 값 regional은 AWS STS 요청이 Europe(Stockholm) 리전의 리전별 엔드포인트에 의해 처리되었음을 나타냅니다.
{
"eventVersion": "1.08",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROA123456789EXAMPLE:developer",
"arn": "arn:aws:sts::777788889999:assumed-role/Admin/developer",
"accountId": "777788889999",
"accessKeyId": "ASIAIOSFODNN7EXAMPLE",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROA123456789EXAMPLE",
"arn": "arn:aws:iam::777788889999:role/Admin",
"accountId": "777788889999",
"userName": "Admin"
},
"webIdFederationData": {},
"attributes": {
"creationDate": "2025-02-12T21:44:28Z",
"mfaAuthenticated": "false"
}
}
},
"eventTime": "2025-02-12T22:16:30Z",
"eventSource": "sts.amazonaws.com",
"eventName": "AssumeRole",
"awsRegion": "eu-north-1",
"sourceIPAddress": "192.0.2.0",
"userAgent": "aws-cli/2.15.33 Python/3.11.8 Linux/5.10.233-204.894.amzn2int.x86_64 exe/x86_64.amzn.2 prompt/off command/sts.assume-role",
"requestParameters": {
"roleArn": "arn:aws:iam::777788889999:role/test-role",
"roleSessionName": "test-global-assume-role"
},
"responseElements": {
"credentials": {
"accessKeyId": "ASIAIOSFODNN7EXAMPLE",
"sessionToken": "<encoded session token blob>",
"expiration": "Feb 12, 2025, 11:16:30 PM"
},
"assumedRoleUser": {
"assumedRoleId": "AROA987654321EXAMPLE:test-global-assume-role",
"arn": "arn:aws:sts::777788889999:assumed-role/test-role/test-global-assume-role"
},
"sessionTokenSize": 1096,
"sessionTokenUtilization": 26
},
"additionalEventData": {
"RequestDetails": {
"endpointType": "regional",
"awsServingRegion": "eu-north-1"
}
},
"requestID": "EXAMPLEd-2116-4cd7-bd72-9f72fEXAMPLE",
"eventID": "EXAMPLEd-219a-48ed-bc54-00e3cEXAMPLE",
"readOnly": true,
"resources": [
{
"accountId": "777788889999",
"type": "AWS::IAM::Role",
"ARN": "arn:aws:iam::777788889999:role/test-role"
}
],
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "777788889999",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "sts.eu-north-1.amazonaws.com"
}
}
CloudTrail 로그의 로그인 이벤트 예시
CloudTrail 로그 파일에는 JSON 형식으로 구성된 이벤트가 들어 있습니다. 로그인 이벤트는 단일 로그인 요청을 나타내며 로그인 주체, 리전, 액션의 날짜·시각에 대한 정보를 포함해요.
CloudTrail 로그 파일의 로그인 성공 이벤트 예시
다음 예시는 성공적인 로그인 이벤트에 대한 CloudTrail 로그 항목을 보여 줍니다.
{
"eventVersion": "1.05",
"userIdentity": {
"type": "IAMUser",
"principalId": "AIDACKCEVSQ6C2EXAMPLE",
"arn":"arn:aws:iam::111122223333:user/John",
"accountId": "111122223333",
"userName": "John"
},
"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"
}
다음 예시는 성공적인 인증 코드(authorization code) 요청에 대한 CloudTrail 로그 항목을 보여 줍니다.
{
"eventVersion": "1.11",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROATJHQDX737YZP72NTF:thesjain-Isengard",
"arn": "arn:aws:sts::225989345271:assumed-role/Admin/thesjain-Isengard",
"accountId": "225989345271",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROATJHQDX737YZP72NTF",
"arn": "arn:aws:iam::225989345271:role/Admin",
"accountId": "225989345271",
"userName": "Admin"
},
"attributes": {
"creationDate": "2025-11-17T22:50:14Z",
"mfaAuthenticated": "false"
}
}
},
"eventTime": "2025-11-17T22:51:32Z",
"eventSource": "signin.amazonaws.com",
"eventName": "AuthorizeOAuth2Access",
"awsRegion": "us-east-1",
"sourceIPAddress": "52.94.133.136",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/142.0.0.0 Safari/537.36",
"requestParameters": {
"scope": "openid",
"redirect_uri": "http://127.0.0.1:53037/oauth/callback",
"code_challenge_method": "SHA-256",
"client_id": "arn:aws:signin:::devtools/same-device"
},
"responseElements": null,
"additionalEventData": {
"success": "true",
"x-amzn-vpce-id": ""
},
"requestID": "e2854c76-1cba-4360-9fd1-5037b591466b",
"eventID": "59e1720d-3deb-44ff-933d-6828be2a860a",
"readOnly": true,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "225989345271",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "us-east-1.signin.aws.amazon.com"
}
}
다음 예시는 성공적인 OAuth2 토큰 생성 요청에 대한 CloudTrail 로그 항목을 보여 줍니다.
{
"eventVersion": "1.11",
"userIdentity": {
"type": "AssumedRole",
"principalId": "AROATJHQDX737YZP72NTF:jacobjoj-Isengard",
"arn": "arn:aws:sts::225989345271:assumed-role/Admin/jacobjoj-Isengard",
"accountId": "225989345271",
"sessionContext": {
"sessionIssuer": {
"type": "Role",
"principalId": "AROATJHQDX737YZP72NTF",
"arn": "arn:aws:iam::225989345271:role/Admin",
"accountId": "225989345271",
"userName": "Admin"
},
"attributes": {
"creationDate": "2025-11-18T20:38:10Z",
"mfaAuthenticated": "false"
}
}
},
"eventTime": "2025-11-18T20:38:44Z",
"eventSource": "signin.amazonaws.com",
"eventName": "CreateOAuth2Token",
"awsRegion": "us-east-1",
"sourceIPAddress": "15.248.6.6",
"userAgent": "aws-cli/2.32.0 md/awscrt#0.28.4 ua/2.1 os/macos#24.6.0 md/arch#arm64 lang/python#3.13.9 md/pyimpl#CPython m/b,AA,Z,E cfg/retry-mode#standard md/installer#exe sid/35033f4ca1bd md/prompt#off md/command#login",
"requestParameters": {
"client_id": "arn:aws:signin:::devtools/same-device"
},
"responseElements": null,
"additionalEventData": {
"success": "true",
"x-amzn-vpce-id": ""
},
"requestID": "94562943-c85b-4dc1-bf72-43b0fd42d6de",
"eventID": "0b338fac-6a10-4740-b34d-1bb6923e799e",
"readOnly": true,
"eventType": "AwsApiCall",
"managementEvent": true,
"recipientAccountId": "225989345271",
"eventCategory": "Management",
"tlsDetails": {
"tlsVersion": "TLSv1.3",
"cipherSuite": "TLS_AES_128_GCM_SHA256",
"clientProvidedHostHeader": "us-east-1.signin.aws.amazon.com"
}
}
CloudTrail 로그 파일에 포함된 정보에 대한 자세한 내용은 AWS CloudTrail 사용자 가이드의 CloudTrail 이벤트 참조를 참고하세요.
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"
}
이 정보를 통해 userIdentity 요소에 표시된 대로 JaneDoe라는 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는 이 동작을 제거하도록 프로세스·코드·구성을 업데이트하거나, 이 동작을 명시적으로 허용하도록 역할 신뢰 정책을 업데이트할 것을 권장합니다. 자세한 내용은 IAM 역할 신뢰 정책 동작 업데이트 공지를 참고하세요.