TemplateURL 必须引用您有权访问的有效 S3 对象

TemplateURL must reference a valid S3 object to which you have access

我正在尝试通过 lambda 函数启动一个新堆栈,如下所示:

var cloudformation = new AWS.CloudFormation();

cloudformation.createStack({
    StackName: 'example',
    TemplateURL: 'https://s3-eu-west-1.amazonaws.com/my.s3bucket/cloudformationtemplate.yml',
    Capabilities: ['CAPABILITY_IAM', 'CAPABILITY_NAMED_IAM'],
    RoleARN: 'arn:aws:iam::1234567890AB:role/myRole'
})

但是,我收到以下错误:

TemplateURL must reference a valid S3 object to which you have access

到目前为止我已经尝试添加...

{
    "Effect": "Allow",
    "Action": [
        "s3:GetObject"
    ],
    "Resource": [
        "arn:aws:s3:::my.s3bucket"
    ]
}

...到 myRole(作为 createStack() 上的 RoleARN 参数传入),以及链接到 lambda 本身的 IAM 执行角色。

然而,运气不好。

感谢任何指点。

您还需要添加 ListBucket 权限。

例如:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::BUCKET_NAME"]
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:GetObject"
      ],
      "Resource": ["arn:aws:s3:::BUCKET_NAME/*"]
    }
  ]
}