ARN роли, которая автоматически создается с помощью лямбда-функции - PullRequest
1 голос
/ 03 мая 2020

В шаблоне SAM, есть ли способ ссылаться на ARN роли, которая автоматически создается с помощью функции Lambda?

Мне нужно было бы использовать этот 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

Ответы [ 3 ]

2 голосов
/ 03 мая 2020

Я думаю, что вы делаете отдельно от сборки Ресурса Роли.

Тогда вы можете использовать! Ref Role везде, где вам это нужно, в том числе и в вашей лямбда-роли.

0 голосов
/ 09 мая 2020

Что-то вроде ...

# 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 добавляет для этой функции предполагаемую роль по умолчанию.

На основании этого вы, возможно, захотите еще немного изучить это свойство , Я новичок в AWS SAM, но должен быть способ подключить к нему "arn: aws: iam :: aws: policy / AmazonS3FullAccess". :)

Надеюсь, что это поможет всем

документация ссылка: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/sam-resource-function.html#sam -функция-предположитьролеполитический документ

0 голосов
/ 03 мая 2020

Вы можете построить АРН роли самостоятельно. Он имеет фиксированный формат. From docs :

Если роль не указана, для вас создается логический идентификатор function-logic-idRole .

Например, используя Sub:

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

, где function-logical-id - логический идентификатор вашей лямбда-функции.

...