无服务器框架 AWS 跨账户自定义授权方

Posted

技术标签:

【中文标题】无服务器框架 AWS 跨账户自定义授权方【英文标题】:Serverless framework AWS cross-account custom authorizer 【发布时间】:2019-05-01 12:38:12 【问题描述】:

如何使用无服务器框架设置跨账户自定义授权?如果使用 sls 框架配置的自定义授权器与需要授权的函数位于同一 AWS 账户中,则它可以正常工作。

我现在拥有的是已部署授权功能的组织根帐户。在作为组织成员的第二个帐户上,我部署了一个无服务器服务,其中包含需要从根帐户授权的端点。

是否可以在 serverless.yml 中配置类似这样的内容,将部署在成员帐户上(111111111111 是根帐号):

  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;错误代码: 错误请求异常;

...根据AWS docs,这是有道理的。这些文档解释了如何使用 API Gateway 控制台手动执行此操作,这正是我现在所做的(根中的授权者,成员帐户中的授权者 - 通过 API 网关手动连接,与文档中描述的相同)。

随着服务和组织成员帐户数量的增加,我需要一个更好的解决方案。

是否可以使用无服务器框架配置并使其工作?

【问题讨论】:

【参考方案1】:

与许多无服务器框架一样,在 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

【讨论】:

非常感谢!这并不能 100% 解决我的问题,因为我需要更新权限,或者在这种情况下,每次添加新帐户时都需要使用更新的提供程序部分重新部署根(重新部署是我想避免的事情),但给了我一个强烈的想法如何为我的用例继续和实施它。再次感谢您的帮助:) 不用担心 - 我不认为每次您添加新帐户时,您都不会不做某事,我担心。

以上是关于无服务器框架 AWS 跨账户自定义授权方的主要内容,如果未能解决你的问题,请参考以下文章

AWS API Gateway 自定义授权方有用吗?

如何使用无服务器部署没有身份源的 API Gateway 自定义授权方?

使用无服务器框架的 lambda AWS 中的授权代码授予

通过自定义授权方方法使用 Auth0 授权 AWS APIGateway

通过 AWS Lambda 和 Cognito 注册用户(无服务器架构)

AWS 自定义授权方 - 从 cookie 获取令牌