Amazon Web Services 한국 블로그

AWS CloudTrail 기반 Amazon S3 Express One Zone 데이터 이벤트 모니터링

AWS re:Invent 2023에 대한 뉴스 블로그 게시물에서 가장 자주 액세스하는 데이터와 지연 시간에 민감한 애플리케이션을 위해 10밀리초 미만의 일관된 데이터 액세스를 제공하도록 특별히 제작된 고성능 단일 가용 영역 스토리지 클래스인 Amazon S3 Express One Zone을 소개했습니다. S3 Express One Zone은 까다로운 애플리케이션에 적합하며 S3 Standard보다 최대 10배 향상된 성능을 제공하도록 설계되었습니다. 또한 S3 Express One Zone은 S3 디렉터리 버킷을 사용하여 단일 AZ에 객체를 저장합니다.

오늘부터 S3 Express One Zone은 AWS CloudTrail 데이터 이벤트 로깅을 지원하여 기존에 지원되던 CreateBucket, DeleteBucket과 같은 버킷 수준 작업뿐만 아니라 PutObject, GetObject, DeleteObject와 같은 모든 객체 수준 작업을 모니터링할 수 있습니다. 이를 통해 거버넌스 및 규정 준수를 위한 감사가 가능하며, S3 Standard 스토리지 클래스에 비해 50% 저렴한 요청 비용으로 S3 Express One Zone을 이용할 수 있습니다.

이 새로운 기능을 사용하면 생성, 읽기, 업데이트 또는 삭제된 S3 Express One Zone 객체를 신속하게 파악하고 API 직접 호출의 소스를 식별할 수 있습니다. 승인되지 않은 S3 Express One Zone 객체 액세스가 감지되면 즉시 액세스를 제한하는 조치를 취할 수 있습니다. 또한 Amazon EventBridgeCloudTrail 통합을 사용하여 데이터 이벤트에 의해 트리거되는 규칙 기반 워크플로를 생성할 수 있습니다.

Amazon S3 Express One Zone에 CloudTrail 데이터 이벤트 로깅 사용
Amazon S3 콘솔에서 시작합니다. 디렉터리 버킷 생성 단계에 따라 S3 버킷을 생성하고 버킷 유형으로 디렉터리를 선택하고 가용 영역으로 apne1-az4를 선택합니다. 기본 이름s3express-one-zone-cloudtrail을 입력하면 가용 영역의 ID가 포함된 접미사가 자동으로 추가되어 최종 이름이 생성됩니다. 마지막으로 데이터는 단일 가용 영역에 저장됩니다. 확인란을 선택하고 버킷 생성을 선택합니다.

S3 Express One Zone에 대한 데이터 이벤트 로깅을 활성화하려면 CloudTrail 콘솔로 이동합니다. 이름을 입력하고 S3 디렉터리 버킷의 이벤트 추적을 담당하는 CloudTrail 추적을 생성합니다.

2단계: 로그 이벤트 선택에서 고급 이벤트 선택기가 활성화됨‘을 선택한 상태에서 데이터 이벤트를 선택합니다.

데이터 이벤트 유형으로 S3 Express를 선택합니다. 로그 선택기 템플릿으로 모든 이벤트 로깅을 선택하여 모든 S3 디렉터리 버킷에 대한 데이터 이벤트를 관리할 수 있습니다.

그러나 이벤트 데이터 스토어가 S3 디렉터리 버킷 s3express-one-zone-cloudtrail--apne1-az4--x-s3에 대한 이벤트만 로깅하도록 하고 싶습니다. 이 경우 로그 선택기 템플릿으로 사용자 지정을 선택하고 디렉터리 버킷의 ARN을 표시합니다. 고급 이벤트 선택기를 사용하여 데이터 이벤트를 필터링하는 방법에 대한 설명서에서 자세히 알아보세요.

3단계: 검토 및 생성으로 마무리합니다. 이제 CloudTrail을 사용한 로깅이 활성화되었습니다.

작동 중인 S3 Express One Zone에 대한 CloudTrail 데이터 이벤트 로깅:
S3 콘솔을 사용하여 S3 디렉터리 버킷에 파일을 업로드하고 다운로드합니다.

AWS CLI를 사용하여 Put_ObjectGet_Object를 전송합니다.

$ aws s3api put-object --bucket s3express-one-zone-cloudtrail--apne1-az4--x-s3 \
  --key cloudtrail_test  \ 
--body cloudtrail_test.txt
$ aws s3api get-object --bucket s3express-one-zone-cloudtrail--apne1-az4--x-s3 \ 
--key cloudtrail_test response.txt

CloudTrail이 로그 파일을 gzip 아카이브의 S3 버킷에 게시하고 버킷 이름, 계정 ID, 리전 및 날짜를 기준으로 계층적으로 구성합니다. AWS CLI를 사용하여 추적과 연결된 버킷을 나열하고 테스트를 수행한 날짜의 로그 파일을 검색합니다.

$ aws s3 ls s3://aws-cloudtrail-logs-MY-ACCOUNT-ID-3b49f368/AWSLogs/MY-ACCOUNT-ID/CloudTrail/ap-northeast-1/2024/07/01/

콘솔 테스트에서 2개, CLI 테스트에서 2개, 총 4개의 파일 이름을 얻습니다.

2024-07-05 20:44:16 317 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T2044Z_lzCPfDRSf9OdkdC1.json.gz
2024-07-05 20:47:36 387 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T2047Z_95RwiqAHCIrM9rcl.json.gz
2024-07-05 21:37:48 373 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T2137Z_Xk17zhf0cTY0N5bH.json.gz
2024-07-05 21:42:44 314 MY-ACCOUNT-ID_CloudTrail_ap-northeast-1_20240705T21415Z_dhyTsSb3ZeAhU6hR.json.gz

이들 파일 중에서 PutObject 이벤트를 검색해 보겠습니다. 첫 번째 파일을 열면 PutObject 이벤트 유형을 볼 수 있습니다. 기억하시겠지만 브라우저의 S3 콘솔을 통해 한 번, CLI를 사용하여 한 번, 총 두 번 업로드했습니다. API 직접 호출을 수행한 소스의 유형인 userAgent 속성은 브라우저를 참조하므로 이 이벤트는 S3 콘솔을 사용한 업로드를 참조합니다. CloudTrail 이벤트 이해에 대한 설명서에서 CloudTrail 이벤트에 대해 자세히 알아보세요.

{...},
"eventTime": "2024-07-05T20:44:16Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "PutObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

이제 AWS CLI를 사용하여 전송된 PutObject 명령에 해당하는 이벤트에 대한 세 번째 파일을 검토하면 userAgent 속성에 약간의 차이가 있음을 알 수 있습니다. 이 경우에는 AWS CLI를 참조합니다.

{...},
"eventTime": "2024-07-05T21:37:19Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "PutObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "aws-cli/2.17.9 md/awscrt#0.20.11 ua/2.0 os/linux#5.10.218-208.862.amzn2.x86_64 md/arch#x86_64 lang/python#3.11.8 md/pyimpl#CPython cfg/retry-mode#standard md/installer#exe md/distrib#amzn.2 md/prompt#off md/command#s3api.put-object",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

이제 두 번째 파일의 GetObject 이벤트를 살펴보겠습니다. 이벤트 유형이 GetObject이고 userAgent가 브라우저를 참조하므로 이 이벤트는 S3 콘솔을 사용한 다운로드를 참조함을 알 수 있습니다.

{...},
"eventTime": "2024-07-05T20:47:41Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "GetObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

마지막으로 AWS CLI에서 전송한 GetObject 명령에 대한 세부 정보가 포함된 네 번째 파일의 이벤트를 보여드리겠습니다. eventNameuserAgent가 예상과 일치함을 확인할 수 있습니다.

{...},
"eventTime": "2024-07-05T21:42:04Z",
"eventSource": "s3express.amazonaws.com",
"eventName": "GetObject",
"awsRegion": "ap-northeast-1",
"sourceIPAddress": "MY-IP",
"userAgent": "aws-cli/2.17.9 md/awscrt#0.20.11 ua/2.0 os/linux#5.10.218-208.862.amzn2.x86_64 md/arch#x86_64 lang/python#3.11.8 md/pyimpl#CPython cfg/retry-mode#standard md/installer#exe md/distrib#amzn.2 md/prompt#off md/command#s3api.put-object",
"requestParameters": {
...
},
"responseElements": {...},
"additionalEventData": {...},
...
"resources": [
{
"type": "AWS::S3Express::Object",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3/cloudtrail_example.png"
},
{
"accountId": "MY-ACCOUNT-ID",
"type": "AWS::S3Express::DirectoryBucket",
"ARN": "arn:aws:s3express:ap-northeast-1:MY-ACCOUNT-ID:bucket/s3express-one-zone-cloudtrail--apne1-az4--x-s3"
}
],
{...}

주요 사항

시작하기 – CloudTrail 콘솔, CLI 또는 SDK를 사용하여 S3 Express One Zone에 대해 CloudTrail 데이터 이벤트 로깅을 활성화할 수 있습니다.

리전현재 S3 Express One Zone을 사용할 수 있는 모든 AWS 리전에서 CloudTrail 데이터 이벤트 로깅을 사용할 수 있습니다.

활동 로깅 – S3 Express One Zone에 대한 CloudTrail 데이터 이벤트 로깅을 사용하면 PutObjectGetObject, DeleteObject와 같은 객체 수준 활동은 물론 CreateBucket, DeleteBucket과 같은 버킷 수준 활동도 기록할 수 있습니다.

요금 – S3 스토리지 클래스와 마찬가지로, 로깅된 이벤트 수와 로그 유지 기간에 따라 CloudTrail에서 S3 Express One Zone 데이터 이벤트 로깅 비용을 지불합니다. 자세한 내용은 AWS CloudTrail 요금 페이지를 참조하세요.

S3 Express One Zone에 대한 CloudTrail 데이터 이벤트 로깅을 활성화하여 고성능 스토리지에 대한 거버넌스와 규정 준수를 간소화할 수 있습니다. 이 새로운 기능에 대해 자세히 알아보려면 S3 사용 설명서를 참조하세요.

Eli.