【问题标题】:Terraform tries to create s3 bucket policy although it existsTerraform 尝试创建 s3 存储桶策略,尽管它存在
【发布时间】:2020-03-29 12:26:19
【问题描述】:

我有一个之前使用 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"

【问题讨论】:

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


    【解决方案1】:

    您的 terraform 状态不知道该政策已经存在。您需要先使用以下内容导入它:

    terraform import aws_s3_bucket_policy.example my-bucket-name
    

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

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

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

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

    因此,您可能需要将此策略移动到其自己的 aws_s3_bucket_policy 资源中,并按照最初的建议进行导入。

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

    【讨论】:

    • 谢谢。但是,问题是我只是将版本从 AWS 控制台复制到 TF 脚本。 TF 仍然未能但由于某种原因无法查看政策
    • (所以版本就在那里,在 TF 脚本中和在控制台中都是一样的)
    • @pkaramol 是的,但它不在 terraform 状态。 Terraform 只知道它创建的东西,或者已经导入它的东西。 Terraform 不会在每次运行时检查您的所有云资源。它只是看到该策略在其内部状态中不存在,并且想要创建它。您是否尝试过导入任何内容?
    猜你喜欢
    • 1970-01-01
    • 2021-08-14
    • 2022-11-03
    • 2019-05-15
    • 2021-04-04
    • 2021-10-21
    • 1970-01-01
    • 2020-03-23
    • 2011-09-10
    相关资源
    最近更新 更多