我想将多租户 SaaS 的 AWS 资源分离到 AWS 组织下的单独账户中。
- 我有多个 OU,按功能拆分,例如日志、审计、计算。 我将拥有与每个 OU 关联的 SCP。
- 每个租户在每个 OU 下都有一个帐户,这意味着当我添加新租户时,每个帐户都将继承该 OU 的相应 SCP。
为了使开发人员能够构建平台并能够调试正在运行的系统,我想使用中心辐射型方法使用联合 IdP 进行访问控制,类似于此处描述的:https://segment.com/blog/secure-access-to-100-aws-accounts/。
具体来说,我将有一个identity
帐户,该帐户将绑定到Okta。 用户将在此帐户中进行身份验证,然后使用sts:assume-role
升级到其他帐户中的角色。 请注意,我想要一个单独的identity
账户,而不是让用户对组织中的master
账户进行身份验证(因此在组织内,我们有master
和identity
账户,以及每个账户都有各自账户的 OU(。
为了以编程方式创建新租户,我需要创建租户的帐户并将其放置在正确的 OU 中,因此需要在master
帐户中执行此操作。 为此,我可以在master
账户中创建一个角色,并让开发人员从identity
账户代入该角色。
如何在新帐户中创建开发人员可以从identity
帐户代入的角色? 成员账户具有一个名为OrganizationAccountAccessRole
自动创建的角色(有关详细信息,请参阅此处(,但该角色设置为只能从主账户访问,并且它允许访问该账户中的所有内容。 如何使identity
帐户中的开发人员能够以编程方式创建新帐户及其中的角色,而无需授予此类全能权限(他们执行此任务的权限不应超过必要的权限(。 我认为我不能从identity
账户中担任master
账户中的角色,然后在第三个账户中进一步担任角色?
编辑:我真的只对解决实现我所描述的解决方案所需的步骤/配置的答案感兴趣。
Cloudformation StackSets解决了这个问题。
基本上,步骤是:
-
在有权部署资源且与父账户(您要从中部署(的角色具有信任关系的子账户中设置角色
-
在父账户中创建堆栈集,并将 Cloudformation 模板部署到其中到选定的账户或组织单位 (OU( 或整个组织
StackSet 支持 AWS Organizations ,因此您可以选择 OU 而不是选择单个账户。
我建议一个优雅的解决方案是使用 AWS 服务目录产品,该产品允许您创建和管理已批准用于您的 AWS 环境的服务目录。 事实上,可以自定义此 AWS 博客文章中描述的设置以实现您想要的设置。 它提供了一个创建账户生成器产品的示例,当最终用户启动该产品时,该产品使用 AWS Lambda 脚本执行以下操作:
- 预置 AWS 成员账户
- 代入帐户的组织角色
- 使用 CloudFormation 模板自定义账户(在您的情况下,创建其他 IAM 角色(
您可以进一步自定义它,甚至在完成后删除组织角色帐户。
提供了 Lambda 函数的源代码以及 CloudFormation 模板,您可以对其进行调整以生成您正在寻找的确切行为。
希望这有帮助。