Amazon cloudformation 使用Lambda函数自动创建的角色的ARN
在SAM模板中,是否有方法引用使用Lambda函数自动创建的角色的ARN 我需要在模板中的其他地方使用ARNAmazon cloudformation 使用Lambda函数自动创建的角色的ARN,amazon-cloudformation,aws-sam,Amazon Cloudformation,Aws Sam,在SAM模板中,是否有方法引用使用Lambda函数自动创建的角色的ARN 我需要在模板中的其他地方使用ARN # this is the role Role: Type: AWS::IAM::Role Properties: RoleName: client-role AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effec
# this is the role
Role:
Type: AWS::IAM::Role
Properties:
RoleName: client-role
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
- Effect: Allow
Principal:
AWS: "arn:aws:iam::xxxx:role/xxxxxxx-ApiHandlerRole-12UWXALxxxxx"
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonS3FullAccess
# this is the lambda
ApiHandler:
Type: AWS::Serverless::Function
Properties:
FunctionName: api-handler
......
Policies:
- DynamoDBCrudPolicy:
TableName: !Ref Table
- S3ReadPolicy:
BucketName: !Ref Bucket
- S3WritePolicy:
BucketName: !Ref Bucket
- Version: "2012-10-17"
Statement:
- Effect: Allow
Action: sts:AssumeRole
Resource: !GetAtt Role.Arn
我认为您所做的是将角色的资源构建分开
那你就可以用这个了!在任何需要的地方引用角色,包括lambda角色。您可以自己构建角色的ARN。它有固定的格式。发件人: 如果未指定角色,将为您创建一个逻辑ID为function logical idRole的角色 例如,使用
Sub
:
!Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/function-logical-idRole"
其中,函数逻辑id
是lambda函数逻辑id。类似于
# this is the lambda
ApiHandler:
Type: AWS::Serverless::Function
Properties:
FunctionName: api-handler
Policies:
......
# this is the role
Role:
Type: AWS::IAM::Role
Properties:
RoleName: client-role
AssumeRolePolicyDocument:
Version: "2012-10-17"
Statement:
- Effect: Allow
Principal:
Service: lambda.amazonaws.com
Action: sts:AssumeRole
- Effect: Allow
Principal:
AWS: !GetAtt ApiHandlerRole.Arn
Action: sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AmazonS3FullAccess
假设您尚未为函数指定“AssumePolicyDocument”。
(以上代码基于pastebin),SAM cli将为您生成一个名为“ApiHandlerRole”的角色
从:
如果未指定此属性,AWS SAM将添加默认的假定角色
用于此功能
从外观上看,你可能想进一步探索这一特性。我是AWS SAM的新手,但必须有办法在这里插入“arn:AWS:iam::AWS:policy/AmazonS3FullAccess”。)
希望这对大家都有帮助
文档链接:解决方案: 所以,我今天碰到了这种情况 假设您的资源Lambda名为MyLambda,则使用
!Ref MyLambdaRole.Arn
经过考验,效果很好
工作原因:如果展开已处理的模板,IAM角色资源将使用以下术语命名
<lambda-logical-id>Role
角色
别忘了投票D你能给我们看一下你的例子吗?@petey我已经把相关的部分贴在这里了-我可能不得不走这条路,但情况似乎并非如此,因为在末尾似乎添加了一个额外的随机字符串:arn:aws:iam::xxxx:role/xxxxxxx-ApiHandlerRole-12uwxalxxx
!Sub
是野兽!通常情况下,保存一天,而不是今天。@t如果是这样,那么文档是不正确的。可能需要向AWS报告。