Назад | Перейти на главную страницу

Terraform - Добавление второй политики AWS IAM

В настоящее время у меня есть одна роль 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?