Безсерверная платформа AWS для кросс-аккаунта - PullRequest
0 голосов
/ 29 ноября 2018

Как настроить кросс-аккаунт собственного авторизатора с безсерверной структурой?Пользовательский авторизатор, настроенный на основе sls framework, отлично работает, если он находится в той же учетной записи AWS, что и функция, требующая авторизации.

Теперь у меня есть корневая учетная запись организации, в которой была развернута функция авторизации.На второй учетной записи, которая является членом организации, у меня развернута безсерверная служба с конечными точками, которые необходимо авторизовать от учетной записи root.

Возможно ли настроить что-то подобное внутри serverless.yml, который будет развернут на учетной записи участника (111111111111 - номер учетной записи root):

  hello:
    handler: api/hello.handler
    events:
     - http:
        path: hello
        method: get
        cors: true
        authorizer: arn:aws:lambda:eu-west-1:111111111111:function:authorizer

Я пробовал это и получил следующееошибка:

Произошла ошибка: AuthorizerApiGatewayAuthorizer - политика функции Lambda должна явно разрешить методу или настраиваемому авторизатору условие SourceArn для интеграции между учетными записями (Сервис: AmazonApiGateway; Код состояния: 400; Код ошибки: BadRequestException;

... что имеет смысл в соответствии с документами AWS . В этих документах объясняется, как это сделать вручную с помощью консоли API Gateway, что я и делал на данный момент.(Авторизатор в корне, Авторизатор в учетной записи участника - подключен вручную через шлюз API, как описано в документации).

Мне нужно лучшее решение, так как количество сервисов и учетных записей членов организации будет расти.

Можно ли настроитьи заставить это работать с безсерверным фреймворком?

1 Ответ

0 голосов
/ 30 ноября 2018

Как и в большинстве Serverless Framework, есть плагин для тех случаев, когда CloudFormation еще не предлагал опцию:

https://github.com/rschick/serverless-plugin-lambda-account-access

Пользовательский serverless.yml для авторизатора должен включать:

plugins:
  - serverless-plugin-lambda-account-access
provider:
  allowAccess:
    - 111111111111 # account id of invoking account
...