Настройте AWS Cloudfront для входа в корзину S3 под другой учетной записью AWS

У меня есть несколько дистрибутивов AWS Cloudfront, распределенных между разными аккаунтами AWS.

Я хотел бы хранить журналы доступа из этих дистрибутивов в одной корзине S3 в одной учетной записи AWS.

Это возможно, но это не задокументировано (что я могу найти).

Не ясно, какое обновление для ACL требуется для корзины журналов или какая (если таковая имеется) политика корзины требуется.

Мне кажется, что мне нужно обновить ACL на корзине, чтобы дать FULL_CONTROL канонический идентификатор любой учетной записи в другой учетной записи AWS, которую Cloudfront использует для записи журналов.

Если кто-то еще настроил это и может помочь, я был бы очень благодарен.

2 ответа

Решение

(Обновлено для дальнейшего использования)

Допустим, ваш дистрибутив CloudFront находится в учетной записи 123456789012, и ведение журнала настроено на ведро. your-logging-bucket в другом аккаунте.

  1. Создайте политику S3 Bucket, которая дает учетной записи CloudFront разрешения 123456789012 для выполнения s3:GetBucketAcl а также s3:PutBucketAcl на your-logging-bucket,

    Это обязательная политика Bucket:

    {
      "Version": "2012-10-17",
      "Statement": [
        {
          "Effect": "Allow",
          "Principal": {
            "AWS": "arn:aws:iam::123456789012:root"     << the CloudFront account
          },
          "Action": [
            "s3:GetBucketAcl",
            "s3:PutBucketAcl"
          ],
          "Resource": "arn:aws:s3:::your-logging-bucket"
        }
      ]
    }
    
  2. С этой политикой S3 Bucket * создайте новый дистрибутив CloudFront в учетной записи 1223456789012 и в мастере создания включите запись в your-logging-bucket, Благодаря вышеупомянутой Политике Bucket она создаст соответствующие ACL для вас.

    Вы можете проверить это, что официальный аккаунт CloudFront c4c1ede66af...8632f77d2d0 был предоставлен доступ путем просмотра S3 -> your-logging-bucket -> Permissions -> ACL

  3. Настройте все остальные дистрибутивы CF в учетной записи 123... для входа your-logging-bucket - теперь он должен работать и для всех ранее существовавших CF-дисков.

Надеюсь, это поможет:)

Предыдущий ответ не сработал, потому что вы, ребята, не настроили контроль доступа для Canonical ID службы доставки журналов AWS.

Фрагмент кода на TypeScript в CDK, который создает правильно настроенный сегмент журналов для всей организации:

          const cloudFrontLogAggregatorBucket = new Bucket(this, 'CloudFrontLogs', {
      bucketName: props.cloudFrontLogAggregatorBucketName,
      accessControl: BucketAccessControl.LOG_DELIVERY_WRITE,
      encryption: BucketEncryption.S3_MANAGED,
    })
    const cloudFrontAclPolicy = new PolicyStatement({
      principals: [new StarPrincipal()],
      actions: ['s3:GetBucketAcl', 's3:PutBucketAcl'],
      resources: [cloudFrontLogAggregatorBucket.bucketArn],
      conditions: {
        'ForAnyValue:StringLike': { 'aws:PrincipalOrgPaths': 'o-4hvri4xxxx/r-zzzr/*' },
      },
    })
    cloudFrontLogAggregatorBucket.addToResourcePolicy(cloudFrontAclPolicy)

Надеюсь, это кому-то поможет.

Другие вопросы по тегам