내용으로 건너뛰기

한 계정의 CloudFront 로그를 다른 계정의 Amazon S3 버킷으로 전송하려면 어떻게 해야 합니까?

3분 분량
0

Amazon CloudFront 배포에서 한 AWS 계정의 로그를 다른 계정에 있는 Amazon S3 (단순 스토리지 서비스) 버킷으로 전송하도록 하려고 합니다. 하지만 크로스 계정 로깅 대상을 구성하려고 하면 액세스 거부(403) 오류 메시지가 표시됩니다.

간략한 설명

"Access Denied" 오류를 해결하고 크로스 계정 로깅을 올바르게 구성하려면 S3 버킷에 로그를 쓸 수 있는 권한을 CloudFront에 부여해야 합니다.

중요: 동일한 계정으로 S3 버킷을 사용하는 경우 크로스 계정 로깅을 설정할 필요가 없습니다. CloudFront에서 필요한 S3 버킷 정책을 자동으로 만듭니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하면 AWS CLI의 오류 해결을 참조하십시오. 또한 최신 AWS CLI 버전을 사용하고 있는지 확인하십시오.

다음 해결 방법에서 계정 A는 CloudFront 배포판이 위치한 계정입니다. 계정 B는 S3 버킷이 위치한 대상 계정입니다.

크로스 계정 로깅을 설정하고 S3 버킷에 로그를 쓸 수 있는 권한을 CloudFront에 부여하려면 다음 단계를 완료하십시오.

  1. 계정 A에서 표준 로깅(v2)을 설정합니다.
    참고: 레거시 표준 로깅(v1) 대신 표준 로깅(v2)을 사용하는 것이 가장 좋습니다.
  2. 계정 A에서 다음과 같은 put-delivery-source AWS CLI 명령을 실행하여 CloudFront 배포판으로 전송 소스를 만듭니다.
    aws logs put-delivery-source \
    --name DELIVERY_SOURCE_NAME \
    --resource-arn arn:aws:cloudfront::SOURCE_ACCOUNT_ID:distribution/DISTRIBUTION_ID \
    --log-type ACCESS_LOGS \
    --region us-east-1
    참고: DELIVERY_SOURCE_NAME, SOURCE_ACCOUNT_ID, DISTRIBUTION_IDACCESS_LOGS를 해당 값으로 바꾸십시오.
  3. 계정 B에서 다음 버킷 정책을 S3 버킷에 추가하여 delivery.logs.amazonaws.com 서비스 주체가 로그를 업로드할 수 있도록 허용합니다.
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AWSLogsDeliveryWrite",
                "Effect": "Allow",
                "Principal": {
                    "Service": "delivery.logs.amazonaws.com"
                },
                "Action": "s3:PutObject",
                "Resource": "arn:aws:s3:::BUCKET_NAME/PREFIX/*",
                "Condition": {
                    "StringEquals": {
                        "aws:SourceAccount": "SOURCE_ACCOUNT_ID",
                        "s3:x-amz-acl": "bucket-owner-full-control"
                    },
                    "ArnLike": {
                        "aws:SourceArn": "arn:aws:logs:us-east-1:SOURCE_ACCOUNT_ID:delivery-source:DELIVERY_SOURCE_NAME"
                    }
                }
            }
        ]
    }
    참고: BUCKET_NAME, PREFIX, SOURCE_ACCOUNT_IDDELIVERY_SOURCE_NAME을 해당 값으로 바꾸십시오.
  4. 계정 B에서 다음 put-delivery-destination 명령을 실행하여 전송 대상을 만듭니다.
    aws logs put-delivery-destination \
    --name DELIVERY_DESTINATION_NAME \
    --delivery-destination-configuration destinationResourceArn=arn:aws:s3:::BUCKET_NAME/PREFIX \
    --region us-east-1
    참고: DELIVERY_DESTINATION_NAME, BUCKET_NAMEPREFIX를 해당 값으로 바꾸십시오. 계정 B에서 새 전송 대상에 전송 대상 정책을 만듭니다. 이 정책은 계정 A에 로그 전송을 만들 수 있는 권한을 부여합니다.
  5. 선호하는 JSON 편집기를 사용하여 다음과 같은 대상 정책을 만듭니다.
    {
        "Version": "2012-10-17",
        "Statement": [{
            "Sid": "AllowCreateDelivery",
            "Effect": "Allow",
            "Principal": {
                "AWS": "SOURCE_ACCOUNT_ID"
            },
            "Action": [
                "logs:CreateDelivery"
            ],
            "Resource": "arn:aws:logs:us-east-1:DESTINATION_ACCOUNT_ID:delivery-destination:DELIVERY_DESTINATION_NAME"
        }]
    }
    참고: SOURCE_ACCOUNT_ID, DESTINATION_ACCOUNT_IDDELIVERY_DESTINATION_NAME을 해당 값으로 바꾸십시오.
  6. 정책 이름을 destination-policy-s3.json으로 지정한 다음 파일을 로컬 시스템에 저장합니다.
  7. 계정 B에서 다음 put-delivery-destination-policy 명령을 실행하여 destination-policy-s3.json 정책을 전송 대상에 추가합니다.
    aws logs put-delivery-destination-policy \
    --delivery-destination-name DELIVERY_DESTINATION_NAME  \
    --delivery-destination-policy file://destination-policy-s3.json \
    --region us-east-1
    참고: DELIVERY_DESTINATION_NAME을 해당 값으로 바꾸십시오.
  8. 계정 A에서 다음 create-delivery 명령을 실행하여 계정 A의 전송 소스를 계정 B의 전송 대상에 연결합니다.
    aws logs create-delivery \
    --delivery-source-name S3-delivery \
    --delivery-destination-arn arn:aws:logs:us-east-1:DESTINATION_ACCOUNT_ID:delivery-destination:DELIVERY_DESTINATION_NAME \
    --region us-east-1
    참고: DESTINATION_ACCOUNT_IDDELIVERY_DESTINATION_NAME을 해당 값으로 바꾸십시오.
  9. 계정 A에서 CloudFront 배포판에 대한 작업을 수행하여 배포에서 계정 B의 S3 버킷에 로그를 전송했는지 확인합니다.
    참고: 로그가 버킷에 표시되려면 몇 분 정도 걸릴 수 있습니다.

관련 정보

크로스 계정 전송 예시

AWS 공식업데이트됨 3달 전