InsufficientS3BucketPolicyException: Обнаружена неправильная политика S3 для ведра.

Вопрос или проблема

InsufficientS3BucketPolicyException: Обнаружена неправильная политика S3 для ведра.

Я пытаюсь создать CloudTrail на уровне организации с использованием Terraform, но сталкиваюсь с ошибкой, связанной с политиками S3-бакета. Я пытался использовать документацию AWS для политики, пытался использовать политику из моего вручную созданного S3-бакета для ведения журналов Trail, но безуспешно.

# Создание S3-бакета для журналов CloudTrail
resource "aws_s3_bucket" "cloudtrail_bucket" {
  bucket = "${var.organization_name}-cloudtrail-logs"
}

# Применение шифрования на стороне сервера с использованием ключей, управляемых AWS (SSE-S3)
resource "aws_s3_bucket_server_side_encryption_configuration" "cloudtrail_bucket_sse" {
  bucket = aws_s3_bucket.cloudtrail_bucket.id

  rule {
    apply_server_side_encryption_by_default {
      sse_algorithm = "AES256"
    }
  }
}

# Блокировка публичного доступа для этого S3-бакета
resource "aws_s3_bucket_public_access_block" "cloudtrail_bucket_block_acl" {
  bucket = aws_s3_bucket.cloudtrail_bucket.id

  restrict_public_buckets = true
  ignore_public_acls      = true
  block_public_acls       = true
  block_public_policy     = true
}
# Политика бакета для ведения журналов CloudTrail
resource "aws_s3_bucket_policy" "cloudtrail_bucket_policy" {
  bucket = aws_s3_bucket.cloudtrail_bucket.id

  policy = jsonencode({
    "Version": "2012-10-17",
    "Statement": [
      {
        "Sid": "AWSCloudTrailAclCheck",
        "Effect": "Allow",
        "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
        "Action": "s3:GetBucketAcl",
        "Resource": "${aws_s3_bucket.cloudtrail_bucket.arn}",
        "Condition": {
          "StringEquals": {
            "aws:SourceArn": "${aws_cloudtrail.cloudtrail.arn}/${aws_cloudtrail.cloudtrail.name}"
          }
        }
      },
      {
        "Sid": "AWSCloudTrailWrite",
        "Effect": "Allow",
        "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
        "Action": "s3:PutObject",
        "Resource": "${aws_s3_bucket.cloudtrail_bucket.arn}/AWSLogs/${var.account_id}/*",
        "Condition": {
          "StringEquals": {
            "AWS:SourceArn": "${aws_cloudtrail.cloudtrail.arn}/${aws_cloudtrail.cloudtrail.name}",
            "s3:x-amz-acl": "bucket-owner-full-control"
          }
        }
      },
      {
        "Sid": "AWSCloudTrailOrganizationWrite",
        "Effect": "Allow",
        "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
        "Action": "s3:PutObject",
        "Resource": "${aws_s3_bucket.cloudtrail_bucket.arn}/AWSLogs/${var.organization_id}/*",
        "Condition": {
          "StringEquals": {
            "AWS:SourceArn": "${aws_cloudtrail.cloudtrail.arn}/${aws_cloudtrail.cloudtrail.name}",
            "s3:x-amz-acl": "bucket-owner-full-control"
          }
        }
      }
    ]
  })
}

# Ресурс CloudTrail
resource "aws_cloudtrail" "cloudtrail" {
  name                          = "${var.organization_name}-organizational-Trail"
  s3_bucket_name                = aws_s3_bucket.cloudtrail_bucket.id
  include_global_service_events = true
  is_multi_region_trail         = true
  enable_log_file_validation    = true
  is_organization_trail         = true

  event_selector {
    read_write_type           = "WriteOnly"
    include_management_events = true
  }
}

И появляется та же ошибка:


Ошибка: создание CloudTrail Trail: ошибка операции CloudTrail: CreateTrail, ошибка ответа https StatusCode: 400, RequestID: fcc97f0b-483b-4eaa-9650-c56a10b9c3c6, InsufficientS3BucketPolicyException: для бакета обнаружена неправильная политика S3.
│ 
│   с aws_cloudtrail.cloudtrail,
│   на строке 84 файла main.tf, в ресурсе "aws_cloudtrail" "cloudtrail":
│   84: resource "aws_cloudtrail" "cloudtrail" {

Я постоянно получаю ошибку: InsufficientS3BucketPolicyException: для бакета обнаружена неправильная политика S3. Есть ли предложения по поводу того, что может быть пропущено или как исправить политику бакета?

Ответ или решение

Ошибка InsufficientS3BucketPolicyException указывает на проблемы с политикой доступа к S3-бucket, который используется для хранения логов AWS CloudTrail. Чтобы решить эту проблему, необходимо убедиться, что политика bucket’а соответствует требованиям AWS для CloudTrail.

Вот несколько ключевых моментов, которые стоит проверить и исправить в вашей политике S3:

1. Правильные ARN и условия

Убедитесь, что в ваших условиях в политике используются верные значения для arn CloudTrail и аккаунта.

2. Включение всех необходимых действий

Политика должна включать все действия, необходимые для работы CloudTrail. Это может включать s3:PutObject, s3:GetBucketAcl, и s3:DeleteObject.

3. Пример корректной политики

Ниже приведен пример корректной политики для бакета S3, который используется CloudTrail:

resource "aws_s3_bucket_policy" "cloudtrail_bucket_policy" {
  bucket = aws_s3_bucket.cloudtrail_bucket.id

  policy = jsonencode({
    "Version": "2012-10-17",
    "Statement": [
      {
        "Sid": "AWSCloudTrailAclCheck",
        "Effect": "Allow",
        "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
        "Action": "s3:GetBucketAcl",
        "Resource": aws_s3_bucket.cloudtrail_bucket.arn
      },
      {
        "Sid": "AWSCloudTrailWrite",
        "Effect": "Allow",
        "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
        "Action": "s3:PutObject",
        "Resource": "${aws_s3_bucket.cloudtrail_bucket.arn}/AWSLogs/${var.account_id}/*",
        "Condition": {
          "StringEquals": {
            "s3:x-amz-acl": "bucket-owner-full-control"
          }
        }
      },
      {
        "Sid": "AWSCloudTrailOrganizationWrite",
        "Effect": "Allow",
        "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
        "Action": "s3:PutObject",
        "Resource": "${aws_s3_bucket.cloudtrail_bucket.arn}/AWSLogs/${var.organization_id}/*",
        "Condition": {
          "StringEquals": {
            "s3:x-amz-acl": "bucket-owner-full-control"
          }
        }
      },
      {
        "Sid": "AllowCloudTrailToDeleteObjects",
        "Effect": "Allow",
        "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
        "Action": "s3:DeleteObject",
        "Resource": "${aws_s3_bucket.cloudtrail_bucket.arn}/AWSLogs/${var.account_id}/*"
      },
      {
        "Sid": "AllowCloudTrailToDeleteOrganizationObjects",
        "Effect": "Allow",
        "Principal": {
          "Service": "cloudtrail.amazonaws.com"
        },
        "Action": "s3:DeleteObject",
        "Resource": "${aws_s3_bucket.cloudtrail_bucket.arn}/AWSLogs/${var.organization_id}/*"
      }
    ]
  })
}

4. Проверка идентификатора аккаунта

Убедитесь, что переменные ${var.account_id} и ${var.organization_id} правильно установлены. Это критично для правильного формирования ARN ресурсов.

5. Проверка окружения

Окончательно проверьте, что вы работаете в правильной учетной записи AWS и в нужном окружении, если используете несколько аккаунтов или регионов.

6. Убедитесь, что Bucket не имеет других политик

Если у вас есть другие политики, которые могут блокировать доступ, это также может вызвать ошибки.

Заключение

Проверьте и примените изменения к политике. Запустите terraform apply и посмотрите, была ли исправлена ошибка. Если проблема сохраняется, внимательно изучите логи и убедитесь, что S3-bucket доступен для CloudTrail.

Оцените материал
Добавить комментарий

Капча загружается...