用Lambda函数自动创建的角色的ARN。

问题描述 投票:0回答:1

在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
amazon-cloudformation aws-sam
1个回答
2
投票

我想你要做的是将角色的资源构建分开。

然后你可以在任何需要的地方使用 !Ref Role,包括在你的lambda Role中。


0
投票

你可以自己构造角色的ARN。它有固定的格式。从 文件:

如果没有指定角色,则会为您创建一个逻辑ID为-的角色。功能-逻辑-idRole.

例如,使用 Sub:

!Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/function-logical-idRole"

其中 function-logical-id 是你的lambda函数的逻辑ID。


0
投票

就像...

# 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 "插入其中。)

希望能帮到大家

docs链接。https:/docs.aws.amazon.comserverless-application-modellatestdeveloperguidesam-resource-function.html#sam-function-assumerolepolicydocument。

© www.soinside.com 2019 - 2024. All rights reserved.