В настоящее время у меня есть одна роль IAM с прикрепленной к ней политикой следующим образом:
data aws_iam_policy_document bucket_access {
statement {
actions = [
"s3:AbortMultipartUpload",
"s3:CreateMultipartUpload",
"s3:GetBucketAcl",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:ListBucketMultipartUploads",
"s3:PutObject",
"s3:PutObjectAcl",
]
resources = [
"arn:aws:s3:::bucket.domain.net/*",
]
}
statement {
actions = [
"s3:CreateMultipartUpload",
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:ListMultipartUploadParts",
]
resources = [
"arn:aws:s3:::bucket.domain.net",
]
}
}
resource aws_iam_policy bucket_access {
description = "Allow instances to write and delete in S3 bucket."
name_prefix = "bucket_access-"
policy = "${data.aws_iam_policy_document.bucket_access.json}"
}
resource aws_iam_role_policy_attachment gitlab_runner_bucket_access {
role = "${aws_iam_role.gitlab_runner.name}"
policy_arn = "${aws_iam_policy.bucket_access.arn}"
}
Теперь я хочу иметь вторую политику, которая позволит пользователю IAM удалять объекты в другом сегменте. Я добавил в тот же файл следующее:
data aws_iam_policy_document bucket_access_with_delete {
statement {
actions = [
"s3:AbortMultipartUpload",
"s3:CreateMultipartUpload",
"s3:GetBucketAcl",
"s3:GetBucketLocation",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:ListBucketMultipartUploads",
"s3:PutObject",
"s3:PutObjectAcl",
"s3:DeleteObject",
]
resources = [
"arn:aws:s3:::bucket2.domain.net/*",
]
}
statement {
actions = [
"s3:CreateMultipartUpload",
"s3:GetBucketLocation",
"s3:ListBucket",
"s3:ListBucketMultipartUploads",
"s3:ListMultipartUploadParts",
]
resources = [
"arn:aws:s3:::bucket2.domain.net",
]
}
}
resource aws_iam_policy bucket_access_with_delete {
description = "Allow instances to write and delete in S3 bucket."
name_prefix = "bucket_access_with_delete-"
policy = "${data.aws_iam_policy_document.bucket_access_with_delete.json}"
}
resource aws_iam_role_policy_attachment gitlab_runner_bucket_access_width_delete {
role = "${aws_iam_role.gitlab_runner.name}"
policy_arn = "${aws_iam_policy.bucket_access_with_delete.arn}"
}
Практически то же самое, но я изменил следующее:
1) Добавил действие "s3: DeleteObject" 2) Поменял ведро на bucket2.domain.net 3) Поменял имена названий политики и arn на _with_delete
Когда в файле есть только первый, он работает нормально. Когда я добавляю свой, он не проходит автоматические проверки, и я действительно не знаю почему. У меня нет доступа к фактической отладочной информации, поскольку она удалена, но можно ли добавить вторую политику в Terraform?