특정 IAM 사용자, 역할과 AWS 액세스 키의 계정 활동을 모니터링하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2022년 5월 27일

특정 AWS Identity and Access Management(IAM) 자격 증명의 계정 활동을 조회하고 모니터링하고 싶습니다. 어떻게 해야 하나요?

간략한 설명

특정 IAM ID의 계정 활동을 조회하고 모니터링하려면 다음과 같은 AWS 서비스와 기능 중 아무것이나 사용하면 됩니다.

해결 방법

CloudTrail 이벤트 기록 사용 방법

참고: CloudTrail은 지난 90일간의 이벤트 기록을 검색하는 데 사용할 수 있습니다.

1.    CloudTrail 콘솔을 엽니다.

2.    [Event history]를 선택합니다.

3.    필터(Filter)에서 드롭다운 메뉴를 선택합니다. 그런 다음 사용자 이름(User name)을 선택합니다.
참고: AWS 액세스 키를 기준으로 필터링할 수도 있습니다.

4.    사용자 또는 역할 이름 입력(Enter user or role name) 텍스트 상자에 IAM 사용자의 "알기 쉬운 이름(friendly name)" 또는 위임된 역할 세션 이름을 입력합니다.

참고: 특정 세션에 대한 역할 세션 이름은 역할을 수임할 때 세션 이름으로 제공되는 값입니다. "사용자 이름" 필드의 값은 IAM 역할을 사용하여 수행된 호출의 역할 이름이 아닙니다. 

5.    시간 범위(Time range)에 원하는 시간 범위를 입력합니다. 그런 다음 적용(Apply)을 선택합니다.

6.    이벤트 시간(Event time)에서 이벤트를 확장합니다. 그런 다음 이벤트 보기(View event)를 선택합니다.

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

API 호출을 수행하는 데 사용된 IAM 사용자 보안 인증 정보를 포함한 userIdentity 요소의 예

참고: Alice를 검색 중인 사용자 이름으로 바꾸고 IAM 사용자의 "친숙한 이름" 또는 위임된 역할 "세션 이름"을 입력합니다. 특정 세션에 대한 역할 세션 이름은 역할을 수임할 때 세션 이름으로 제공되는 값입니다. "사용자 이름" 필드의 값은 IAM 역할을 사용하여 수행된 호출의 역할 이름이 아닙니다. 

"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 Logs Insights 사용 방법

참고: CloudWatch Logs Insights를 사용하면 지난 90일 범위를 벗어난 API 기록을 검색할 수 있습니다. 트레일이 생성되어 Amazon CloudWatch Logs에 기록하도록 구성된 상태여야 합니다. 자세한 내용은 트레일 생성을 참조하세요.

1.    CloudWatch 콘솔을 엽니다.

2.    로그(Logs)를 선택합니다.

3.    로그 그룹(Log Groups)에서 로그 그룹을 선택합니다.

4.    로그 그룹 검색(Search Log Group)을 선택합니다.

5.    이벤트 필터링(Filter events)에 쿼리를 입력하여 사용자의 API 호출이나 특정 API 작업을 검색합니다. 그런 다음 새로 고침 아이콘을 선택합니다.

사용자의 API 호출 로그를 검색하기 위한 쿼리의 예

참고: Alice를 검색 중인 사용자 이름으로 바꾸고 IAM 사용자의 "친숙한 이름" 또는 위임된 역할 "세션 이름"을 입력합니다. 특정 세션에 대한 역할 세션 이름은 역할을 수임할 때 세션 이름으로 제공되는 값입니다. "사용자 이름" 필드 값은 IAM 역할을 사용하여 수행된 호출의 역할 이름이 아닙니다.

{ $.userIdentity.userName = “Alice” }

특정 API 작업 로그를 검색하기 위한 쿼리의 예

참고: 다음 예제 쿼리는 DescribeInstances API 작업을 검색합니다.

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

자세한 내용은 CloudWatch Logs Insights 쿼리 구문을 참조하세요.

Athena 쿼리 사용 방법

참고: Athena를 사용하면 지난 90일간의 CloudTrail Logs를 쿼리할 수 있습니다.

1.    Athena 콘솔을 엽니다.

2.    [Query Editor]를 선택합니다.

3.    사용 사례에 따라 다음과 같은 예제 쿼리 중 하나를 입력합니다. 그런 다음 쿼리 실행(Run query)을 선택합니다.

특정 IAM 사용자가 수행한 모든 CloudTrail 이벤트를 반환하는 쿼리의 예

중요: athena-tableAthena 테이블 이름으로 바꿔야 합니다. Alice를 계정 활동을 조회하고자 하는 IAM 사용자로 바꿉니다.

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

주어진 IAM 역할이 수행한 모든 API 활동을 필터링하기 위한 쿼리의 예

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

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

역할 ARN에 일치하는 쿼리의 예

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

IAM 액세스 키 ID를 사용해 모든 활동을 필터링하는 쿼리의 예

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