Amazon Marketplace 上的 SaaS 架构设计 ——如何支持跨多账户对接
为了给企业提供更加易用的应用层软件,越来越多的软件提供商推出了 SaaS 产品。亚马逊云科技 Amazon Marketplace 是一个提供甄选的数字化产品的平台,能够帮助 SaaS 厂商降低销售成本,触达更多的客户,是很多 SaaS 厂商的首选。
通过软件即服务(SaaS)产品,您部署了在亚马逊云科技提供的基础设施上的软件,并允许买家可以直接通过 Amazon Marketplace 来使用您的软件。您需要在您的软件中管理客户访问、账户创建、资源配置和账户管理。
📢 想要了解更多亚马逊云科技最新技术发布和实践创新,敬请关注 2021 亚马逊云科技中国峰会!点击图片报名吧~
在 Amazon Marketplace 中上架您基于 SaaS 模式的软件过程中,您需要与 Amazon Marketplace SaaS 提供的多个 API 进行对接,具体对接的方式您可以参考卖家指南。
卖家指南
https://docs.aws.amazon.com/marketplace/latest/userguide/saas-products.html
在您的 SaaS 中,建议您将与 Amazon Marketplace SaaS API 进行接口集成的部分作为独立模块进行研发和管理,并运行在您的亚马逊云科技账号中。
但因为商务上的诸多因素,很多 Amazon Marketplace 的卖家的亚马逊云科技账号与运行 SaaS 系统以及对接模块的亚马逊云科技账号并不是同一个账号,而 Amazon Marketplace SaaS API 调用的权限仅会对作为卖家的亚马逊云科技账号打开,那该如何在 SaaS 架构中安全的获取 Amazon Marketplace SaaS API 调用权限呢?
在这篇文章中,将介绍在多个亚马逊云科技账户中构建 Amazon Marketplace SaaS 的 API 对接的最佳实践!
概述
对于亚马逊云科技 Amazon Marketplace 中基于 SaaS 交付的产品中,有多种价格模型可以选择,因为本篇文章中只会涉及接口调用权限的内容,所以在下文中,将以基于订阅的价格模型作为举例。
对 SaaS 订阅的 API、ResolveCustomer 和 BatchMeterUsage 的调用必须由 Amazon Marketplace 卖家账户的凭证来进行权限的获取。这并代表着您的 SaaS 代码需要在 Amazon Marketplace 卖方账户中运行。在架构设计中,最好的方式是在一个单独的亚马逊云科技账户中管理您的生产代码,并使用跨账户角色和 sts:AssumeRole 来获得临时凭证,然后可以用来调用 Amazon Marketplace 的计量 API。
案例背景
在本文章的举例中,有两个亚马逊云科技的账户:
亚马逊云科技 Amazon Marketplace 卖家账户
这是您的企业在亚马逊云科技上注册为卖家的账户。API 调用必须从这个账户的相关权限验证后才能进行。
生产代码的亚马逊云科技账户
这是您的 SaaS 系统所运行的亚马逊云科技账户。
在最佳 SaaS on Amazon Marketplace 架构设计中,使用单一的账户还是多账户各有利弊,单一的亚马逊云科技账户作为 Amazon Marketplace 账户可以简化管理,并避免了客户在查看 ISV 的产品和服务时出现任何混淆。
但将卖方账户与产品账户分开意味着每个 SaaS 服务都可以有自己的亚马逊账户,这提供了一个良好的安全和管理边界。当一个卖家有多个产品时,可以使用多个亚马逊云科技账户来进一步分离各团队的环境。
使用不同的亚马逊云科技 Amazon Marketplace 卖家和生产账户的情况下,有 2 个亚马逊云科技账户在发挥作用。注册为 Amazon Marketplace 卖方的亚马逊云科技账户(Amazon Seller-Account)和生产代码所在的亚马逊云科技账户(Amazon SaaS-Account)。
SaaS 架构设计
卖家账户在 Amazon Marketplace 上进行了注册并上架了产品,所以该账户有调用计量 API 的权限。这时,卖家需要确认了该账户有调用 Amazon Marketplace API 权限后,在该账户创建一个 Amazon IAM 角色,在策略配置上允许访问计量 API,以及从生产账户来承接该角色的服务,具体承接角色的服务可以根据您的 Amazon Marketplace SaaS API 对接模块的部署方式来决定。
在本文章的例子中,卖方账户中的 Amazon IAM 角色被称为 saas-account-role。这有附加的 Amazon MarketplaceMeteringFullAccess 管理策略。
Amazon IAM 角色有一个信任关系,如下所示。
SaaS 应用程序以及与 Amazon Marketplace API 对接的模块部署在生产账户中。该账户没有权限来调用卖家账号上架的那款产品计量 API。在您的 SaaS 架构设计中,应该在这个账号中创建一个 Amazon IAM 角色以及策略,本文章中所举的例子中,与 Amazon Marketplace API 对接的模块部署在 Amazon EC2 实例中,这时您所创建的角色信任实体应该为 Amazon EC2,并在策略中授予 sts:AssumeRole 的权限,通过 Amazon EC2 实例配置文件将该角色附加到运行 SaaS Amazon Marketplace API 对接的模块的 Amazon EC2 实例。这为该实例提供了临时凭证,可用于签署对亚马逊云科技 API 调用的请求。这些临时凭证用于调用 sts:AssumeRole 方法,该方法从卖方账户返回临时凭证。这些都是用来调用 Amazon Marketplace 计量 API 的。
执行 sts:AssumeRole 命令所需的权限是。
为了使 SaaS 应用程序的 Amazon Marketplace API 对接的模块能够对 Amazon Marketplace 计量 API 进行调用,它必须能获取并承接卖家账户中的角色。这是通过调用 sts:AssumeRole 方法来完成的。如果成功的话,这个调用会返回临时凭证(秘密/访问密钥)。然后,这些凭证可以用来调用计量 API。
下面的代码片段显示了您如何调用 assume_role 函数来获得卖方账户的临时凭证,该片段为 Python 代码,其他语言的代码可以参考不同语言的 API 文档。
至此,您的应用程序模块初始化的客户端将会具备调用卖家账户的 Amazon Marketplace API 权限,您可以根据您卖家账户上架的产品 id,直接进行多个 API 的调用以完成与 Amazon Marketplace 的集成。
总结
该文章中说明了在 SaaS 架构设计中,如何在多账号的背景下安全的获得 Amazon Marketplace API 的权限并独立分离卖家账号与 SaaS 应用程序账号,请尽可能的避免直接在卖家账号中创建用户,并将用户的身份凭证以明文的方式永久的配置在您的应用程序中。
本篇作者
张明月
亚马逊云科技
合作伙伴解决方案架构师
评论