用户未被授权执行:cloudformation:CreateStack。

88

我正在尝试使用Serverless创建 AWS Lambdas,并在使用命令serverless project create创建项目时遇到以下错误。

AccessDenied: User: arn:aws:iam::XXXXXXXXX:user/XXXXXXXXX is not authorized to perform: cloudformation:CreateStack on resource: arn:aws:cloudformation:us-east-1:XXXXXXXXX:stack/XXXXXXXXX-development-r/*

我已经创建了一个用户并授予了以下权限:

  1. AWSLambdaFullAccess
  2. AmazonS3FullAccess
  3. CloudFrontFullAccess
  4. AWSCloudFormationReadOnlyAccess(没有 AWSCloudFormationFullAccess 权限可以授予)

我该如何继续?还需要授予哪些其他权限?


4
截至2019年7月26日,现在有一个名为AWSCloudFormationFullAccess的策略。 - a2k42
11个回答

106

您提到的最接近的是AWSCloudFormationReadOnlyAccess,但显然这是只读的,而您需要cloudformation:CreateStack。请将以下内容作为用户策略添加。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1449904348000",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStack"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

完全有可能您需要更多的权限,例如启动 EC2 实例、(重新)配置安全组等。


2
我如何授予 cloudformation:CreateStack 权限?我正在使用 AWS UI 而不是 CLI。 - Milindu Sanoj Kumarage
8
你需要将我给出的文本作为自定义用户策略粘贴进去。 - tedder42
1
您可以使用AWS策略生成器来生成这个具体的策略或任何其他策略。 - Centurion
5
我觉得很奇怪,他们的拖放用户界面中没有提供这个选项。谢谢。 - givanse
1
我按照您的指示添加了内联策略,但现在当我尝试运行describe-stacks时,出现了类似的错误。我该如何修改此策略以允许describe-stacks? - pixelwiz
显示剩余3条评论

38

和 @tedder42 说的一样,但我还得在我的组策略中添加以下内容,才能从 Visual Studio 内部部署到 Lambda。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1449904348000",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStack",
                "cloudformation:CreateChangeSet",
                "cloudformation:ListStacks",
                "cloudformation:UpdateStack",
                "cloudformation:DescribeChangeSet",
                "cloudformation:ExecuteChangeSet"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

5
如果您计划执行“serverless info”,则还需要cloudformation:DescribeStacks - pdeschen
8
这个答案应该被点赞并且+1给@pdeschen,因为如果你正在尝试使用serverless进行部署,还需要添加cloudformation:DescribeStacks。我还不得不添加cloudformation:DescribeStackResourcecloudformation:ValidateTemplate - hummmingbear
我还添加了以下两个操作: cloudformation:DescribeStackEvents cloudformation:DeleteStack 因为我需要允许我的用户删除这些堆栈。 - GhostCode

8

根据我的最近经验,所需的政策是

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1449904348000",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStack",
                "cloudformation:CreateChangeSet",
                "cloudformation:ListStacks",
                "cloudformation:UpdateStack",
                "cloudformation:DescribeStacks",
                "cloudformation:DescribeStackResource",
                "cloudformation:DescribeStackEvents",
                "cloudformation:ValidateTemplate",
                "cloudformation:DescribeChangeSet",
                "cloudformation:ExecuteChangeSet"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

6

我无法使上面显示的较短版本起作用;对我有用的是稍微扩展 @mancvso 的答案,添加 "cloudformation:GetTemplateSummary"

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1449904348000",
            "Effect": "Allow",
            "Action": [
                "cloudformation:CreateStack",
                "cloudformation:CreateChangeSet",
                "cloudformation:ListStacks",
                "cloudformation:UpdateStack",
                "cloudformation:DescribeStacks",
                "cloudformation:DescribeStackResource",
                "cloudformation:DescribeStackEvents",
                "cloudformation:ValidateTemplate",
                "cloudformation:DescribeChangeSet",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:GetTemplateSummary"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

1
如果您能提及差异,那将更有帮助。仅获取模板摘要? - Faheem
1
非常有用。谢谢。 - Mayur

4
我通过在AWS控制台中向用户添加权限来解决了这个问题:
  1. 进入AWS控制台
  2. 找到您正在使用的凭据的用户 IAM > 访问管理 > 用户
  3. 权限 > '添加权限' > '直接附加现有策略'
  4. 搜索并选择 'AWSCloudFormationFullAccess'

最简单的答案。与上述内容完全相同,但非常简洁。 - 128KB
在CLI上解决问题之前,我必须等待一分钟才能添加策略。 - Michael Schmid

4
如果您有多个AWS配置文件,请尝试明确指定。
export AWS_ACCESS_KEY_ID=<value>
export AWS_SECRET_ACCESS_KEY=<value>

尝试之前

serverless deploy

1
这是最快的解决方案! - Zameer Ansari

2

以下供其他人参考,以防他们搜索此问题并到达此处:

确保您已删除该 IAM 用户的权限边界。

如果您发现已向 IAM 用户授予了 CloudFormation 的完全访问权限,但仍收到相同错误 User is not authorized to perform: cloudformation:CreateStack,则是被权限边界拒绝了。

enter image description here


1
感谢您,请前往https://console.aws.amazon.com/iam/home?region=us-west-1#/roles并输入AWSAmplifyExecutionRole-xxxxx,然后单击“附加策略”按钮,搜索“AWSCloudFormationFullAccess”,并将此权限添加到Amplify角色中。 - diyism

1
创建以下策略:
  1. 点击“策略” -> “创建策略”
  2. 在“选择服务”下选择EKS类型并选择“EKS”
  3. 在“操作”下选择“所有EKS操作”
  4. 在“资源”下选择“所有资源”或添加ARN
  5. 点击“审核策略”
  6. 输入策略名称并创建策略。
现在,将此策略关联到用户帐户。这应该解决问题,您应该能够创建堆栈。

1
这两个帮助我跨越了界线...
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "apigateway:*",
            "Resource": "*"
        }
    ]
}

并且

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "cloudformation:ListStacks",
                "cloudformation:DescribeStackEvents",
                "cloudformation:CreateStack",
                "cloudformation:UpdateStack",
                "cloudformation:DescribeStackResource",
                "cloudformation:CreateChangeSet",
                "cloudformation:DescribeChangeSet",
                "cloudformation:ExecuteChangeSet",
                "cloudformation:ValidateTemplate"
            ],
            "Resource": "*"
        }
    ]
}

0

随着AWS的最新更新,以下内联策略也将起作用。

{
   "Version": "2012-10-17",
   "Statement": [
       {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "cloudformation:DeleteStack"
            ],
            "Resource": "*"
        }
    ]
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接