AWS 多租户 ECAM 模型中,如何允许成员账户管理 SSO 用户权限

💡 本文所述所有 “SSO” 均指代 “AWS IAM Identity Center”

背景描述

下图展示了多租户 ECAM 模型的结构(End customer account model)

参考文档 —— AWS 合作伙伴如何确定组织中的 AWS 支持计划: How AWS Partners can determine AWS Support plans in an organization | AWS Cloud Operations & Migrations Blog

在多租户 ECAM 架构下,成员账户只能创建 SSO 账户实例。在 SSO 账户实例中,只能创建用户、用户组、应用程序。在账户实例中创建的用户只能访问特定的 SAML 2.0 或 OAuth 2.0 应用程序。

仅在 Payer 的 SSO 实例中可以进行 SSO 权限集 (PermissionSet) 的管理,允许 SSO 用户登录进 AWS 控制台,并通过 IAM Policy 限制其访问权限。

下图展示了 SSO 组织实例和账户实例的控制台的区别(左为组织实例,右为账户实例)

参考文档 —— IAM Identity Center 的账户实例: IAM身份中心的账户实例 - AWS IAM Identity Center

实现手段

参考文档 —— 在 AWS IAM Identity Center 中委托权限集管理和帐户分配: Delegating permission set management and account assignment in AWS IAM Identity Center | AWS Security Blog

在 Payer 中创建一个 IAM Policy,授予目标 IAM 实体对于 SSO、Organization 等的读取权限:

{
	"Version": "2012-10-17",
	"Statement": [
		{
			"Sid": "AWSSSOReadOnly",
			"Effect": "Allow",
			"Action": [
				"iam:ListPolicies",
				"organizations:DescribeOrganization",
				"organizations:DescribeAccount",
				"organizations:ListParents",
				"organizations:ListChildren",
				"organizations:ListAccounts",
				"organizations:ListRoots",
				"organizations:ListAccountsForParent",
				"organizations:ListOrganizationalUnitsForParent",
				"organizations:ListDelegatedAdministrators",
				"sso:Describe*",
				"sso:Get*",
				"sso:List*",
				"sso:Search*",
				"sso-directory:DescribeDirectory",
				"access-analyzer:ValidatePolicy",
				"signin:ListTrustedIdentityPropagationApplicationsForConsole"
			],
			"Resource": "*"
		},
		{
			"Sid": "PermissionSet",
			"Effect": "Allow",
			"Action": [
				"sso:CreatePermissionSet",
				"sso:DeletePermissionSet",
				"sso:ProvisionPermissionSet",
				"sso:AttachManagedPolicyToPermissionSet",
				"sso:AttachCustomerManagedPolicyReferenceToPermissionSet"
			],
			"Resource": "arn:aws:sso:::permissionSet/<ssoins-1234567abcdefg>/<ps-1234567abcdefg>"
		},
		{
			"Sid": "UserAndGroup",
			"Effect": "Allow",
			"Action": [
				"sso-directory:DescribeUsers",
				"sso-directory:DescribeUser",
				"sso-directory:SearchUsers",
				"sso-directory:CreateUser",
				"sso-directory:DeleteUser",
				"sso-directory:EnableUser",
				"sso-directory:DisableUser",
				"sso-directory:UpdateUser",
				"sso-directory:UpdateUserName",
				"sso-directory:UpdateMfaDeviceForUser",
				"sso-directory:DeleteMfaDeviceForUser",
				"sso-directory:ListGroupsForUser",
				"sso-directory:ListMfaDevicesForUser",
				"sso-directory:GetUserPoolInfo",
				"sso-directory:DescribeUserByUniqueAttribute",
				"sso-directory:DescribeGroups",
				"sso-directory:ListGroupsForMember",
				"sso-directory:SearchGroups",
				"sso-directory:CreateGroup",
				"sso-directory:DescribeGroup",
				"sso-directory:IsMemberInGroup",
				"sso-directory:ListMembersInGroup",
				"sso-directory:AddMemberToGroup",
				"sso-directory:DeleteGroup",
				"sso-directory:RemoveMemberFromGroup",
				"sso-directory:UpdateGroup",
				"sso-directory:UpdateGroupDisplayName"
			],
			"Resource": ""
		},
		{
			"Sid": "CreateAccountAssignment",
			"Effect": "Allow",
			"Action": [
				"sso:CreateAccountAssignment",
				"sso:DeleteAccountAssignment"
			],
			"Resource": [
				"arn:aws:sso:::instance/<ssoins-1234567abcdefg>",
				"arn:aws:sso:::permissionSet/<ssoins-1234567abcdefg>/*",
				"arn:aws:sso:::account/<linked-account-id>"
			]
		}
	]
}

在 Payer 中创建一个 IAM Role 给 LinkedAccount,并将刚才创建的 Policy 附加给 Role:

LinkedAccount 通过 SwitchRole 登陆进 Payer 的 AWS Console,他将可以实现以下操作:

  1. AWS SSO 只读操作 (AWSSSOReadOnly):

    • 列出 IAM 策略(对于权限集设置非常重要)
    • 查看组织结构和账户信息
    • 查看和搜索 SSO 相关信息
    • 描述 SSO 目录
    • 验证策略
    • 列出可信身份传播应用程序
  2. 权限集管理 (PermissionSet):

    • 创建、删除和配置权限集
    • 将托管策略和客户管理的策略附加到权限集

    此处可以根据实际需求,添加条件以限制这个 IAM 实体仅能更新某几个权限集。 但前提是需要先将权限集创建出来,才能拿到 arn 来限制更新权限集的范围。

  3. 用户和组管理 (UserAndGroup):

    • 创建、删除、启用、禁用和更新用户
    • 管理用户的MFA设备
    • 创建、删除和更新组
    • 管理组成员
    • 查看和搜索用户和组信息
  4. 账户分配管理 (CreateAccountAssignment):

    • 创建和删除账户分配(仅限于特定的 SSO 实例、权限集和链接账户)

方案限制

  • AWS 的 List 操作没办法使用 Resource/Condition 限制范围,因此带来以下问题:
    • 客户可以看到组织内所有 AWS Account 信息:
      • 名称
      • ID
      • ARN
      • 电子邮件
      • 加入时间
    • 如果有其他人在使用 Payer SSO,客户可以看到其他人的 SSO 用户/用户组/权限集
      • 无法限制客户仅对某几个 SSO 用户/用户组进行操作,因为 SSO 用户/用户组没有 arn 也不能打 tag,因此没办法使用 Resource/Condition 进行限制
        • 可以考虑移除 Policy 中 Delete/Update User/UserGroup 的操作,最大程度保证同时多家客户使用 Payer SSO 时的最低安全性
      • 可以使用 Resource 限制客户仅能更新某几个权限集:
        • 前提是必须先创建出权限集,再修改 IAM Policy
        • 所以创建权限集的操作必须由 Payer 的管理员先进行,再允许客户 Update 权限集

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值