AWS SAM AccessDeniedException на Lambda, использующей AWS SDK

У меня есть функция AWS Lambda в Node.js, которая использует метод SDK _ 1_.

Он создан на основе этого шаблона AWS SAM:

AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31
Globals:
  Function:
    Timeout: 3
Resources:
  special:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: 'my-project-special'
      CodeUri: ./handlers
      Handler: special.handler
      Runtime: nodejs10.x
  getLatest:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./handlers
      Handler: getLatest.handler
      Runtime: nodejs10.x
      Events:
        getLatest:
          Type: Api
          Properties:
            Path: /latest/
            Method: get

и обработчик вызывает SDK следующим образом:

const result = await lambda.listVersionsByFunction({
    FunctionName: 'my-project-special',
}).promise();

После развертывания и отправки запроса возникает AccessDeniedException ошибка:

Пользователь: arn: aws: sts :: 999999999: loaded-role / my-project-getLatest-ADFADSFASD / my-project-getLatest-HJLKHLKJKJ не авторизован для выполнения: lambda: ListVersionsByFunction на ресурсе: arn: aws: lambda: us- восток-2: 999999999: функция: мой-проект-специальный

Как я могу разрешить этот доступ с помощью шаблона AWS SAM?


person Ed I    schedule 12.11.2019    source источник


Ответы (1)


Ошибка указывает на то, что ваша лямбда не имеет разрешения на выполнение ListVersionsByFunctionоперации на других ресурсах (другой лямбда).

Что вам нужно сделать, так это создать настраиваемую политику и добавить ее в свой template.

getLatest:
    Type: AWS::Serverless::Function
    Properties:
      CodeUri: ./handlers
      Handler: getLatest.handler
      Runtime: nodejs10.x
      Policies:
         - Version: '2012-10-17'
           Statement:
             - Effect: Allow
               Action:
                 - lambda:ListVersionsByFunction
               Resource: '*'
      Events:
        getLatest:
          Type: Api
          Properties:
            Path: /latest/
            Method: get

См. ссылку

Или вы также можете добавить эту политику как inline policy в Консоль управления IAM, в разделе Роли выберите свою функцию getLatest и добавьте политику. см. снимок.

введите здесь описание изображения Надеюсь, это поможет

person Assael Azran    schedule 13.11.2019
comment
Прекрасный ответ на этот вопрос! - person Ed I; 13.11.2019