Amazon web services CloudFormation无权对资源执行:iam:PassRole
这是Cloud9中myAmazon web services CloudFormation无权对资源执行:iam:PassRole,amazon-web-services,aws-lambda,amazon-cloudformation,amazon-iam,Amazon Web Services,Aws Lambda,Amazon Cloudformation,Amazon Iam,这是Cloud9中mytemplate.yml代码的一部分: Type: 'AWS::Serverless::Function' Properties: Handler: index.handler Runtime: nodejs6.10 CodeUri: . Description: Updates records in the AppConfig table. MemorySize: 128 Timeout: 3 Role: 'arn:aws:iam::57991
template.yml
代码的一部分:
Type: 'AWS::Serverless::Function'
Properties:
Handler: index.handler
Runtime: nodejs6.10
CodeUri: .
Description: Updates records in the AppConfig table.
MemorySize: 128
Timeout: 3
Role: 'arn:aws:iam::579913947261:role/FnRole'
Events:
Api1:
Type: Api
Properties:
当我在Cloud9中提交更改时,在尝试ExecuteChangeSet
时,在CodePipeline部署阶段部署失败。我得到这个错误:
CloudFormation无权对资源执行:iam:PassRole
有人能帮忙吗?虽然我不能具体说明在您的情况下发生了什么,但错误消息表示CloudFormation用于部署资源的角色/用户没有适当的
iam:PassRole
权限
将角色分配给资源时使用iam:PassRole
权限。例如,当使用IAM角色启动Amazon EC2实例时,启动该实例的实体需要指定要使用的IAM角色的权限。这样做是为了防止用户获得过多的权限。例如,不应允许非管理用户启动具有管理角色的实例,因为这样他们就可以访问他们无权访问的其他权限
在模板的情况下,CloudFormation似乎正在创建一个函数,并且正在为该函数分配FnRole
权限。但是,尚未授予CloudFormation模板将此角色分配给函数的权限
启动CloudFormation模板时,它要么将资源提供给创建堆栈的用户,要么使用启动堆栈时指定的IAM角色。正是该用户/角色需要iam:PassRole
权限才能使用FnRole
用户:arn:aws:sts::156478935478:假定角色/CodeStarWorker AppConfig CloudFormation/AWSCloudFormation未被授权执行:iam:PassRole on resource:arn:aws:iam::156478935478:角色/服务角色/FnRole(服务:AWSLambda;状态代码:403;错误代码:AccessDeniedException;请求ID:129f601b-a425-11e8-9659-410b0cc8f4f9)
从该日志中,您可以知道需要为堆栈的CloudFormation角色分配什么策略(iam:PassRole
)(CodeStarWorker AppConfig CloudFormation
)
你应该:
- 转到
IAM>角色
- 键入搜索
CodeStarWorker AppConfig CloudFormation
- 打开该角色并转到
权限
- 查找
,展开它,转到CodeStarWorkerCloudFormation角色策略
编辑策略
- 在下面的参考资料部分中,添加您角色的ARN(
),如果您没有该部分,请复制并粘贴该部分,但在ARN:aws:iam::579913947261:role/FnRole
下使用您的ARNresources
{
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::156478935478:role/CodeStarWorker-AppConfig-Lambda",
"arn:aws:iam::579913947261:role/FnRole"
],
"Effect": "Allow"
}
如果要将该权限分配给所有资源(“资源”:“*”
),请在“操作”“添加要分配的权限”下找到以下部分和以上部分:
"Resource": "*",
"Effect": "Allow"
您可以将此应用于要为您的资源分配给CloudFormation的所有其他权限。如果您将角色名称从:
RoleName:'arn:aws:iam::579913947261:role/FnRole'
要包含CodeStar-${ProjectId}前缀,则可以创建/更新/etc角色,而无需修改CodeStarWorker AppConfig CloudFormation
角色的IAM策略。例如
RoleName:!Sub'CodeStar-${ProjectId}-[FunctionName]”
我在这里发布了一个完整的解释:使我们能够减少人们如何与AWS相处的复杂性 必须更新策略Json中的操作部分
"iam:PassRole"
应添加到策略文件中的操作块括号中。谢谢您提供的信息。对不起,我应该发布更多的日志信息。用户:arn:aws:sts::156478935478:假定角色/CodeStarWorker AppConfig CloudFormation/AWSCloudFormation未被授权执行:iam:PassRole on resource:arn:aws:iam::156478935478:角色/服务角色/FnRole(服务:AWSLambda;状态代码:403;错误代码:AccessDeniedException;请求ID:129f601b-a425-11e8-9659-410b0cc8f4f9)我知道我需要向CloudFormation授予许可,但我不知道怎么做,也不知道在哪里做。@John Rotenstein答案准确且解释得很好。感谢您帮助格式化答案@John Rotenstein,并希望我能将您的答案标记为有用,但我需要有15个声誉。您回答自己的问题不会获得声誉。这就是堆栈溢出的工作原理。对于@SecondOfTwo的答案,这里有一个小问题,如果它是AWS管理的策略,您不能编辑它,这通常是使用codepipeline的情况。只需创建一个附加到角色的新策略。