AWS CloudTrail을 사용해 Amazon EC2 API 호출 기록

AWS CloudTrail을 사용해 Amazon EC2 API 호출 기록

Amazon EC2 API는 사용자, 역할, 또는 AWS 서비스가 수행한 작업의 기록을 제공하는 서비스인 AWS CloudTrail과 통합됩니다. CloudTrail은 모든 Amazon EC2 API 호출을 이벤트로 캡처해요. 캡처되는 호출에는 콘솔에서 이루어진 호출도 포함됩니다. CloudTrail이 수집한 정보로 Amazon EC2 API에 가해진 요청, 요청이 이루어진 IP 주소, 요청 시점을 확인할 수 있어요.

출처: 문서

본문

모든 이벤트 또는 로그 항목에는 요청을 생성한 주체에 대한 정보가 포함됩니다. 이 신원 정보는 다음을 판단하는 데 도움이 돼요.

  • 요청이 루트 사용자 또는 사용자 자격 증명으로 이루어졌는지
  • 요청이 IAM Identity Center 사용자를 대신해 이루어졌는지
  • 역할 또는 페더레이션 사용자의 임시 보안 자격 증명으로 이루어졌는지
  • 요청이 다른 AWS 서비스에 의해 이루어졌는지

CloudTrail은 계정을 만들 때 AWS 계정에서 활성화되며, CloudTrail Event history에 자동으로 접근할 수 있습니다. Event history는 한 AWS 리전에서 지난 90일 동안 기록된 관리 이벤트를 볼 수 있고 검색·다운로드·변경 불가능한 기록을 제공합니다. Event history 보기에는 CloudTrail 요금이 없어요.

90일이 지난 AWS 계정 이벤트의 지속적 기록을 원한다면 **트레일(trail)**이나 CloudTrail Lake 이벤트 데이터 스토어를 만드세요.

CloudTrail 트레일 — 트레일은 CloudTrail이 로그 파일을 Amazon S3 버킷에 전달할 수 있게 합니다. AWS Management Console로 만든 모든 트레일은 다중 리전입니다. AWS CLI로 단일 리전 또는 다중 리전 트레일을 만들 수 있어요. 계정의 모든 AWS 리전에서 활동을 캡처하므로 다중 리전 트레일 생성을 권장합니다. 단일 리전 트레일을 만들면 그 트레일의 AWS 리전에 기록된 이벤트만 볼 수 있어요. 트레일을 만들어 지속적 관리 이벤트 사본 하나를 Amazon S3 버킷에 무료로 전달할 수 있지만, Amazon S3 스토리지 요금은 발생합니다.

CloudTrail Lake 이벤트 데이터 스토어 — CloudTrail Lake는 이벤트에 대해 SQL 기반 쿼리를 실행할 수 있게 해줘요. CloudTrail Lake는 기존 이벤트를 행 기반 JSON 형식에서 Apache ORC 형식으로 변환합니다. ORC는 빠른 데이터 검색에 최적화된 컬럼형 스토리지 형식입니다. 이벤트는 고급 이벤트 선택기(advanced event selectors)를 적용해 선택한 기준에 기반한 변경 불가능한 이벤트 모음인 이벤트 데이터 스토어로 집계됩니다. 이벤트 데이터 스토어와 쿼리에는 비용이 발생합니다.

CloudTrail의 Amazon EC2 API 관리 이벤트

관리 이벤트는 AWS 계정의 리소스에 수행된 관리 작업에 대한 정보를 제공하며, 컨트롤 플레인 작업이라고도 합니다. CloudTrail은 기본적으로 관리 이벤트를 기록합니다.

모든 Amazon EC2 API 작업은 관리 이벤트로 기록됩니다. CloudTrail에 기록되는 API 작업 목록은 Amazon EC2 API Reference를 참고하세요. 예를 들어 RunInstances, DescribeInstances, StopInstances 작업 호출은 관리 이벤트로 기록됩니다.

Amazon EC2 API 이벤트 예제

이벤트는 모든 소스의 단일 요청을 나타내며, 요청된 API 작업, 작업의 날짜·시간, 요청 파라미터 등의 정보를 포함합니다. CloudTrail 로그 파일은 공개 API 호출의 순서 있는 스택 추적이 아니므로 이벤트는 특정 순서로 나타나지 않습니다.

다음 로그 파일 레코드는 사용자가 인스턴스를 종료했음을 보여줍니다.

{
   "Records":[
      {
         "eventVersion":"1.03",
         "userIdentity":{
            "type":"Root",
            "principalId":"123456789012",
            "arn":"arn:aws:iam::123456789012:root",
            "accountId":"123456789012",
            "accessKeyId":"«redacted:AKIA…»",
            "userName":"user"
         },
         "eventTime":"2016-05-20T08:27:45Z",
         "eventSource":"ec2.amazonaws.com",
         "eventName":"TerminateInstances",
         "awsRegion":"us-west-2",
         "sourceIPAddress":"198.51.100.1",
         "userAgent":"aws-cli/1.10.10 Python/2.7.9 Windows/7botocore/1.4.1",
         "requestParameters":{
            "instancesSet":{
               "items":[{
                  "instanceId":"i-1a2b3c4d"
               }]
            }
         },
         "responseElements":{
            "instancesSet":{
               "items":[{
                  "instanceId":"i-1a2b3c4d",
                  "currentState":{
                     "code":32,
                     "name":"shutting-down"
                  },
                  "previousState":{
                     "code":16,
                     "name":"running"
                  }
               }]
            }
         },
         "requestID":"be112233-1ba5-4ae0-8e2b-1c302EXAMPLE",
         "eventID":"6e12345-2a4e-417c-aa78-7594fEXAMPLE",
         "eventType":"AwsApiCall",
         "recipientAccountId":"123456789012"
     }
   ]
}

CloudTrail 레코드 내용에 대한 자세한 내용은 AWS CloudTrail 사용 설명서의 "CloudTrail record contents"를 참고하세요.

EC2 Instance Connect를 사용한 연결 감사

AWS CloudTrail로 EC2 Instance Connect를 사용해 인스턴스에 연결하는 사용자를 감사할 수 있어요.

AWS CloudTrail 콘솔로 EC2 Instance Connect를 통한 SSH 활동 감사

  1. CloudTrail 콘솔(https://console.aws.amazon.com/cloudtrail/)을 엽니다.
  2. 올바른 리전에 있는지 확인합니다.
  3. 탐색 창에서 Event history를 선택합니다.
  4. Filter에서 Event source를 선택하고 ec2-instance-connect.amazonaws.com을 선택합니다.
  5. (선택) Time range에서 시간 범위를 선택합니다.
  6. Refresh events 아이콘을 선택합니다.
  7. 페이지에 SendSSHPublicKey API 호출에 해당하는 이벤트가 표시됩니다. 추가 세부 정보(SSH 연결에 사용된 사용자 이름과 AWS 액세스 키, 소스 IP 주소 등)를 보려면 화살표로 이벤트를 확장합니다.
  8. 전체 이벤트 정보를 JSON 형식으로 표시하려면 View event를 선택합니다. requestParameters 필드에 SSH 연결에 사용된 대상 인스턴스 ID, OS 사용자 이름, 공개 키가 포함됩니다.
{
    "eventVersion": "1.05",
    "userIdentity": {
        "type": "IAMUser",
        "principalId": "ABCDEFGONGNOMOOCB6XYTQEXAMPLE",
        "arn": "arn:aws:iam::1234567890120:user/IAM-friendly-name",
        "accountId": "123456789012",
        "accessKeyId": "ABCDEFGUKZHNAW4OSN2AEXAMPLE",
        "userName": "IAM-friendly-name",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2018-09-21T21:37:58Z"}
        }
    },
    "eventTime": "2018-09-21T21:38:00Z",
    "eventSource": "ec2-instance-connect.amazonaws.com",
    "eventName": "SendSSHPublicKey ",
    "awsRegion": "us-west-2",
    "sourceIPAddress": "123.456.789.012",
    "userAgent": "aws-cli/1.15.61 Python/2.7.10 Darwin/16.7.0 botocore/1.10.60",
    "requestParameters": {
        "instanceId": "i-0123456789EXAMPLE",
        "osUser": "ec2-user",
        "SSHKey": {
            "publicKey": "ssh-rsa ABCDEFGHIJKLMNO01234567890EXAMPLE"
        }
     },
    "responseElements": null,
    "requestID": "1a2s3d4f-bde6-11e8-a892-f7ec64543add",
    "eventID": "1a2w3d4r5-a88f-4e28-b3bf-30161f75be34",
    "eventType": "AwsApiCall",
    "recipientAccountId": "0987654321"
}

AWS 계정이 S3 버킷에 CloudTrail 이벤트를 수집하도록 구성했다면, 정보를 프로그래밍 방식으로 다운로드·감사할 수 있어요. 자세한 내용은 AWS CloudTrail 사용 설명서의 "CloudTrail 로그 파일 가져오기 및 보기"를 참고하세요.

더 알아보기 (Learn more)