在SAM模板中,是否有办法引用用Lambda函数自动创建的角色的ARN?
我需要在模板的其他地方使用该ARN。
# 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
我想你要做的是将角色的资源构建分开。
然后你可以在任何需要的地方使用 !Ref Role,包括在你的lambda Role中。
你可以自己构造角色的ARN。它有固定的格式。从 文件:
如果没有指定角色,则会为您创建一个逻辑ID为-的角色。功能-逻辑-idRole.
例如,使用 Sub
:
!Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/function-logical-idRole"
其中 function-logical-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
假设你没有指定"AssumeRolePolicyDocument"为你的函数。(上面的代码是基于pastebin的),SAM cli会生成一个名为" "的角色。ApiHandlerRole"为你。
从 文件:
如果没有指定这个属性,AWS SAM会为这个函数添加一个默认的 assume role。
从外观上看,你可能想再探索一下这个属性。我是AWS SAM的新手,但一定有办法将 "arn:aws:iam::aws:policyAmazonS3FullAccess "插入其中。)
希望能帮到大家