Укажите, какая учетная запись / пользователь может вызывать API с помощью SAM и API Gateway

#amazon-web-services #aws-lambda #aws-api-gateway #aws-sam

#amazon-веб-сервисы #aws-lambda #aws-api-gateway #aws-sam

Вопрос:

Я пытаюсь создать API Gateway, который вызывает лямбда-функцию с помощью SAM. Я хочу ограничить доступ к API таким образом, чтобы только определенные учетные записи / пользователи IAM могли получать доступ к API. Как мне это сделать? Я не смог найти правильный способ привязать политику доступа к ресурсам к конечной точке API в SAM.

Комментарии:

1. Я думаю, что вы хотите, чтобы в вашем AWS::Serverless::Function ресурсе вы хотели назначить Role пользователя IAM с соответствующими разрешениями. github.com/awslabs/serverless-application-model/blob/master /…

Ответ №1:

Вы можете указать в своем шаблоне SAM ресурс AWS::Serverless::Api, который настроен с помощью объекта Auth, который, в свою очередь, должен иметь AWS_IAM as DefaultAuthorizer . Другими словами, что-то вроде:

 Resources:

   ApiWithIamAuth:
    Type: AWS::Serverless::Api
    Properties:
      StageName: Prod
      Auth:
        DefaultAuthorizer: AWS_IAM
  

Далее вам нужно создать политику для ваших пользователей, чтобы они могли вызывать API. Управление доступом для вызова API предоставляет ссылку, примеры политики IAM для разрешений на выполнение API содержит два примера

 {
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "execute-api:Invoke"
      ],
      "Resource": [
        "arn:aws:execute-api:us-east-1:*:a123456789/test/POST/mydemoresource/*"
      ]
    }
  ]
}
  

и, наконец, Создайте и прикрепите политику к пользователю IAM, перечислены шаги, выполняемые вручную, чтобы связать политику с пользователем IAM, ролью IAM или группой IAM.

Ответ №2:

Как правило, вы можете ограничить доступ к своим API с помощью ролей IAM.

Однако SAM поддерживает только ограниченное число типов ресурсов, поэтому вместо этого вам придется использовать тип политики IAM CloudFormation.

Поскольку SAM — это всего лишь высокоуровневая абстракция CloudFormation, нет проблем использовать собственные типы ресурсов CloudFormation в вашем шаблоне SAM: https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/appendix-appendix-sam-templates-and-cf-templates.html