CloudTrail 사용 예제 AWS CLI - AWS Command Line Interface

이 설명서는 의 버전 1 AWS CLI 전용입니다. 의 버전 2와 관련된 설명서는 버전 2 사용 설명서 를 AWS CLI참조하세요.

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

CloudTrail 사용 예제 AWS CLI

다음 코드 예제에서는 AWS Command Line Interface 와 함께 를 사용하여 작업을 수행하고 일반적인 시나리오를 구현하는 방법을 보여줍니다 CloudTrail.

작업은 대규모 프로그램에서 발췌한 코드이며 컨텍스트에 맞춰 실행해야 합니다. 작업은 개별 서비스 함수를 직접적으로 호출하는 방법을 보여주며 관련 시나리오의 컨텍스트에 맞는 작업을 볼 수 있습니다.

각 예제에는 컨텍스트에서 코드를 설정하고 실행하는 방법에 대한 지침을 찾을 수 있는 전체 소스 코드에 대한 링크가 포함되어 있습니다.

주제

작업

다음 코드 예시에서는 add-tags을 사용하는 방법을 보여 줍니다.

AWS CLI

추적에 태그를 추가하려면

다음 add-tags 명령은 에 대한 태그를 추가합니다Trail1.

aws cloudtrail add-tags --resource-id arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1 --tags-list Key=name,Value=Alice Key=location,Value=us
  • 자세한 API 내용은 명령 참조AddTags의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 create-subscription을 사용하는 방법을 보여 줍니다.

AWS CLI

추적에 대한 AWS 리소스를 생성하고 구성하려면

다음 create-subscription 명령은 에 대한 새 S3 버킷 및 SNS 주제를 생성합니다Trail1.

aws cloudtrail create-subscription --name Trail1 --s3-new-bucket my-bucket --sns-new-topic my-topic

출력:

Setting up new S3 bucket my-bucket... Setting up new SNS topic my-topic... Creating/updating CloudTrail configuration... CloudTrail configuration: { "trailList": [ { "IncludeGlobalServiceEvents": true, "Name": "Trail1", "TrailARN": "arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "S3BucketName": "my-bucket", "SnsTopicName": "my-topic", "HomeRegion": "us-east-1" } ], "ResponseMetadata": { "HTTPStatusCode": 200, "RequestId": "f39e51f6-c615-11e5-85bd-d35ca21ee3e2" } } Starting CloudTrail service... Logs will be delivered to my-bucket
  • 자세한 API 내용은 명령 참조CreateSubscription의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 create-trail을 사용하는 방법을 보여 줍니다.

AWS CLI

추적을 생성하려면

다음 create-trail 명령은 라는 다중 리전 추적을 생성하고 S3 버킷을 Trail1 지정합니다.

aws cloudtrail create-trail --name Trail1 --s3-bucket-name my-bucket --is-multi-region-trail

출력:

{ "IncludeGlobalServiceEvents": true, "Name": "Trail1", "TrailARN": "arn:aws:cloudtrail:us-west-2:123456789012:trail/Trail1", "LogFileValidationEnabled": false, "IsMultiRegionTrail": true, "S3BucketName": "my-bucket" }
  • 자세한 API 내용은 명령 참조CreateTrail의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 delete-trail을 사용하는 방법을 보여 줍니다.

AWS CLI

추적을 삭제하려면

다음 delete-trail 명령은 라는 추적을 삭제합니다Trail1.

aws cloudtrail delete-trail --name Trail1
  • 자세한 API 내용은 명령 참조DeleteTrail의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 describe-trails을 사용하는 방법을 보여 줍니다.

AWS CLI

추적을 설명하려면

다음 describe-trails 명령은 Trail1 및 에 대한 설정을 반환합니다Trail2.

aws cloudtrail describe-trails --trail-name-list Trail1 Trail2

출력:

{ "trailList": [ { "IncludeGlobalServiceEvents": true, "Name": "Trail1", "TrailARN": "arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "S3BucketName": "my-bucket", "CloudWatchLogsRoleArn": "arn:aws:iam::123456789012:role/CloudTrail_CloudWatchLogs_Role", "CloudWatchLogsLogGroupArn": "arn:aws:logs:us-east-1:123456789012:log-group:CloudTrail:*", "SnsTopicName": "my-topic", "HomeRegion": "us-east-1" }, { "IncludeGlobalServiceEvents": true, "Name": "Trail2", "S3KeyPrefix": "my-prefix", "TrailARN": "arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail2", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "S3BucketName": "my-bucket", "KmsKeyId": "arn:aws:kms:us-east-1:123456789012:key/4c5ae5ac-3c13-421e-8335-c7868ef6a769", "HomeRegion": "us-east-1" } ] }
  • 자세한 API 내용은 명령 참조DescribeTrails의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 get-event-selectors을 사용하는 방법을 보여 줍니다.

AWS CLI

추적에 대한 이벤트 선택기 설정을 보려면

다음 get-event-selectors 명령은 에 대한 설정을 반환합니다Trail1.

aws cloudtrail get-event-selectors --trail-name Trail1

출력:

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1" }
  • 자세한 API 내용은 명령 참조GetEventSelectors의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 get-trail-status을 사용하는 방법을 보여 줍니다.

AWS CLI

추적 상태를 가져오려면

다음 get-trail-status 명령은 에 대한 전송 및 로깅 세부 정보를 반환합니다Trail1.

aws cloudtrail get-trail-status --name Trail1

출력:

{ "LatestNotificationTime": 1454022144.869, "LatestNotificationAttemptSucceeded": "2016-01-28T23:02:24Z", "LatestDeliveryAttemptTime": "2016-01-28T23:02:24Z", "LatestDeliveryTime": 1454022144.869, "TimeLoggingStarted": "2015-11-06T18:36:38Z", "LatestDeliveryAttemptSucceeded": "2016-01-28T23:02:24Z", "IsLogging": true, "LatestCloudWatchLogsDeliveryTime": 1454022144.918, "StartLoggingTime": 1446834998.695, "StopLoggingTime": 1446834996.933, "LatestNotificationAttemptTime": "2016-01-28T23:02:24Z", "TimeLoggingStopped": "2015-11-06T18:36:36Z" }
  • 자세한 API 내용은 명령 참조GetTrailStatus의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 list-public-keys을 사용하는 방법을 보여 줍니다.

AWS CLI

추적의 모든 퍼블릭 키를 나열하려면

다음 list-public-keys 명령은 지정된 시간 범위 내에서 다이제스트 파일에 서명하는 데 프라이빗 키가 사용된 모든 퍼블릭 키를 반환합니다.

aws cloudtrail list-public-keys --start-time 2016-01-01T20:30:00.000Z

출력:

{ "PublicKeyList": [ { "ValidityStartTime": 1453076702.0, "ValidityEndTime": 1455668702.0, "Value": "MIIBCgKCAQEAlSS3cl92HDycr/MTj0moOhas8habjrraXw+KzlWF0axSI2tcF+3iJ9BKQAVSKxGwxwu3m0wG3J+kUl1xboEcEPHYoIYMbgfSw7KGnuDKwkLzsQWhUJ0cIbOHASox1vv/5fNXkrHhGbDCHeVXm804c83nvHUEFYThr1PfyP/8HwrCtR3FX5OANtQCP61C1nJtSSkC8JSQUOrIP4CuwJjc+4WGDk+BGH5m9iuiAKkipEHWmUl8/P7XpfpWQuk4h8g3pXZOrNXr08lbh4d39svj7UqdhvOXoBISp9t/EXYuePGEtBdrKD9Dz+VHwyUPtBQvYr9BnkF88qBnaPNhS44rzwIDAQAB", "Fingerprint": "7f3f401420072e50a65a141430817ab3" } ] }
  • 자세한 API 내용은 명령 참조ListPublicKeys의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 list-tags을 사용하는 방법을 보여 줍니다.

AWS CLI

추적의 태그를 나열하려면

다음 list-tags 명령은 Trail1 및 에 대한 태그를 나열합니다Trail2.

aws cloudtrail list-tags --resource-id-list arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1 arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail2

출력:

{ "ResourceTagList": [ { "ResourceId": "arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1", "TagsList": [ { "Value": "Alice", "Key": "name" }, { "Value": "us", "Key": "location" } ] }, { "ResourceId": "arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail2", "TagsList": [ { "Value": "Bob", "Key": "name" } ] } ] }
  • 자세한 API 내용은 명령 참조ListTags의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 lookup-events을 사용하는 방법을 보여 줍니다.

AWS CLI

추적에 대한 이벤트를 조회하려면

다음 lookup-events 명령은 속성 별로 API 활동 이벤트를 검색합니다EventName.

aws cloudtrail lookup-events --lookup-attributes AttributeKey=EventName,AttributeValue=ConsoleLogin

출력:

{ "Events": [ { "EventId": "654ccbc0-ba0d-486a-9076-dbf7274677a7", "Username": "my-session-name", "EventTime": "2021-11-18T09:41:02-08:00", "CloudTrailEvent": "{\"eventVersion\":\"1.02\",\"userIdentity\":{\"type\":\"AssumedRole\",\"principalId\":\"AROAJIKPFTA72SWU4L7T4:my-session-name\",\"arn\":\"arn:aws:sts::123456789012:assumed-role/my-role/my-session-name\",\"accountId\":\"123456789012\",\"sessionContext\":{\"attributes\":{\"mfaAuthenticated\":\"false\",\"creationDate\":\"2016-01-26T21:42:12Z\"},\"sessionIssuer\":{\"type\":\"Role\",\"principalId\":\"AROAJIKPFTA72SWU4L7T4\",\"arn\":\"arn:aws:iam::123456789012:role/my-role\",\"accountId\":\"123456789012\",\"userName\":\"my-role\"}}},\"eventTime\":\"2016-01-26T21:42:12Z\",\"eventSource\":\"signin.amazonaws.com\",\"eventName\":\"ConsoleLogin\",\"awsRegion\":\"us-east-1\",\"sourceIPAddress\":\"72.21.198.70\",\"userAgent\":\"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.111 Safari/537.36\",\"requestParameters\":null,\"responseElements\":{\"ConsoleLogin\":\"Success\"},\"additionalEventData\":{\"MobileVersion\":\"No\",\"MFAUsed\":\"No\"},\"eventID\":\"654ccbc0-ba0d-486a-9076-dbf7274677a7\",\"eventType\":\"AwsConsoleSignIn\",\"recipientAccountId\":\"123456789012\"}", "EventName": "ConsoleLogin", "Resources": [] } ] }
  • 자세한 API 내용은 명령 참조LookupEvents의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 put-event-selectors을 사용하는 방법을 보여 줍니다.

AWS CLI

예제 1: 고급 이벤트 선택기를 사용하여 관리 이벤트 및 데이터 이벤트를 로깅하도록 추적 구성

추적의 모든 조건 및 선택기에 대해 최대 500개의 값까지 고급 이벤트 선택기와 고급 이벤트 선택기의 조건을 추가할 수 있습니다. 고급 이벤트 선택기를 사용하여 사용 가능한 모든 데이터 이벤트 유형을 기록할 수 있습니다. 고급 이벤트 선택기 또는 기본 이벤트 선택기 중 하나를 사용할 수 있습니다. 추적에 고급 이벤트 선택기를 적용하면 기존의 기본 이벤트 선택기를 모두 덮어씁니다.

다음 예제에서는 모든 관리 이벤트를 로깅myTrail하고, S3 PutObject 버킷 하나를 제외한 모든 S3 및 호출을 로그하고 DeleteObject API, 라는 Lambda 함수에 대한 데이터 API 호출을 로그하고myFunction, 라는 SNS 주제에 대한 API 호출을 로그 게시하기 위해 라는 추적에 대한 고급 이벤트 선택기를 생성합니다myTopic.

aws cloudtrail put-event-selectors \ --trail-name myTrail \ --advanced-event-selectors '[{"Name": "Log all management events", "FieldSelectors": [{ "Field": "eventCategory", "Equals": ["Management"] }] },{"Name": "Log PutObject and DeleteObject events for all but one bucket","FieldSelectors": [{ "Field": "eventCategory", "Equals": ["Data"] },{ "Field": "resources.type", "Equals": ["AWS::S3::Object"] },{ "Field": "eventName", "Equals": ["PutObject","DeleteObject"] },{ "Field": "resources.ARN", "NotStartsWith": ["arn:aws:s3:::sample_bucket_name/"] }]},{"Name": "Log data events for a specific Lambda function","FieldSelectors": [{ "Field": "eventCategory", "Equals": ["Data"] },{ "Field": "resources.type", "Equals": ["AWS::Lambda::Function"] },{ "Field": "resources.ARN", "Equals": ["arn:aws:lambda:us-east-1:123456789012:function:myFunction"] }]},{"Name": "Log all Publish API calls on a specific SNS topic","FieldSelectors": [{ "Field": "eventCategory", "Equals": ["Data"] },{ "Field": "resources.type", "Equals": ["AWS::SNS::Topic"] },{ "Field": "eventName", "Equals": ["Publish"] },{ "Field": "resources.ARN", "Equals": ["arn:aws:sns:us-east-1:123456789012:myTopic.fifo"] }]}]'

출력:

{ "TrailARN": "arn:aws:cloudtrail:us-east-1:123456789012:trail/myTrail", "AdvancedEventSelectors": [ { "Name": "Log all management events", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Management" ] } ] }, { "Name": "Log PutObject and DeleteObject events for all but one bucket", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::S3::Object" ] }, { "Field": "eventName", "Equals": [ "PutObject", "DeleteObject" ] }, { "Field": "resources.ARN", "NotStartsWith": [ "arn:aws:s3:::sample_bucket_name/" ] } ] }, { "Name": "Log data events for a specific Lambda function", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::Lambda::Function" ] }, { "Field": "resources.ARN", "Equals": [ "arn:aws:lambda:us-east-1:123456789012:function:myFunction" ] } ] }, { "Name": "Log all Publish API calls on a specific SNS topic", "FieldSelectors": [ { "Field": "eventCategory", "Equals": [ "Data" ] }, { "Field": "resources.type", "Equals": [ "AWS::SNS::Topic" ] }, { "Field": "eventName", "Equals": [ "Publish" ] }, { "Field": "resources.ARN", "Equals": [ "arn:aws:sns:us-east-1:123456789012:myTopic.fifo" ] } ] } ] }

자세한 내용은 AWS CloudTrail 사용 설명서고급 이벤트 선택기를 사용하여 이벤트 로깅을 참조하세요.

예제 2: 추적에 대한 이벤트 선택기를 구성하여 모든 관리 이벤트 및 데이터 이벤트를 로깅합니다.

최대 5개의 이벤트 선택기와 최대 250개의 데이터 리소스를 추적 대상으로 구성할 수 있습니다. 이벤트 선택기는 기본 이벤트 선택기라고도 합니다. 이벤트 선택기를 사용하여 S3 객체, Lambda 함수 및 DynnamoDB 테이블에 대한 관리 이벤트 및 데이터 이벤트를 로깅할 수 있습니다. 다른 리소스 유형에 대한 데이터 이벤트를 로깅하려면 고급 이벤트 선택기를 사용해야 합니다.

다음 예제에서는 모든 관리 이벤트, 두 Amazon S3 버킷/접두사 조합에 대한 데이터 이벤트, 라는 단일 AWS Lambda 함수에 대한 데이터 이벤트를 TrailName 포함하도록 라는 추적에 대한 이벤트 선택기를 생성합니다hello-world-python-function.

aws cloudtrail put-event-selectors \ --trail-name TrailName \ --event-selectors '[{"ReadWriteType": "All","IncludeManagementEvents": true,"DataResources": [{"Type":"AWS::S3::Object", "Values": ["arn:aws:s3:::mybucket/prefix","arn:aws:s3:::mybucket2/prefix2"]},{"Type": "AWS::Lambda::Function","Values": ["arn:aws:lambda:us-west-2:999999999999:function:hello-world-python-function"]}]}]'

출력:

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [ { "Values": [ "arn:aws:s3:::mybucket/prefix", "arn:aws:s3:::mybucket2/prefix2" ], "Type": "AWS::S3::Object" }, { "Values": [ "arn:aws:lambda:us-west-2:123456789012:function:hello-world-python-function" ], "Type": "AWS::Lambda::Function" }, ], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName" }

자세한 내용은 AWS CloudTrail 사용 설명서기본 이벤트 선택기를 사용하여 이벤트 로깅을 참조하세요.

예제 3: 추적에 대한 이벤트 선택기가 관리 이벤트, S3 객체의 모든 S3 데이터 이벤트 및 계정의 함수에 대한 모든 Lambda 데이터 이벤트를 로깅하도록 구성

다음 예제에서는 모든 관리 이벤트와 AWS 계정의 모든 Amazon S3 버킷 및 AWS Lambda 함수에 대한 모든 데이터 이벤트를 TrailName2 포함하는 라는 추적에 대한 이벤트 선택기를 생성합니다.

aws cloudtrail put-event-selectors \ --trail-name TrailName2 \ --event-selectors '[{"ReadWriteType": "All","IncludeManagementEvents": true,"DataResources": [{"Type":"AWS::S3::Object", "Values": ["arn:aws:s3"]},{"Type": "AWS::Lambda::Function","Values": ["arn:aws:lambda"]}]}]'

출력:

{ "EventSelectors": [ { "IncludeManagementEvents": true, "DataResources": [ { "Values": [ "arn:aws:s3" ], "Type": "AWS::S3::Object" }, { "Values": [ "arn:aws:lambda" ], "Type": "AWS::Lambda::Function" }, ], "ReadWriteType": "All" } ], "TrailARN": "arn:aws:cloudtrail:us-east-2:123456789012:trail/TrailName2" }

자세한 내용은 AWS CloudTrail 사용 설명서기본 이벤트 선택기를 사용하여 이벤트 로깅을 참조하세요.

  • 자세한 API 내용은 명령 참조PutEventSelectors의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 remove-tags을 사용하는 방법을 보여 줍니다.

AWS CLI

추적의 태그를 제거하려면

다음 remove-tags 명령은 에 대해 지정된 태그를 제거합니다Trail1.

aws cloudtrail remove-tags --resource-id arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1 --tags-list Key=name Key=location
  • 자세한 API 내용은 명령 참조RemoveTags의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 start-logging을 사용하는 방법을 보여 줍니다.

AWS CLI

추적에 대한 로깅을 시작하려면

다음 start-logging 명령은 에 대한 로깅을 활성화합니다Trail1.

aws cloudtrail start-logging --name Trail1
  • 자세한 API 내용은 명령 참조StartLogging의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 stop-logging을 사용하는 방법을 보여 줍니다.

AWS CLI

추적 로깅을 중지하려면

다음 stop-logging 명령은 에 대한 로깅을 끕니다Trail1.

aws cloudtrail stop-logging --name Trail1
  • 자세한 API 내용은 명령 참조StopLogging의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 update-subscription을 사용하는 방법을 보여 줍니다.

AWS CLI

추적에 대한 구성 설정을 업데이트하려면

다음 update-subscription 명령은 추적을 업데이트하여 새 S3 버킷 및 SNS 주제를 지정합니다.

aws cloudtrail update-subscription --name Trail1 --s3-new-bucket my-bucket-new --sns-new-topic my-topic-new

출력:

Setting up new S3 bucket my-bucket-new... Setting up new SNS topic my-topic-new... Creating/updating CloudTrail configuration... CloudTrail configuration: { "trailList": [ { "IncludeGlobalServiceEvents": true, "Name": "Trail1", "TrailARN": "arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1", "LogFileValidationEnabled": false, "IsMultiRegionTrail": false, "S3BucketName": "my-bucket-new", "SnsTopicName": "my-topic-new", "HomeRegion": "us-east-1" } ], "ResponseMetadata": { "HTTPStatusCode": 200, "RequestId": "31126f8a-c616-11e5-9cc6-2fd637936879" } }
  • 자세한 API 내용은 명령 참조UpdateSubscription의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 update-trail을 사용하는 방법을 보여 줍니다.

AWS CLI

추적을 업데이트하려면

다음 update-trail 명령은 로그 전송에 기존 버킷을 사용하도록 추적을 업데이트합니다.

aws cloudtrail update-trail --name Trail1 --s3-bucket-name my-bucket

출력:

{ "IncludeGlobalServiceEvents": true, "Name": "Trail1", "TrailARN": "arn:aws:cloudtrail:us-west-2:123456789012:trail/Trail1", "LogFileValidationEnabled": false, "IsMultiRegionTrail": true, "S3BucketName": "my-bucket" }
  • 자세한 API 내용은 명령 참조UpdateTrail의 섹션을 참조하세요. AWS CLI

다음 코드 예시에서는 validate-logs을 사용하는 방법을 보여 줍니다.

AWS CLI

로그 파일을 검증하려면

다음 validate-logs 명령은 에 대한 로그를 검증합니다Trail1.

aws cloudtrail validate-logs --trail-arn arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1 --start-time 20160129T19:00:00Z

출력:

Validating log files for trail arn:aws:cloudtrail:us-east-1:123456789012:trail/Trail1 between 2016-01-29T19:00:00Z and 2016-01-29T22:15:43Z Results requested for 2016-01-29T19:00:00Z to 2016-01-29T22:15:43Z Results found for 2016-01-29T19:24:57Z to 2016-01-29T21:24:57Z: 3/3 digest files valid 15/15 log files valid
  • 자세한 API 내용은 명령 참조ValidateLogs의 섹션을 참조하세요. AWS CLI