Ir para o conteúdo

Como faço para enviar logs do CloudFront de uma conta para um bucket do Amazon S3 em uma conta diferente?

4 minuto de leitura
0

Quero que minha distribuição do Amazon CloudFront envie logs de uma conta da AWS para um bucket do Amazon Simple Storage Service (Amazon S3) que esteja em uma conta diferente. No entanto, recebo uma mensagem de erro Acesso Negado (403) quando tento configurar o destino de registro em log entre contas.

Breve descrição

Para resolver o erro "Access Denied" e configurar corretamente o registro em log entre contas, você deve dar permissão ao CloudFront para gravar logs no seu bucket do S3.

Importante: se você usa um bucket do S3 na mesma conta, não precisa configurar o registro em log entre contas. O CloudFront cria automaticamente a política de bucket do S3 necessária.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Na resolução a seguir, a Conta A é a conta em que sua distribuição do CloudFront está localizada. A Conta B é a conta de destino em que seu bucket do S3 está localizado.

Para configurar o registro em log entre contas e dar permissão ao CloudFront para gravar logs em seu bucket do S3, conclua as seguintes etapas:

  1. Na Conta A, configure o registro em log padrão (v2).
    Observação: para ativar os logs padrão, você deve usar o plano profissional ou o plano de pagamento conforme o uso. Para obter mais informações, consulte Preços do Amazon CloudFront.
  2. Na Conta A, execute o seguinte comando put-delivery-source da AWS CLI para criar uma fonte de envio com sua distribuição do 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
    Observação: substitua DELIVERY_SOURCE_NAME, SOURCE_ACCOUNT_ID, DISTRIBUTION_ID e ACCESS_LOGS por seus valores.
  3. Na Conta B, adicione a seguinte política de bucket ao bucket do S3 para permitir que o responsável pelo serviço delivery.logs.amazonaws.com faça o upload dos logs:
    {
        "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"
                    }
                }
            }
        ]
    }
    Observação: substitua BUCKET_NAME, PREFIX, SOURCE_ACCOUNT_ID e DELIVERY_SOURCE_NAME por seus valores.
  4. Na Conta B, execute o seguinte comando put-delivery-destination para criar o destino de envio:
    aws logs put-delivery-destination \
    --name DELIVERY_DESTINATION_NAME \
    --delivery-destination-configuration destinationResourceArn=arn:aws:s3:::BUCKET_NAME/PREFIX \
    --region us-east-1
    Observação: substitua DELIVERY_DESTINATION_NAME, BUCKET_NAME e PREFIX por seus valores. A Conta B cria uma política de destino de envio em seu novo destino de envio. A política dá permissão à Conta A para criar um envio de log.
  5. Use seu editor JSON preferido para criar a seguinte política de destino:
    {
        "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"
        }]
    }
    Observação: substitua SOURCE_ACCOUNT_ID, DESTINATION_ACCOUNT_ID e DELIVERY_DESTINATION_NAME pelos seus valores.
  6. Nomeie a política destination-policy-s3.json e salve o arquivo em sua máquina local.
  7. Na Conta B, execute o seguinte comando put-delivery-destination-policy para adicionar a política destination-policy-s3.json ao destino de envio:
    aws logs put-delivery-destination-policy \
    --delivery-destination-name DELIVERY_DESTINATION_NAME  \
    --delivery-destination-policy file://destination-policy-s3.json \
    --region us-east-1
    Observação: substitua DELIVERY_DESTINATION_NAME pelo seu valor.
  8. Na Conta A, execute o seguinte comando create-delivery para conectar a origem de envio na Conta A ao destino de envio na Conta 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
    Observação: substitua DESTINATION_ACCOUNT_ID e DELIVERY_DESTINATION_NAME por seus valores.
  9. Na Conta A, execute uma operação em sua distribuição do CloudFront para verificar se sua distribuição enviou os logs para o bucket do S3 na Conta B.
    Observação: pode levar alguns minutos para que os logs apareçam no bucket.

Informações relacionadas

Exemplo de envio entre contas

AWS OFICIALAtualizada há um ano
1 Comentário

This article was reviewed and updated on 2025-08-06.

ESPECIALISTA

respondeu há 3 meses