특정 IAM 사용자, 역할 및 AWS 액세스 키에 대한 계정 활동 내역을 보고 추적하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 11일

AWS Identity and Access Management(IAM) 자격 증명에 대한 계정 활동을 보고 모니터링하려고 합니다.

해결 방법

AWS CloudTrail 이벤트 기록, Amazon CloudWatch 쿼리 또는 Amazon Athena 쿼리를 사용하여 IAM 사용자 및 역할에 대한 계정 활동 기록에 액세스합니다.

CloudTrail 이벤트 기록

CloudTrail을 사용하여 지난 90일간의 이벤트 기록을 검색할 수 있습니다.

  1. CloudTrail 콘솔을 열고, [이벤트 기록(Event history)]을 선택합니다.
  2. [필터(Filter)]에서 드롭다운 메뉴를 선택하고 [사용자 이름(User name)]을 선택합니다.
    참고: AWS 액세스 키를 기준으로 필터링할 수도 있습니다.
  3. [사용자 또는 역할 이름 입력(Enter user or role name)] 텍스트 상자에 사용자 친화적인 IAM 이름 또는 위임된 역할 세션 이름을 입력합니다.
  4. [시간 범위(Time range)]에 원하는 시간 범위를 입력한 다음 [적용(Apply)]을 선택합니다.
  5. [이벤트 시간(Event time)]에서 이벤트를 확장한 다음 [이벤트 보기(View event)]를 선택합니다.

userIdentity 요소에는 요청한 IAM 자격 증명의 유형과 사용된 자격 증명에 대한 세부 정보가 포함되어 있습니다.

다음은 API 호출에 사용되는 IAM 사용자 자격 증명이 포함된 userIdentity 요소의 예입니다.

참고: Alice를 검색할 사용자 이름으로 바꿉니다.

"userIdentity": {
  "type": "IAMUser",
  "principalId": "AIDAJ45Q7YFFAREXAMPLE",
  "arn": "arn:aws:iam::123456789012:user/Alice",
  "accountId": "123456789012",
  "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
  "userName": "Alice"
}

다음은 임시 보안 자격 증명이 있는 userIdentity 요소의 예입니다.

"userIdentity": {
    "type": "AssumedRole",
    "principalId": "AROAIDPPEZS35WEXAMPLE:AssumedRoleSessionName",
    "arn": "arn:aws:sts::123456789012:assumed-role/RoleToBeAssumed/AssumedRoleSessionName", 
    "accountId": "123456789012",
    "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
    "sessionContext": {
      "attributes": {
        "mfaAuthenticated": "false",
        "creationDate": "20131102T010628Z"
      },
      "sessionIssuer": {
        "type": "Role",
        "principalId": "AROAIDPPEZS35WEXAMPLE",
        "arn": "arn:aws:iam::123456789012:role/RoleToBeAssumed",
        "accountId": "123456789012",
        "userName": "RoleToBeAssumed"
      }
   }
}

참고: CloudTrail 이벤트 기록에서는 위임된 역할 세션 이름을 이벤트 필터링을 위한 사용자 이름으로 사용합니다.

API 호출은 IAM 역할을 맡아서 획득한 임시 보안 자격 증명을 사용합니다. 요소에는 자격 증명을 얻기 위해 맡은 역할에 대한 추가 세부 정보가 포함되어 있습니다.

참고: 사용자 활동이 보이지 않으면 CloudTrail이 AWS 서비스를 지원하고 API 이벤트를 기록했는지 확인하십시오. 자세한 내용은 CloudTrail에 대한 AWS 서비스 주제를 참조하십시오.

CloudWatch 쿼리

CloudWatch 쿼리를 사용하여 최근 90일이 지난 API 기록을 검색할 수 있습니다.

참고: Amazon CloudWatch 로그에 기록하도록 트레일을 생성하고 구성해야 합니다. 자세한 내용은 키 생성을 참조하세요.

  1. CloudWatch 콘솔을 열고 [로그(Logs)]를 선택합니다.
  2. [로그 그룹(Log Groups)]에서 로그 그룹을 선택합니다.
  3. [로그 그룹 검색(Search Log Group)]을 선택합니다.
  4. [필터 이벤트(Filter events)]에서 다음과 유사한 쿼리를 입력하여 로그에서 사용자의 API 호출을 검색한 다음 새로 고침 아이콘을 선택합니다.
{ $.userIdentity.userName = “Alice” }

특정 API 작업을 쿼리할 수도 있습니다. 이 예제 쿼리는 API 작업 DescribeInstances를 검색합니다.

{ ($.eventName = “DescribeInstances") && ($.requestParameters.userName = “Alice"  ) }

Athena 쿼리

Athena를 사용하여 지난 90일 동안 CloudTrail 로그를 쿼리할 수 있습니다.

1.    [Athena 콘솔]을 열고 [Query Editor]를 선택합니다.

2.    다음 예제 쿼리를 입력하여 IAM 사용자 Alice가 수행한 모든 CloudTrail 이벤트를 반환한 다음 [쿼리 실행(Run query)]을 선택합니다.

참고: athena-tableAthena 테이블 이름으로 바꿉니다.

다음 예제 쿼리는 IAM 사용자 Alice가 수행한 모든 CloudTrail 이벤트를 반환합니다.

SELECT *
FROM athena-table
WHERE useridentity.type = 'IAMUser'
AND useridentity.username LIKE 'Alice';

3.    다음 예제 쿼리를 입력하여 IAM 역할이 수행하는 모든 API 활동을 필터링한 다음 [Run query]를 선택합니다.

참고: role-name을 IAM 역할 이름으로 바꿉니다.

SELECT *
FROM athena-table
WHERE useridentity.sessionContext.sessionissuer.arn LIKE '%role-name%’
AND useridentity.sessionContext.sessionissuer.type = ‘Role’;

4.    역할 ARN과 일치하는 다음 예제 쿼리를 입력한 후 [Run query]를 선택합니다.

SELECT *
FROM athena-table
WHERE useridentity.sessionContext.sessionissuer.arn = 'arn:aws:iam::account-id123456789:role/role-name'
AND useridentity.sessionContext.sessionissuer.type = ‘Role’;

5.    다음 예제 쿼리를 입력하여 IAM 액세스 키 ID를 사용하여 모든 활동을 필터링한 다음 [쿼리 실행(Run query)]을 선택합니다.

SELECT eventTime, eventName, userIdentity.principalId,eventSource
FROM athena-table
WHERE useridentity.accesskeyid like 'AKIAIOSFODNN7EXAMPLE'