Вопрос или проблема
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.