Как мне сослаться на роль, определенную в шаблоне SAM? - PullRequest
0 голосов
/ 16 июня 2019

Я новичок в шаблонах AWS SAM и хочу иметь возможность создавать роль с выбором политик, а затем ссылаться на эту роль для лямбда-функции. Тем не менее, я получаю следующую ошибку при попытке развернуть:

Значение 'MyRole' в 'role' не удовлетворяет ограничению: элемент должен соответствовать шаблону регулярного выражения: arn: (aws [a-zA-Z -] *) ?: iam :: \ d {12}: role / ? [A-Za-Z_0-9 + =. @ -_ /] +

В этом ответе упоминается, что я могу добавить политики непосредственно в функцию, но у меня будет много функций, которым нужны те же политики, так что это не очень СУХОЙ подход Роль IAM внутри шаблона SAM

Это проблема, которую я не могу использовать! GetAtt для вновь созданной роли?

Вот как выглядит мой template.yml:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  OMW Backend Services

Globals:
  Function:
    Timeout: 3

Resources:

  MyRole:
    Type: AWS::IAM::Role
    Properties:
      ManagedPolicyArns:
        - 'arn:aws:iam::aws:policy/service-role/AmazonRDSFullAccess'
        - 'arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - 'lambda.amazonaws.com'
            Action:
              - 'sts:AssumeRole'
      Policies:       
          PolicyName: 'ParameterStoreDevParameterAccess'
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              -
                Effect: Allow
                Action:
                  - 'ssm:GetParameter*'
                Resource: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/dev/*'
        -
          PolicyName: 'ParameterStoreDevLambdaBasicExecution'
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              -
                Effect: Allow
                Action:
                  - 'logs:CreateLogGroup'
                  - 'logs:CreateLogStream'
                  - 'logs:PutLogEvents'
                Resource: '*'
        -
          PolicyName: 'ParameterStoreDevXRayAccess'
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              -
                Effect: Allow
                Action:
                  - 'xray:PutTraceSegments'
                  - 'xray:PutTelemetryRecords'
                Resource: '*'
  MyFunction:
    Type: AWS::Serverless::Function
      Tracing: Active
      CodeUri: functions/src/
      Handler: lookup.lambdaHandler
      Runtime: nodejs10.x
      Timeout: 10
      MemorySize: 256
      Role: !GetAtt MyRole.Arn
      Events:
        Lookup:
          Type: Api
          Properties:
            Path: /somePath/{id}
            Method: get            





1 Ответ

1 голос
/ 16 июня 2019

В определении лямбда-функции отсутствует тег Properties, а список политик отсутствует - для первой политики.

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Description: >
  OMW Backend Services

Globals:
  Function:
    Timeout: 3

Resources:

  MyRole:
    Type: AWS::IAM::Role
    Properties:
      ManagedPolicyArns:
        - 'arn:aws:iam::aws:policy/service-role/AmazonRDSFullAccess'
        - 'arn:aws:iam::aws:policy/service-role/AmazonAPIGatewayPushToCloudWatchLogs'
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          -
            Effect: Allow
            Principal:
              Service:
                - 'lambda.amazonaws.com'
            Action:
              - 'sts:AssumeRole'
      Policies:
        -
          PolicyName: 'ParameterStoreDevParameterAccess'
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              -
                Effect: Allow
                Action:
                  - 'ssm:GetParameter*'
                Resource: !Sub 'arn:aws:ssm:${AWS::Region}:${AWS::AccountId}:parameter/dev/*'
        -
          PolicyName: 'ParameterStoreDevLambdaBasicExecution'
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              -
                Effect: Allow
                Action:
                  - 'logs:CreateLogGroup'
                  - 'logs:CreateLogStream'
                  - 'logs:PutLogEvents'
                Resource: '*'
        -
          PolicyName: 'ParameterStoreDevXRayAccess'
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              -
                Effect: Allow
                Action:
                  - 'xray:PutTraceSegments'
                  - 'xray:PutTelemetryRecords'
                Resource: '*'
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      Tracing: Active
      CodeUri: functions/src/
      Handler: lookup.lambdaHandler
      Runtime: nodejs10.x
      Timeout: 10
      MemorySize: 256
      Role: !GetAtt MyRole.Arn
      Events:
        Lookup:
          Type: Api
          Properties:
            Path: /somePath/{id}
            Method: get
...