用户无权执行:cloudformation:CreateStack

User is not authorized to perform: cloudformation:CreateStack

我正在尝试 Serverless 创建 AWS Lambda,但在使用命令 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 授予)

我该如何进行?我还必须授予哪些权限?

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

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

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

@tedder42 说的,但我还必须将以下内容添加到我的组策略中,然后才能从内部部署到 lambda visual studio。

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

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

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

向您创建的用户授予 "administrator" 访问权限

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

{
    "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": [
                "*"
            ]
        }
    ]
}

我无法使用上面显示的较短版本;对我来说固定的事情是稍微扩展@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": [
                "*"
            ]
        }
    ]
}

有一个部分in the docs(至少现在)。

With a gist 显示他们推荐的政策 JSON。

这2位帮我过线...

{
    "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": "*"
        }
    ]
}

创建以下策略:

  1. 单击策略 -> 创建策略
  2. 在 Select 服务下 - 输入 EKS & Select 'EKS'
  3. 根据操作:Select 'All EKS Actions'
  4. 在资源下:select 'All resources' 或添加 ARN
  5. 点击审查政策
  6. 键入策略名称并创建策略。

现在,将此策略关联到用户帐户。 这应该可以解决问题并且您应该能够创建堆栈。

如果您有多个 AWS 配置文件,请尝试明确

export AWS_ACCESS_KEY_ID=<value>
export AWS_SECRET_ACCESS_KEY=<value>

在尝试之前

serverless deploy

我通过在 AWS 控制台中为用户添加权限解决了这个问题:

  1. 转到 AWS 控制台
  2. 查找您正在使用其凭据的用户 IAM > 访问管理 > 用户
  3. 权限 > 'Add Permissions' > 'Attach existing policies directly'
  4. 搜索并 select 'AWSCloudFormationFullAccess'

仅供其他人参考,以防 s/he 搜索问题并到达此处:

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

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

根据 this comment

,我启用了 MFA 并且必须使用 MFA 代码获取临时凭证才能让 AWS SAM 工作