用户无权执行: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/*
我已经创建了一个用户并授予该用户以下权限。
- AWSLambdaFullAccess
- AmazonS3FullAccess
- CloudFrontFullAccess
- 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": "*"
}
]
}
创建以下策略:
- 单击策略 -> 创建策略
- 在 Select 服务下 - 输入 EKS & Select 'EKS'
- 根据操作:Select 'All EKS Actions'
- 在资源下:select 'All resources' 或添加 ARN
- 点击审查政策
- 键入策略名称并创建策略。
现在,将此策略关联到用户帐户。
这应该可以解决问题并且您应该能够创建堆栈。
如果您有多个 AWS 配置文件,请尝试明确
export AWS_ACCESS_KEY_ID=<value>
export AWS_SECRET_ACCESS_KEY=<value>
在尝试之前
serverless deploy
我通过在 AWS 控制台中为用户添加权限解决了这个问题:
- 转到 AWS 控制台
- 查找您正在使用其凭据的用户 IAM > 访问管理 > 用户
- 权限 > 'Add Permissions' > 'Attach existing policies directly'
- 搜索并 select 'AWSCloudFormationFullAccess'
仅供其他人参考,以防 s/he 搜索问题并到达此处:
确保您删除了该 IAM 用户的权限边界。
如果您发现您已授予 cloudformation 对 IAM 用户的完全访问权限,但仍然收到相同的错误声明 User is not authorized to perform: cloudformation:CreateStack
,则它被权限边界拒绝。
根据 this comment
,我启用了 MFA 并且必须使用 MFA 代码获取临时凭证才能让 AWS SAM 工作
我正在尝试 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/*
我已经创建了一个用户并授予该用户以下权限。
- AWSLambdaFullAccess
- AmazonS3FullAccess
- CloudFrontFullAccess
- 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": "*"
}
]
}
创建以下策略:
- 单击策略 -> 创建策略
- 在 Select 服务下 - 输入 EKS & Select 'EKS'
- 根据操作:Select 'All EKS Actions'
- 在资源下:select 'All resources' 或添加 ARN
- 点击审查政策
- 键入策略名称并创建策略。
现在,将此策略关联到用户帐户。 这应该可以解决问题并且您应该能够创建堆栈。
如果您有多个 AWS 配置文件,请尝试明确
export AWS_ACCESS_KEY_ID=<value>
export AWS_SECRET_ACCESS_KEY=<value>
在尝试之前
serverless deploy
我通过在 AWS 控制台中为用户添加权限解决了这个问题:
- 转到 AWS 控制台
- 查找您正在使用其凭据的用户 IAM > 访问管理 > 用户
- 权限 > 'Add Permissions' > 'Attach existing policies directly'
- 搜索并 select 'AWSCloudFormationFullAccess'
仅供其他人参考,以防 s/he 搜索问题并到达此处:
确保您删除了该 IAM 用户的权限边界。
如果您发现您已授予 cloudformation 对 IAM 用户的完全访问权限,但仍然收到相同的错误声明 User is not authorized to perform: cloudformation:CreateStack
,则它被权限边界拒绝。
根据 this comment
,我启用了 MFA 并且必须使用 MFA 代码获取临时凭证才能让 AWS SAM 工作