如何使用 AWS Control Tower,但忽略 AWS SSO 功能而支持自定义 ADFS 方法?

Posted

技术标签:

【中文标题】如何使用 AWS Control Tower,但忽略 AWS SSO 功能而支持自定义 ADFS 方法?【英文标题】:How do I use AWS Control Tower but ignore the AWS SSO feature in favor of a custom ADFS approach? 【发布时间】:2020-10-23 16:57:53 【问题描述】:

目标:使用 AWS Control Tower 的所有功能除了 AWS SSO,因为我正在与之合作的组织不想改变身份管理的任何方面和单点登录。

目前,该组织在其数据中心中使用 ADFS 进行 SSO 和 MFA,并具有一些自动化和流程来使用该身份解决方案设置新的 AWS 账户。

我不在乎这种与 ADFS 的集成是否会在创建新帐户时触发自动运行,因为该组织还没有达到那种级别的身份自动化,而且我们的目标不是改变它。

AWS Control Tower FAQs 建议您使用着陆区解决方案代替控制塔,如果您需要更自定义的方法:

虽然 Control Tower 使用预配置的蓝图(例如,用于目录和访问的 AWS SSO)自动创建新的登陆区,但 AWS Landing Zone 解决方案通过自定义添加提供了具有丰富自定义选项的登陆区的可配置设置 - ons(例如,Active Directory、Okta Directory)以及通过代码部署和配置管道进行的持续修改。

登陆区方法的 CloudFormation 模板和指南在这里:

CloudFormation 登陆区启动模板: https://s3.amazonaws.com/solutions-reference/aws-landing-zone/latest/aws-landing-zone-initiation.template AWS 登陆区开发者指南: https://s3.amazonaws.com/solutions-reference/aws-landing-zone/latest/aws-landing-zone-developer-guide.pdf AWS 登陆区实施指南: https://s3.amazonaws.com/solutions-reference/aws-landing-zone/latest/aws-landing-zone-implementation-guide.pdf AWS 登陆区用户指南: https://s3.amazonaws.com/solutions-reference/aws-landing-zone/latest/aws-landing-zone-user-guide.pdf

但我想要这一切:控制塔的易用性使用自定义身份方法。另外,该组织使用的是 Terraform,所以我不想介绍一堆 CloudFormation 模板,而 AWS Terraform Landing Zone Accelerator (TLZ) 尽管一年多前已经宣布,但尚未发布。

AWS Control Tower 的 Account Factory 要求您输入 AWS SSO 电子邮件地址,因此似乎无法绕过 AWS SSO 的某些使用,至少在初始设置或“帐户注册”期间是这样:

另一方面:由于组织使用 ADFS 进入 AWS,我无法通过切换角色访问由 AWS Control Tower 创建的帐户,该帐户由 Control Tower 创建的AWSControlTowerExecution 创建,因为我已登录到 Control通过联合的 Tower(主)帐户。

AWSControlTowerExecution 角色的信任关系中的委托人是主帐号。当您通过联合身份验证时,AWS 不会将您的委托人视为您已联合到的账户的一部分,因此 AWSControlTowerExecution角色不信任我,联合用户,可以这么说。)

【问题讨论】:

【参考方案1】:

您可以使用 AWS SSO 作为 Control Tower 的默认设置,包括 AWS SSO,使用 SSO 用户进入新账户并配置 ADFS,然后通过 AWS 服务控制策略 (SCP) 使 SSO 用户无用。

因此,在 Account Factory 中,按照要求输入 SSO 字段的电子邮件地址和名称。

如您所述,ControlTower 会自动在每个新帐户中创建一个角色,主帐户中的管理员无需额外配置即可切换到该角色。

但是,由于您是通过联合身份进入主帐户的,因此您可以通过接受通过电子邮件收到的 SSO 邀请来进入新帐户。

这将要求您创建一个密码,然后通过您可以在 Control Tower > 用户和访问 > 用户门户 URL 中找到的链接登录。

一旦您通过该 AWS SSO 登录进入新创建的账户,您就可以使用您组织的流程设置 ADFS。

一旦您确认 ADFS 集成有效并且您可以通过 ADFS 进入新账户,您可以通过添加以下 SCP 来拒绝您在账户设置期间使用的占位符 AWS SSO 用户的所有操作:


    "Version": "2012-10-17",
    "Statement": [
        
            "Sid": "DenyAWSSSOUser",
            "Effect": "Deny",
            "Action": "*",
            "Resource": "*",
            "Condition": 
                "ForAnyValue:StringLike": 
                    "aws:PrincipalArn": [
                        "*AWSReservedSSO*"
                    ]
                ​​​​​​
            ​​​​​​
        ​​​​​​
    ]
​​​​​​

SSO 用户仍可以登录该帐户,但无法执行或查看任何内容。

但是,为了简化此操作,您可能需要等到所有帐户都已创建后再添加此 SCP。这样,您可以先在 AWS Organizations 中为新账户创建 OU,然后将新账户移动到该 OU,最后将此 SCP 应用于整个 OU。

此 SCP 附件没有锁定您的风险,因为作为备份/紧急访问,您仍然可以在主账户中创建 IAM 用户并将角色切换到控制塔创建的账户。

【讨论】:

以上是关于如何使用 AWS Control Tower,但忽略 AWS SSO 功能而支持自定义 ADFS 方法?的主要内容,如果未能解决你的问题,请参考以下文章

AWS Control Tower 的新账户创建错误

AWS Elastic Beanstalk / S3 / CloudFront Cache-Control 标头

AWS CORS 没有“Access-Control-Allow-Origin”错误 [关闭]

AWS API Gateway 不存在“Access-Control-Allow-Origin”标头

AWS SAM:请求的资源响应中不存在“Access-Control-Allow-Origin”标头

aws-sdk 无法创建存储桶 请求的资源上不存在“Access-Control-Allow-Origin”标头