Terraform尝试创建s3存储桶策略(尽管存在)

时间:2019-12-04 16:23:37

标签: amazon-web-services amazon-s3 terraform terraform-provider-aws

我有一个先前用terraform创建的名为my-awesome-bucket的AWS S3存储桶。

出于本讨论范围之外的某些原因,我通过AWS控制台手动添加了以下存储桶策略(我只是在此处复制并粘贴)

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:*",
            "Resource": "arn:aws:s3:::my-awesome-bucket/*",
            "Condition": {
                "Bool": {
                    "aws:SecureTransport": "false"
                }
            }
        }
    ]
}

目前,我只是在相应的行中添加以下几行 s3资源定义:

  policy = <<EOF
  {
      "Version": "2008-10-17",
      "Statement": [
          {
              "Effect": "Deny",
              "Principal": "*",
              "Action": "s3:*",
              "Resource": "arn:aws:s3:::my-awesome-bucket/*",
              "Condition": {
                  "Bool": {
                      "aws:SecureTransport": "false"
                  }
              }
          }
      ]
  }
EOF

有人知道我的terraform计划为何指示将创建该策略吗? (尽管存在?)

$ terraform plan

(...)
  ~ aws_s3_bucket.my-awesome-bucket
      policy: "" => "  {\n      \"Version\": \"2008-10-17\",\n      \"Statement\": [\n          {\n              \"Effect\": \"Deny\",\n              \"Principal\": \"*\",\n              \"Action\": \"s3:*\",\n              \"Resource\": \"arn:aws:s3:::my-awesome-bucket/*\",\n              \"Condition\": {\n                  \"Bool\": {\n                      \"aws:SecureTransport\": \"false\"\n                  }\n              }\n          }\n      ]\n  }\n"

1 个答案:

答案 0 :(得分:2)

您的地形状态不知道该策略已经存在。您需要先使用以下内容将其导入:

policy

https://www.terraform.io/docs/providers/aws/r/s3_bucket_policy.html#import

https://www.terraform.io/docs/state/purpose.html

编辑:我重新阅读了您的问题,看来您在aws_s3_bucket资源中使用了aws_s3_bucket_policy参数。 terraform文档说:

  

请注意,如果政策文件不够明确(但仍然   有效),Terraform可能会认为该政策在不断变化中   地形计划。在这种情况下,请确保使用   详细/特定版本的政策。

因此,您可能需要将此策略移至其自己的f(P) = \sigma_{i=1}^{1180} P_i 资源中,并按照最初的建议进行导入。

https://www.terraform.io/docs/providers/aws/r/s3_bucket.html#policy