내용으로 건너뛰기

Athena를 사용하여 AWS Support API 호출에 대해 CloudTrail 로그를 쿼리하려면 어떻게 해야 합니까?

4분 분량
0

Amazon Athena 쿼리를 실행하여 AWS Support에서 AWS 계정에 대해 수행한 API 호출을 AWS CloudTrail 로그에서 검색하려고 합니다.

간략한 설명

문제 해결을 돕기 위해 AWS Support에서는 AWS 리소스에 대한 읽기 전용 보안 메타데이터를 수집할 수 있습니다. AWS Support는 AWSServiceRoleForSupport라는 AWS Identity and Access Management(IAM) 서비스 연결 역할을 사용하여 메타데이터를 수집합니다.

AWS Support에서 계정에 대해 수행하는 API 호출 관련 정보를 찾으려면 Athena를 사용하여 CloudTrail 로그를 쿼리하십시오.

해결 방법

파티션 프로젝션을 사용하여 CloudTrail 테이블 수동 생성

쿼리 런타임을 줄이기 위해 CloudTrail 테이블을 분할하더라도 시간이 지나면 CloudTrail 로그 크기가 증가할 수 있습니다. 많이 분할된 테이블에 대해 실행하는 쿼리는 계획 시간이 오래 걸리며 빠르게 완료되지 않습니다.

쿼리 런타임을 줄이려면 파티션 프로젝션을 사용하여 CloudTrail 테이블을 수동으로 생성하십시오.

예를 들어 아래의 CREATE TABLE 문은 한 AWS 리전의 지정된 기간 내에 CloudTrail 로그에서 파티션 프로젝션을 자동으로 사용합니다.

CREATE EXTERNAL TABLE cloudtrail_logs_pp(  
    eventversion STRING,  
    useridentity STRUCT<  
        type: STRING,  
        principalid: STRING,  
        arn: STRING,  
        accountid: STRING,  
        invokedby: STRING,  
        accesskeyid: STRING,  
        username: STRING,  
        onbehalfof: STRUCT<  
             userid: STRING,  
             identitystorearn: STRING>,  
        sessioncontext: STRUCT<  
            attributes: STRUCT<  
                mfaauthenticated: STRING,  
                creationdate: STRING>,  
            sessionissuer: STRUCT<  
                type: STRING,  
                principalid: STRING,  
                arn: STRING,  
                accountid: STRING,  
                username: STRING>,  
            ec2roledelivery:string,  
            webidfederationdata: STRUCT<  
                federatedprovider: STRING,  
                attributes: map<string,string>>  
        >  
    >,  
    eventtime STRING,  
    eventsource STRING,  
    eventname STRING,  
    awsregion STRING,  
    sourceipaddress STRING,  
    useragent STRING,  
    errorcode STRING,  
    errormessage STRING,  
    requestparameters STRING,  
    responseelements STRING,  
    additionaleventdata STRING,  
    requestid STRING,  
    eventid STRING,  
    readonly STRING,  
    resources ARRAY<STRUCT<  
        arn: STRING,  
        accountid: STRING,  
        type: STRING>>,  
    eventtype STRING,  
    apiversion STRING,  
    recipientaccountid STRING,  
    serviceeventdetails STRING,  
    sharedeventid STRING,  
    vpcendpointid STRING,  
    vpcendpointaccountid STRING,  
    eventcategory STRING,  
    addendum STRUCT<  
      reason:STRING,  
      updatedfields:STRING,  
      originalrequestid:STRING,  
      originaleventid:STRING>,  
    sessioncredentialfromconsole STRING,  
    edgedevicedetails STRING,  
    tlsdetails STRUCT<  
      tlsversion:STRING,  
      ciphersuite:STRING,  
      clientprovidedhostheader:STRING>  
  )  
PARTITIONED BY (  
   `timestamp` string)  
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'  
STORED AS INPUTFORMAT 'com.amazon.emr.cloudtrail.CloudTrailInputFormat'  
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'  
LOCATION  
  's3://example-bucket/AWSLogs/account-id/CloudTrail/aws-region'  
TBLPROPERTIES (  
  'projection.enabled'='true',   
  'projection.timestamp.format'='yyyy/MM/dd',   
  'projection.timestamp.interval'='1',   
  'projection.timestamp.interval.unit'='DAYS',   
  'projection.timestamp.range'='2020/01/01,NOW',   
  'projection.timestamp.type'='date',   
  'storage.location.template'='s3://example-bucket/AWSLogs/account-id/CloudTrail/aws-region/${timestamp}')

참고: LOCATION 및 TBLPROPERTIES 절에서 example-bucket을 버킷 이름으로, account-id를 계정 ID로, aws-region을 리전으로 바꾸십시오. projection.timestamp.range의 경우 2020/01/01을 시작 날짜로 바꾸십시오.

이전 쿼리를 실행하고 분할된 CloudTrail 로그 테이블을 생성하려면 다음 단계를 완료합니다.

  1. Athena 콘솔을 엽니다.
  2. 새 쿼리를 선택한 다음, 대화 상자를 선택하여 샘플 쿼리를 지웁니다.
  3. 이전 쿼리를 입력한 다음, 쿼리 실행을 선택합니다.

자세한 내용은 파티션 프로젝션을 사용하여 Anthena에서 CloudTrail 로그에 대한 테이블 생성을 참조하십시오.

CloudTrail 로그 테이블에서 AWS Support API 호출 검색

다음은 지정된 시간 범위 동안 CloudTrail 로그 테이블에서 AWS Support 호출을 검색하는 데 사용할 수 있는 예제 쿼리입니다. 이 예에서는 지정된 시간 범위로 2025/01/01부터 2025/01/07까지 사용합니다.

참고: 다음 예제 쿼리에서 default는 cloudtrail_logs_pp 테이블을 생성한 데이터베이스의 이름으로 바꾸십시오.

AWS Support API 호출 수 계산

다음 쿼리는 AWS Support가 계정에 대해 수행한 총 API 호출 수를 계산합니다.

SELECT COUNT(*)  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND sourceipaddress = 'support.amazonaws.com'

모든 AWS Support API 호출 가져오기

다음 쿼리는 AWS Support가 계정에 대해 수행한 모든 API 호출을 보여줍니다.

SELECT *  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND sourceipaddress = 'support.amazonaws.com'  
 LIMIT 10

사용자 이름 및 이벤트 소스별로 AWS Support API 호출 수 계산

다음 쿼리는 AWS Support가 계정에 대해 수행한 각 사용자 이름 및 이벤트 소스의 총 API 호출 수를 보여줍니다.

SELECT useridentity.sessioncontext.sessionissuer.username,  
       eventsource,  
       COUNT(*) AS number_of_event  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND sourceipaddress = 'support.amazonaws.com'  
 GROUP BY useridentity.sessioncontext.sessionissuer.username,  
       eventsource  
 ORDER BY number_of_event DESC

AWS Support에서 계정에 대해 수행한 API 호출의 ARN 가져오기

다음 쿼리는 AWS Support가 계정에 대해 수행한 모든 API 호출의 ARN을 보여줍니다.

SELECT useridentity.arn  
  FROM "default"."cloudtrail_logs_pp"  
 WHERE timestamp <= '2025/01/07'  
       AND timestamp > '2025/01/01'  
       AND regexp_like(useridentity.arn, 'AWSServiceRoleForSupport')  
 LIMIT 10

AWS Support에서 계정에 대해 수행한 API 호출의 보안 주체 ID 가져오기

다음 쿼리는 AWS Support가 계정에 대해 수행한 모든 API 호출의 보안 주체 ID를 보여줍니다.

SELECT useridentity.principalid  
  FROM "default"."cloudtrail_logs_pp"  
WHERE timestamp <= '2025/01/07'  
      AND timestamp > '2025/01/01'  
      AND regexp_like(useridentity.arn, 'AWSServiceRoleForSupport')  
LIMIT 10

관련 정보

IAM 자격 증명 권한 추가 및 제거

Athena의 자격 증명 및 액세스 관리

파티션 프로젝션을 사용하여 Athena 쿼리용 CloudTrail 테이블을 생성하려면 어떻게 해야 합니까?

AWS 공식업데이트됨 2년 전