CloudWatch Logs에 서버 액세스 로그 전송
Amazon CloudWatch Logs 벤디드 로그 전송을 사용하여 CloudWatch Logs 로그 그룹에 Amazon S3 서버 액세스 로그를 전송할 수 있습니다. CloudWatch Logs에 로그가 저장되면 CloudWatch Logs Insights를 사용하여 쿼리하고, 계정 및 리전 간에 집계하며, AWS Key Management Service(AWS KMS)를 사용하여 암호화하고, 선택적으로 SQL 분석을 위해 Apache Iceberg 형식으로 Amazon S3 Tables에 전송할 수 있습니다. JSON 또는 Apache Parquet 형식으로 Amazon S3에 로그를 전송하거나 Amazon Data Firehose를 통해 라우팅할 수도 있습니다.
Amazon S3 API가 아닌 CloudWatch Logs API를 사용하여 전송을 구성합니다. 각 소스 버킷에 대한 로그 그룹을 지정합니다. 여러 버킷이 동일한 로그 그룹을 공유하거나 각 버킷이 자체로 전송할 수 있습니다.
작은 정보
동일한 버킷에 대해 여러 대상을 설정할 수 있습니다. 예를 들어, 대화형 쿼리를 위해 CloudWatch Logs 로그 그룹에 전송하고, 더 저렴한 비용으로 장기 보존을 위해 Parquet 형식으로 Amazon S3에 동시에 전송합니다.
참고
CloudWatch Logs 벤디드 로그 전송은 Apache Parquet 출력 형식을 포함하여 Amazon Data Firehose 및 Amazon S3도 전송 대상으로 지원합니다. 이 페이지에서는 CloudWatch Logs 로그 그룹 대상을 다루며, 이는 SQL 분석을 위한 S3 Tables 통합도 지원합니다. Firehose 및 Amazon S3 대상에 대한 자세한 내용은 Amazon CloudWatch Logs 사용 설명서의 AWS 서비스에서 로깅 활성화를 참조하세요.
참고
대신 Amazon S3 범용 버킷으로 서버 액세스 로그를 전송하는 방법에 대한 자세한 내용은 Amazon S3 서버 액세스 로깅 사용 설정 섹션을 참조하세요.
사전 조건
전송을 설정하기 전에 다음이 필요합니다.
-
Amazon S3 범용 버킷(로그를 기록하려는 소스 버킷)
-
소스 버킷과 동일한 AWS 리전의 CloudWatch Logs 로그 그룹
-
호출자의 IAM 권한 최소한 다음 작업을 수행할 수 있는 권한이 필요합니다.
-
logs:PutDeliverySource -
logs:PutDeliveryDestination -
logs:CreateDelivery -
s3:AllowVendedLogDeliveryForResource(소스 버킷에서)
S3 Tables 통합을 활성화하려는 경우 다음도 필요합니다.
-
observabilityadmin:CreateS3TableIntegration -
logs:AssociateSourceToS3TableIntegration -
s3tables:CreateTableBucket -
s3tables:PutTableBucketEncryption -
s3tables:PutTableBucketPolicy
-
전송 설정(AWS CLI)
AWS Command Line Interface을 사용하여 CloudWatch Logs에 대한 서버 액세스 로그 전송을 설정하려면 다음 세 단계를 완료합니다.
-
전송 소스를 생성합니다. 이렇게 하면 Amazon S3 버킷이 CloudWatch Logs에 로그 소스로 등록됩니다.
aws logs put-delivery-source \ --namemy-sal-source\ --resource-arn arn:aws:s3:::my-bucket\ --log-type S3_SERVER_ACCESS_LOGS -
전송 대상을 생성합니다. 이렇게 하면 로그가 전송될 CloudWatch Logs 로그 그룹이 지정됩니다.
aws logs put-delivery-destination \ --namemy-sal-destination\ --delivery-destination-configuration '{"destinationResourceArn": "arn:aws:logs:us-east-1:123456789012:log-group:my-sal-logs"}' -
전송을 생성합니다. 이렇게 하면 소스가 대상에 연결되고 로그 전송이 시작됩니다.
aws logs create-delivery \ --delivery-source-namemy-sal-source\ --delivery-destination-arn arn:aws:logs:us-east-1:123456789012:delivery-destination:my-sal-destination
이러한 단계를 완료하면 Amazon S3가 CloudWatch Logs 로그 그룹에 서버 액세스 로그를 전송하기 시작합니다. 구성이 적용되는 데 15~20분이 걸립니다. 적용 후 로그 전송은 일반적으로 몇 시간 이내에 시작됩니다. 새로운 요청만 기록되며, 과거 데이터는 백업되지 않습니다.
전송 설정(Amazon S3 콘솔)
-
https://console.aws.amazon.com/s3/
에서 Amazon S3 콘솔에 로그인합니다. -
왼쪽 탐색 창에서 버킷을 선택합니다.
-
로깅을 활성화하려는 소스 버킷의 이름을 선택합니다.
-
속성 탭을 선택합니다.
-
CloudWatch Logs로 서버 액세스 로그 전송 섹션에서 편집을 선택합니다.
-
활성화를 선택합니다.
-
CloudWatch Logs 로그 그룹을 전송 대상으로 선택하거나 생성합니다.
-
(선택 사항) 로그를 Apache Iceberg 형식으로 S3 Tables에 전송하려면 S3 Tables 통합 활성화를 선택합니다.
-
변경 사항 저장을 선택합니다.
저장하면 CloudWatch Logs로 서버 액세스 로그 전송 섹션에 활성화된 로그 그룹이 표시됩니다.
전송 설정(CloudFormation)
AWS CloudFormation을 사용하여 CloudWatch Logs로 서버 액세스 로그 전송 설정을 자동화할 수 있습니다. 다음 템플릿은 IAM 역할, CloudWatch Logs 로그 그룹, 전송 소스, 전송 대상 및 전송과 같은 필수 리소스를 생성합니다.
AWSTemplateFormatVersion: '2010-09-09' Description: S3 Access Logs delivery to CloudWatch Logs Parameters: SourceBucketArn: Type: String Description: ARN of the S3 bucket to enable access logging LogGroupName: Type: String Default: /aws/s3/access-logs Description: CloudWatch Log Group name for SAL delivery Resources: SALLogGroup: Type: AWS::Logs::LogGroup Properties: LogGroupName: !Ref LogGroupName RetentionInDays: 180 SALDeliverySource: Type: AWS::Logs::DeliverySource Properties: Name: !Sub '${AWS::StackName}-sal-source' ResourceArn: !Ref SourceBucketArn LogType: S3_SERVER_ACCESS_LOGS SALDeliveryDestination: Type: AWS::Logs::DeliveryDestination Properties: Name: !Sub '${AWS::StackName}-sal-destination' DestinationResourceArn: !GetAtt SALLogGroup.Arn SALDelivery: Type: AWS::Logs::Delivery Properties: DeliverySourceName: !Ref SALDeliverySource DeliveryDestinationArn: !GetAtt SALDeliveryDestination.Arn
S3 Tables 통합 활성화(선택 사항)
S3 Tables 통합을 활성화하면 CloudWatch Logs는 Apache Iceberg 형식으로 서버 액세스 로그를 계정의 aws-cloudwatch 관리형 테이블 버킷에 자동으로 전달합니다. 그런 다음 Amazon Athena, Amazon Redshift 또는 Iceberg 호환 도구를 사용하여 이 데이터를 쿼리할 수 있습니다.
S3 Tables 통합에서 스토리지 또는 테이블 유지 관리에 대한 추가 요금은 없습니다. S3 Tables 요금의 CloudWatch Logs 수집 및 쿼리 요청에 대해서만 비용을 지불합니다.
-
S3 Tables 통합을 생성합니다(계정당, 리전당 한 번).
aws observabilityadmin create-s3-table-integration \ --role-arn arn:aws:iam::123456789012:role/CWLogsS3TableIntegrationRole\ --encryption '{"SseAlgorithm": "AES256"}'IAM 역할은
logs.amazonaws.com서비스 보안 주체를 신뢰하고logs:integrateWithS3Table권한을 부여해야 합니다. 다음은 신뢰 정책 예시입니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "logs.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnLike": { "aws:SourceArn": "arn:aws:logs:us-east-1:123456789012:log-group:log-group-name" } } } ] }또한 이 역할에는 다음 정책 권한이 필요합니다.
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "logs:integrateWithS3Table", "Resource": "arn:aws:logs:us-east-1:123456789012:log-group:log-group-name", "Condition": { "StringEquals": { "aws:ResourceAccount": "123456789012" } } } ] } -
전송 소스를 통합에 연결합니다.
aws logs associate-source-to-s3-table-integration \ --integration-arnintegration-arn\ --data-source '{"name":"amazon_s3","type":"server_access"}'
이 단계 후 CloudWatch Logs는 aws-cloudwatch 관리형 테이블 버킷을 생성하고 Iceberg 형식으로 로그 전송을 시작합니다. 데이터는 일반적으로 CloudWatch Logs에 처음 전송한 후 1시간 이내에 표시됩니다.
S3 Tables 통합 쿼리에 대한 자세한 내용은 S3 Tables에서 액세스 로그 쿼리 섹션을 참조하세요.
교차 계정 및 교차 리전 집계
CloudWatch Logs 전송 경로는 다음 두 가지 옵션을 사용하여 교차 계정 및 교차 리전 로그 집계를 지원합니다.
-
CloudWatch 교차 계정 관찰성을 사용하면 데이터를 복사하지 않고도 계정 전체에서 로그를 쿼리할 수 있습니다.
-
CloudWatch Logs 중앙 집중화를 통해 여러 계정 및 리전의 로그를 중앙 로그 그룹으로 통합할 수 있으며, 필요에 따라 구독 필터를 사용하여 선택적으로 로그를 전달할 수도 있습니다.
다중 계정 설정의 경우 관리자는 AWS Organizations과 함께 CloudWatch Telemetry Config 활성화 규칙을 사용하여 멤버 계정 간에 서버 액세스 로그 전송을 자동으로 활성화할 수 있습니다.
참고
활성화 규칙은 현재 S3 Tables 통합의 자동 활성화를 지원하지 않습니다. 각 계정에서 개별적으로 통합을 활성화해야 합니다.
암호화
로그 그룹에서 AWS KMS 암호화를 구성하여 CloudWatch Logs로 전송된 서버 액세스 로그를 암호화할 수 있습니다. 서버 액세스 로그가 해당 로그 그룹에 전달되면 AWS KMS 키로 암호화됩니다. 이는 SSE-S3 암호화만 지원하는 Amazon S3 범용 버킷 전송 경로의 주요 한계를 해결합니다.
AWS KMS 암호화 로그 그룹과의 S3 Tables 통합을 활성화하는 경우 AWS KMS 키 정책에서 다음 서비스 보안 주체에 추가 권한을 부여해야 합니다.
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnableCWSystemTablesKeyUsage", "Effect": "Allow", "Principal": { "Service": "systemtables.cloudwatch.amazonaws.com" }, "Action": [ "kms:DescribeKey", "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" } } }, { "Sid": "EnableS3TablesMaintenanceKeyUsage", "Effect": "Allow", "Principal": { "Service": "maintenance.s3tables.amazonaws.com" }, "Action": [ "kms:GenerateDataKey", "kms:Decrypt" ], "Resource": "arn:aws:kms:us-east-1:123456789012:key/key-id", "Condition": { "StringLike": { "kms:EncryptionContext:aws:s3:arn": "table-bucket-arn/*" } } } ] }
systemtables.cloudwatch.amazonaws.com 보안 주체는 CloudWatch Logs에서 S3 Tables에 로그를 쓰는 데 사용됩니다. maintenance.s3tables.amazonaws.com 보안 주체는 S3 Tables에서 압축과 같은 Iceberg 작업을 수행하는 데 사용됩니다.
전송 비활성화
CloudWatch Logs로의 서버 액세스 로그 전송을 중지하려면 전송 또는 전송 소스를 삭제하면 됩니다.
-
전송 삭제 - 로그 전송을 중지하지만 전송 소스 구성은 그대로 유지합니다. 나중에 소스를 재구성하지 않고도 새 전송을 생성할 수 있습니다.
aws logs delete-delivery \ --iddelivery-id -
전송 소스 삭제 - 소스 구성을 완전히 제거합니다. CloudWatch Logs 전송과 연결된 버킷을 더 이상 원하지 않는 경우 이 옵션을 사용합니다.
aws logs delete-delivery-source \ --namedelivery-source-name
이전에 전송된 로그는 로그 그룹 및 S3 Tables 통합(활성화된 경우)에 남아 있습니다. 전송을 삭제해도 기존 로그 데이터는 제거되지 않습니다.