AWS CloudTrail로 Amazon ECS API 호출 로깅

AWS CloudTrail로 Amazon ECS API 호출 로깅

Amazon Elastic Container Service는 사용자, 역할, 또는 AWS 서비스가 수행한 작업의 기록을 제공하는 서비스인 AWS CloudTrail과 통합돼요. CloudTrail은 Amazon ECS에 대한 모든 API 호출을 이벤트로 캡처합니다. 캡처되는 호출에는 Amazon ECS 콘솔의 호출과 Amazon ECS API 작업에 대한 코드 호출이 포함돼요.

출처: 문서

본문

CloudTrail이 수집한 정보를 사용해 Amazon ECS에 대한 요청, 요청이 이루어진 IP 주소, 요청 시점, 기타 세부 정보를 확인할 수 있어요. 모든 이벤트 또는 로그 항목에는 요청을 생성한 사람에 대한 정보가 포함됩니다. 이 신원 정보는 다음을 파악하는 데 도움이 됩니다.

  • 요청이 루트 사용자 또는 사용자 자격 증명으로 이루어졌는지 여부
  • 요청이 IAM Identity Center 사용자를 대신해 이루어졌는지 여부
  • 요청이 역할 또는 연합 사용자(federated user)의 임시 보안 자격 증명으로 이루어졌는지 여부
  • 요청이 다른 AWS 서비스에 의해 이루어졌는지 여부

CloudTrail은 계정을 만들 때 활성화되며, AWS 계정에서 CloudTrail Event history에 자동으로 액세스할 수 있어요. CloudTrail Event history는 AWS 리전에서 지난 90일 동안 기록된 관리 이벤트의 보고, 검색, 다운로드, 변경 불가능한 기록을 제공합니다. 자세한 내용은 AWS CloudTrail 사용자 가이드의 CloudTrail Event history 작업(Working with CloudTrail Event history)을 참고하세요. Event history를 보는 데는 CloudTrail 요금이 부과되지 않아요.

지난 90일 이후의 AWS 계정 이벤트에 대한 지속적인 기록을 보려면 trail 또는 CloudTrail Lake 이벤트 데이터 저장소(event data store)를 만드세요.

CloudTrail trail

trail을 사용하면 CloudTrail이 로그 파일을 Amazon S3 버킷에 전달할 수 있어요. AWS Management Console을 사용해 만든 모든 trail은 멀티 리전입니다. AWS CLI를 사용해 단일 리전 또는 멀티 리전 trail을 만들 수 있어요. 계정의 모든 AWS 리전에서 활동을 캡처하므로 멀티 리전 trail을 만드는 것이 좋습니다. 단일 리전 trail을 만들면 trail의 AWS 리전에 기록된 이벤트만 볼 수 있어요. trail에 대한 자세한 내용은 AWS CloudTrail 사용자 가이드의 AWS 계정용 trail 만들기와 조직용 trail 만들기를 참고하세요.

trail을 만들어 지속적인 관리 이벤트의 사본 하나를 Amazon S3 버킷에 무료로 전달할 수 있지만, Amazon S3 스토리지 요금은 발생합니다. CloudTrail 요금은 AWS CloudTrail 요금(Pricing)을, Amazon S3 요금은 Amazon S3 요금(Pricing)을 참고하세요.

CloudTrail Lake 이벤트 데이터 저장소

CloudTrail Lake를 사용하면 이벤트에 대해 SQL 기반 쿼리를 실행할 수 있어요. CloudTrail Lake는 기존 이벤트를 행 기반 JSON 형식에서 Apache ORC 형식으로 변환합니다. ORC는 빠른 데이터 검색에 최적화된 칼럼형 스토리지 형식이에요. 이벤트는 이벤트 데이터 저장소(event data stores)로 집계되는데, 이는 고급 이벤트 셀렉터(advanced event selectors)를 적용해 선택한 기준에 기반한 변경 불가능한 이벤트 컬렉션입니다. 이벤트 데이터 저장소에 적용하는 셀렉터는 어떤 이벤트가 유지되고 쿼리할 수 있는지 제어해요. CloudTrail Lake에 대한 자세한 내용은 AWS CloudTrail 사용자 가이드의 AWS CloudTrail Lake 작업(Working with AWS CloudTrail Lake)을 참고하세요.

CloudTrail Lake 이벤트 데이터 저장소와 쿼리는 비용이 발생해요. 이벤트 데이터 저장소를 만들 때 사용할 요금 옵션을 선택합니다. 요금 옵션은 이벤트 수집·저장 비용과 이벤트 데이터 저장소의 기본·최대 보존 기간을 결정해요.

CloudTrail의 Amazon ECS 관리 이벤트

관리 이벤트(management events)는 AWS 계정의 리소스에 대해 수행되는 관리 작업에 대한 정보를 제공해요. 이를 컨트롤 플레인 작업(control plane operations)이라고도 합니다. 기본적으로 CloudTrail은 관리 이벤트를 기록해요.

Amazon Elastic Container Service는 모든 Amazon ECS 컨트롤 플레인 작업을 관리 이벤트로 기록합니다. 예를 들어 CreateService, RunTask, DeleteCluster 작업에 대한 호출이 CloudTrail 로그 파일에 항목을 생성해요. Amazon ECS가 CloudTrail에 기록하는 Amazon Elastic Container Service 컨트롤 플레인 작업 목록은 Amazon Elastic Container Service API Reference를 참고하세요.

CloudTrail의 Amazon ECS 데이터 이벤트

데이터 이벤트(data events)는 리소스에서 또는 리소스에 대해 수행된 리소스 작업에 대한 정보를 제공해요. 기본적으로 CloudTrail은 데이터 이벤트를 기록하지 않습니다. CloudTrail Event history는 데이터 이벤트를 기록하지 않아요. 데이터 이벤트에는 추가 요금이 적용됩니다.

CloudTrail 콘솔, AWS CLI 또는 CloudTrail API 작업을 사용해 Amazon ECS 리소스 유형에 대한 데이터 이벤트를 기록할 수 있어요. 데이터 이벤트 기록 방법은 AWS CloudTrail 사용자 가이드의 AWS Management Console로 데이터 이벤트 로깅과 AWS Command Line Interface로 데이터 이벤트 로깅을 참고하세요.

다음 표는 데이터 이벤트를 기록할 수 있는 Amazon ECS 리소스 유형을 나열해요. Data event type (console) 열은 CloudTrail 콘솔의 Data event type 목록에서 선택할 값을 보여주고, resources.type value 열은 AWS CLI 또는 CloudTrail API로 고급 이벤트 셀렉터를 구성할 때 지정할 resources.type 값을 보여줘요. Data APIs logged to CloudTrail 열은 리소스 유형에 대해 CloudTrail에 기록되는 API 호출을 보여줍니다.

Data event type (console) resources.type value Data APIs logged to CloudTrail
AwsApiCall AWS::ECS::ContainerInstance ecs:Poll (EC2 및 Amazon ECS Managed Instances용), ecs:StartTelemetrySession (EC2 및 Amazon ECS Managed Instances용), ecs:PutSystemLogEvents (Amazon ECS Managed Instances용)

eventName, readOnly, resources.ARN 필드로 필터링하도록 고급 이벤트 셀렉터를 구성해 중요한 이벤트만 기록할 수 있어요. 이 필드에 대한 자세한 내용은 AWS CloudTrail API Reference의 AdvancedFieldSelector를 참고하세요.

Amazon ECS 이벤트 예시

이벤트는 어떤 소스에서 온 단일 요청을 나타내며, 요청된 API 작업, 작업의 날짜·시간, 요청 파라미터 등에 대한 정보를 포함해요. CloudTrail 로그 파일은 공개 API 호출의 정렬된 스택 트레이스가 아니므로 이벤트는 특정 순서로 나타나지 않습니다.

다음 예시는 CreateService 작업을 보여주는 CloudTrail 이벤트입니다.

참고: 이 예시는 가독성을 위해 형식화됐어요. 실제 CloudTrail 로그 파일에서는 모든 항목과 이벤트가 한 줄로 연결됩니다. 또한 이 예시는 단일 Amazon ECS 항목으로 제한되어 있어요. 실제 CloudTrail 로그 파일에서는 여러 AWS 서비스의 항목과 이벤트를 볼 수 있습니다.

{
    "eventVersion": "1.04",
    "userIdentity": {
        "type": "AssumedRole",
        "principalId": "AIDACKCEVSQ6C2EXAMPLE:account_name",
        "arn": "arn:aws:sts::123456789012:user/Mary_Major",
        "accountId": "123456789012",
        "accessKeyId": "AKIAIO...MPLE",
        "sessionContext": {
            "attributes": {
                "mfaAuthenticated": "false",
                "creationDate": "2018-06-20T18:32:25Z"
            },
            "sessionIssuer": {
                "type": "Role",
                "principalId": "AIDACKCEVSQ6C2EXAMPLE",
                "arn": "arn:aws:iam::123456789012:role/Admin",
                "accountId": "123456789012",
                "userName": "Mary_Major"
            }
        }
    },
    "eventTime": "2018-06-20T19:04:36Z",
    "eventSource": "ecs.amazonaws.com",
    "eventName": "CreateCluster",
    "awsRegion": "us-east-1",
    "sourceIPAddress": "203.0.113.12",
    "userAgent": "console.amazonaws.com",
    "requestParameters": {
        "clusterName": "default"
    },
    "responseElements": {
        "cluster": {
            "clusterArn": "arn:aws:ecs:us-east-1:123456789012:cluster/default",
            "pendingTasksCount": 0,
            "registeredContainerInstancesCount": 0,
            "status": "ACTIVE",
            "runningTasksCount": 0,
            "statistics": [],
            "clusterName": "default",
            "activeServicesCount": 0
        }
    },
    "requestID": "cb8c167e-EXAMPLE",
    "eventID": "e3c6f4ce-EXAMPLE",
    "eventType": "AwsApiCall",
    "recipientAccountId": "123456789012"
}

CloudTrail 레코드 내용에 대한 자세한 내용은 AWS CloudTrail 사용자 가이드의 CloudTrail 레코드 내용(CloudTrail record contents)을 참고하세요.