Terraform - 无法在字符串模板中包含给定值:需要字符串
Terraform - Cannot include the given value in a string template: string required
我正在尝试按照 this page 使用 terraform 在 SageMaker 上创建模型
由于权限限制,我无法为 sagemaker 角色分配完整的访问策略,因此我创建了一个角色并附加了一个具有部分权限的策略
当我测试 Terraform plan
时,它给了我这个:
Error: Invalid template interpolation value
...
..........................
141: "ecr:GetRepositoryPolicy"
142: ],
143: "Resource": [
144: "arn:aws:s3:::${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket}",
145: "arn:aws:s3:::${local.binaries_bucket_name}",
146: "arn:aws:s3:::${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket}/*",
147: "arn:aws:s3:::${local.binaries_bucket_name}/*",
148: "arn:aws:ecr:us-east-1:*:repository/*",
149.....................
157: }
158: ]
159: }
160: POLICY
|----------------
| aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket is object with 25 attributes
Cannot include the given value in a string template: string required.
我是新手,只是想知道这是在抱怨存储桶名称太长还是其他原因?我应该怎么做才能解决这个问题,我有点困惑。非常感谢。
(PS: Terraform 版本 v0.13.4
+ 提供商 registry.terraform.io/hashicorp/aws v3.20.0
)
我认为您需要正确创建自定义策略,然后 link 将其添加到存储桶中,您可以在此处查看一些示例:
https://registry.terraform.io/modules/JousP/s3-bucket-policy/aws/latest/examples/custom-policy
看来你要的是S3 bucket的ARN,由exported resource attributes提供。具体来说,您可能需要 arn
资源属性。
更新您的政策,例如:
144: "${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket.arn}",
146: "${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket.arn}/*",
将通过访问 arn
属性为您提供所需的字符串。当前编写的策略正在访问 aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket
,它是该资源的每个参数和属性的映射(可能是对象),并且不会在您的策略字符串中插入。
我正在尝试按照 this page 使用 terraform 在 SageMaker 上创建模型 由于权限限制,我无法为 sagemaker 角色分配完整的访问策略,因此我创建了一个角色并附加了一个具有部分权限的策略
当我测试 Terraform plan
时,它给了我这个:
Error: Invalid template interpolation value
...
..........................
141: "ecr:GetRepositoryPolicy"
142: ],
143: "Resource": [
144: "arn:aws:s3:::${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket}",
145: "arn:aws:s3:::${local.binaries_bucket_name}",
146: "arn:aws:s3:::${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket}/*",
147: "arn:aws:s3:::${local.binaries_bucket_name}/*",
148: "arn:aws:ecr:us-east-1:*:repository/*",
149.....................
157: }
158: ]
159: }
160: POLICY
|----------------
| aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket is object with 25 attributes
Cannot include the given value in a string template: string required.
我是新手,只是想知道这是在抱怨存储桶名称太长还是其他原因?我应该怎么做才能解决这个问题,我有点困惑。非常感谢。
(PS: Terraform 版本 v0.13.4
+ 提供商 registry.terraform.io/hashicorp/aws v3.20.0
)
我认为您需要正确创建自定义策略,然后 link 将其添加到存储桶中,您可以在此处查看一些示例: https://registry.terraform.io/modules/JousP/s3-bucket-policy/aws/latest/examples/custom-policy
看来你要的是S3 bucket的ARN,由exported resource attributes提供。具体来说,您可能需要 arn
资源属性。
更新您的政策,例如:
144: "${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket.arn}",
146: "${aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket.arn}/*",
将通过访问 arn
属性为您提供所需的字符串。当前编写的策略正在访问 aws_s3_bucket.xx_xxxxxxxxxx_xxx_bucket
,它是该资源的每个参数和属性的映射(可能是对象),并且不会在您的策略字符串中插入。