从WSO2到AWS API Gateway:联邦API部署实战指南

本文详细介绍了如何将WSO2 API管理器与AWS API网关集成,实现联邦API管理架构。包含IAM配置、Lambda授权器设置、安全策略实施等完整技术流程,帮助企业在混合云环境中实现集中治理与分布式执行。

联邦API管理:从WSO2部署API到AWS API网关

随着企业的发展和壮大,组织越来越多地在多云环境(如云、本地和边缘)中运营API。在这种设置中,联邦API网关部署已成为一种强大的架构模式。这种方法将控制平面与运行时网关分离,实现集中式API治理,同时允许API在更接近用户或服务的位置运行,以提高性能和弹性。

这种架构的核心思想是:

  • 集中式API管理:在一个地方(如WSO2 API管理器)定义、版本控制、保护和监控API
  • 分布式API网关:跨多个运行时网关部署API,如云原生网关(如AWS API网关)、区域边缘节点或Kubernetes集群

这种模式不仅减少了延迟,还提高了跨团队或业务单元的可用性和运营独立性。

为什么选择联邦网关?

  • 性能:流量路由到最近或最优的网关
  • 弹性:一个网关的故障不会影响其他网关
  • 治理:策略和生命周期在异构环境中集中执行
  • 云灵活性:API可以在AWS、Azure、本地或混合/多云设置中运行

有多种方法可以实现联邦API架构。开源API管理解决方案(如WSO2 API管理器)使这种模式更加易于访问和扩展。在本文中,我们将逐步介绍一个实际实现:如何使用WSO2 API管理器将API部署联邦到AWS API网关。

WSO2 API管理器作为控制平面,AWS API网关作为联邦网关

AWS API网关是一项完全托管服务,使开发人员能够创建、部署、管理和保护任何规模的API。WSO2 API管理器预装了内置的AWS网关连接器,使用该连接器能够将使用WSO2 API管理器创建的API部署/取消部署到AWS API网关。

图1:与AWS API网关的网关联邦

上图说明了联邦API管理架构,其中一个或多个WSO2 API管理器控制平面可以作为集中点来设计、发布和管理API。这些API随后部署到多个联邦网关,包括:

  • AWS API网关(用于基于云的部署)
  • 不同区域的WSO2网关(用于区域或本地部署)

该设置实现了集中治理与分布式执行,提高了混合环境中的性能、容错能力和部署灵活性。

了解AWS中API网关的身份和访问管理(IAM)

在AWS生态系统中,IAM在以下方面发挥着关键作用:

  • API请求的授权:IAM允许对谁可以在API中执行特定操作进行细粒度控制
  • 对API调用者的控制:通过利用IAM,可以精确定义哪些用户、应用程序或服务有权调用API
  • API管理:IAM还扩展到管理谁可以在AWS API网关中配置、部署或修改API

为了促进API的管理和部署到AWS API网关,必须通过创建和分配IAM用户或角色来配置访问权限。

在AWS API网关中设置用户

  1. 登录AWS账户并导航到控制台主页
  2. 在搜索栏中搜索"IAM"
  3. 点击IAM服务,导航到访问管理下的用户
  4. 点击创建用户并输入用户名
  5. 点击下一步
  6. 在选择权限选项卡下选择"直接附加策略"
  7. 搜索AmazonAPIGatewayAdministrator权限并选择它
  8. 点击下一步,然后点击创建用户
  9. 从列表中点击创建的用户,转到安全凭据选项卡
  10. 导航到访问密钥,点击创建访问密钥
  11. 选择第三方服务作为用例,勾选确认,点击下一步
  12. 点击创建访问密钥,复制访问密钥和秘密访问密钥的值以备后用

在WSO2 API管理器中注册AWS API网关作为联邦网关

  1. 启动WSO2 API控制平面
  2. 通过https://localhost:9444/admin登录管理门户
  3. 导航到网关部分,点击添加网关环境
  4. 选择网关类型为AWS,并在相应字段中提供相关详细信息
  5. 提供从上一步AWS门户获得的访问密钥和秘密访问密钥
  6. 点击添加保存详细信息

创建和设计示例API

  1. 通过https://localhost:9444/publisher登录发布者门户
  2. 点击创建API,然后导航到REST API部分,点击从零开始
  3. 填写详细信息并提供有效的端点URL
  4. 选择AWS网关作为网关类型
  5. 点击创建和发布

已部署API的AWS网关访问URL可以在部署页面中访问。

通过Lambda授权器在AWS中实现OAuth 2.0安全性

您可以实现Lambda授权器来处理来自外部身份提供商(如Okta、Auth0、Azure AD)的OAuth 2.0令牌。Lambda授权器在AWS API网关中充当看门人。它使用自定义Lambda函数来验证传入的OAuth 2.0承载者令牌(通常是由您选择的身份提供商颁发的JWT)。

OAuth 2.0安全策略将Lambda ARN和Lambda调用角色ARN作为参数,此信息将用于在AWS API网关配置Lambda授权器。

主要步骤包括:

  1. 客户端与身份提供商进行身份验证
  2. 客户端将包含令牌的请求发送到API网关端点
  3. API网关触发Lambda授权器验证令牌
  4. Lambda验证令牌并返回授予或拒绝访问的IAM策略
  5. 授予或拒绝访问

图2:使用令牌调用API并接收响应的流程图

配置第三方密钥管理器

为了为创建的API启用安全性,您需要首先配置在云环境中运行的第三方密钥管理器。

为API配置安全性

接下来的步骤需要授予在"在AWS API网关中设置用户"步骤中创建的IAM用户额外权限。

要授予所需权限,请导航到IAM -> 用户 -> apim-aws-gw-test-user -> 权限,并将AWSLambda_FullAccess权限附加给用户。

在AWS中,sts:AssumeRole操作允许用户或服务临时获取与IAM角色关联的权限。将以下自定义策略附加到用户以允许sts:AssumeRole操作。

在AWS中配置Lambda函数以验证令牌

配置AWS中的Lambda函数,以验证从身份提供商生成的令牌。按照以下步骤在AWS端设置和创建函数:

  1. 下载index.mjs文件并本地保存到lambda-authorizer文件夹
  2. 更新index.mjs文件中密钥客户端的’jwksUri’字段
  3. 导航到’lambda-authorizer’文件夹并执行命令安装所需的节点模块
  4. 创建包含项目文件夹内容的.zip文件
  5. 转到AWS账户的函数页面,点击创建函数
  6. 提供详细信息并点击创建函数
  7. 点击上传,从下拉菜单中选择.zip文件选项
  8. 点击上传并提供上面生成的zip文件
  9. 点击保存,点击部署在AWS API网关中部署lambda-authorizer函数

在AWS IAM中,为Lambda函数配置执行角色。在AWS控制台中导航到IAM > 角色,并使用以下详细信息创建新角色:

  • 可信实体类型:AWS服务
  • 用例:Lambda

在添加权限阶段,附加AWSLambdaRole权限。如果希望为Lambda函数启用CloudWatch日志,还可以附加AWSLambdaBasicExecutionRole。

在WSO2 API发布者门户中配置安全策略

  1. 在WSO2 API发布者门户中,导航到先前步骤中创建的SampleAPI的策略部分,进入API级策略选项卡
  2. 从请求策略选项卡附加AWS OAuth策略
  3. 获取Lambda函数的ARN和上面创建的执行角色的ARN
  4. 在AWS OAuth策略中提供ARN值并将其附加到API
  5. 点击保存并部署

调用启用安全的API

您现在已将启用安全的API部署到AWS API网关。作为下一步,让我们从Auth0获取令牌并通过WSO2开发者门户调用API。

对于部署到AWS API网关的API,不需要订阅。

通过https://localhost:9444/devportal登录开发者门户,您可以看到已部署的示例API。

您可以从开发者门户创建新应用程序,并为Auth0密钥管理器生成密钥。然后您可以生成令牌并将其复制到剪贴板。

将生成的令牌粘贴到上面创建的SampleAPI的API控制台选项卡中。

调用API并观察响应。

结论

将API部署到WSO2中的联邦网关使组织能够运营分布式、可扩展且符合策略的API管理架构。联邦网关部署促进了敏捷性、容错性和大规模策略执行,使其成为具有复杂API生态系统的现代企业的理想方法。当正确配置时,联邦网关部署在本地执行和全局控制之间取得了平衡,确保了运营灵活性和战略治理。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计