Используйте Terraform v0.12, чтобы добавить aws_s3_bucket_policy в список сегментов - PullRequest
0 голосов
/ 20 февраля 2020

Я хотел бы создать шаблон политики и применить его к списку сегментов, но у меня возникла проблема с получением имени текущего сегмента в политике. Terraform дважды возвращает ошибку

"Error: Error putting S3 policy: MalformedPolicy: Policy has invalid resource"

. План работает нормально, вывод для политики выглядит хорошо и т. Д. c.

variable "s3_bucket_list" 
  { 
    type        = list(string)
    description = "List of buckets to secure"
    default     = ["bucket1","bucket2"]   
   }
resource "aws_s3_bucket" "qpp-secure-bucket" {
  count  = length(var.s3_bucket_list)
  bucket = var.s3_bucket_list[count.index]
  }

resource "aws_s3_bucket_policy" "minimum_s3_bucket_policy" {
  count  = length(var.s3_bucket_list)
  bucket = var.s3_bucket_list[count.index]

  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "DenyUnencryptedCommunication",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
        "${aws_s3_bucket.bucket.arn}",
        "arn:aws:s3:::${var.s3_bucket_list[count.index]}/*"
      ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      },
      "Principal": "*"
    }
  ]
}
POLICY

}

1 Ответ

0 голосов
/ 20 февраля 2020

Правильная политика

resource "aws_s3_bucket_policy" "secure-bucket" {
  count  = length(var.s3_bucket_list)
  bucket = var.s3_bucket_list[count.index]

  policy = <<POLICY {   "Version": "2012-10-17",   "Statement": [
    {
      "Sid": "DenyUnencryptedCommunication",
      "Action": "s3:*",
      "Effect": "Deny",
      "Resource": [
         "arn:aws:s3:::${var.s3_bucket_list[count.index]}",
         "arn:aws:s3:::${var.s3_bucket_list[count.index]}/*"      
        ],
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      },
      "Principal": "*"
    }   ] } POLICY

}
...