亚马逊AWS官方博客

为AWS北京区管理控制台集成ADFS访问

原英文链接:http://blogs.aws.amazon.com/security/post/Tx71TWXXJ3UI14

在我们使用AWS的过程中, AWS IAM 是我们接触的第一个服务, 它具有强大的功能,可使您在AWS IAM中通过管理用户, 用户组, 策略, 角色, 证书, 密钥等来灵活而精确的控制对AWS 服务和资源的访问和权限. 同时在很多企业内部, 一般都已经部署了自己的用户管理及授权系统, 如何将AWS的用户管理及授权纳入现有系统则成为企业的想要解决的一个问题. 本文将介绍如何将企业内部Windows活动目录(Active Directory)和AWS通过ADFS(Active Directory Service) 进行集成, 从而实现在活动目录中管理用户对AWS服务和资源的访问和授权.

在AWS IAM中, 我们提供了对SAML的支持, 这个功能可以让我们可以和支持该标准的身份提供商进行联合从而实现单点登陆. 对于很多使用微软活动目录的企业, 我们可以使用Windows自带的ADFS进行和AWS IAM的集成.

工作原理:

在我们进行详细配置之前, 可以先看一下工作原理:

1.       首先用户访问和AWS做了集成的ADFS站点 (https://ADFS/adfs/ls/IdpInitiatedSignOn.aspx)

2.       用户在登陆页面输入用户名及密码, 提交以后ADFS将联系AD进行用户验证

3.       用户浏览器收到ADFS返回的SAML 断言

4.       用户浏览器将用户断言Post到AWS的Sign-in SAML终结点 (https://signin.amazonaws.cn/saml), Sign-in将调用AssumeRoleWithSAML API接口请求临时安全凭证并使用其构建管理控制台的登陆链接

5.       用户浏览器转向使用构建的登陆链接进行登陆

配置活动目录:

1.       在活动目录中及建立用户adfsuser, 邮件地址设为adfsuser@examplecom

2.       在活动目录中建立两个组AWSBJS-Admin, AWSBJS-ReadOnly, 这两个组会和AWS中新建的角色进行匹配

3.       将用户adfsuser添加到AWSBJS-Admin, AWSBJS-ReadOnly这两个组中

安装部署Active Directory Federation Service

我们可以参考如下的文档部署ADFS服务

https://technet.microsoft.com/en-us/library/dn486775.aspx

导出SAML Metadata Document

访问ADFS服务器并导出 SAML Metadata Document (将ADFS换成你ADFS服务器的名称)

https://ADFS/FederationMetadata/2007-06/FederationMetadata.xml

配置AWS

1.       登录 AWS管理控制台https://console.amazonaws.cn/

2.       在IAM服务中, 点击身份提供商, 选择SAML, 导入从ADFS服务器上导出的SAML Metadata

3.       记录下提供商ARN记录

4.       新建IAM 角色ADFSBJS-Admin和ADFSBJS-ReadOnly [注意选择 授予 SAML 提供商 Web 单点登录 (Web SSO) 访问权限, 这两个角色会和活动目录中的新建的用户组AWSBJS-Admin和AWSBJS-ReadOnly对应]

5.       记录各个角色的ARN

配置ADFS将AWS作为 信赖方信任

1.       打开ADFS管理界面, 选择信任关系-信赖方信任

2.       右键点击信赖方信任, 点击 添加信赖方信任

3.       点击 启动

4.       选择 导入有关在线或在本地网络发布的信赖方的数据, 在联合元数据地址栏输入以下地址,点击 下一步

https://signin.amazonaws.cn/static/saml-metadata.xml

5.       在 显示名称 中输入AWS China, 然后点击下一步

6.       选择 不配置多重身份验证, 点击 下一步:

7.       选择 允许所有用户访问此信赖方, 点击下一步

8.       点击下一步:

9.       点击 关闭

10.    点击 关闭, 并打开编辑声明规则

为AWS 信赖方信任 建立 声明规则

1.       在编辑声明规则中, 点击 添加规则

2.       选择 转化传入声明, 点击下一步

3.       声明规则名称使用 NameId, 传入声明类型 选择 Windows帐户名, 传出声明类型 选择 名称ID, 传出名称ID格式 选择 永久标识符, 点击完成

4.       再次点击 添加规则

5.       选择以声明方式发送LDAP特性, 点击 下一步

6.       声明规则名称 输入RoleSessionName, 特性存储选择 Active Directory, LDAP特性 选择 E-Mail-Address, 传出声明类型输入 https://aws.amazon.com/SAML/Attributes/RoleSessionName, 点击完成

7.       再次点击 添加规则

 

8.       选择 使用自定义规则发送声明, 点击 下一步

9.       声明规则名称输入 Get AD Groups, 自定义规则输入以下文本 (这一步用来取出登录用户所在的AD用户组, 并将其传入到临时声明 http://temp/variable中), 点击完成

c:[Type == “http://schemas.microsoft.com/ws/2008/06/identity/claims/windowsaccountname”, Issuer == “AD AUTHORITY”]

=> add(store = “Active Directory”, types = (“http://temp/variable”), query = “;tokenGroups;{0}”, param = c.Value);

10.    再次点击 添加规则

11.    选择 使用自定义规则发送声明, 点击下一步

12.    声明规则名称 输入 Roles, 自定义规则中输入以下文本 (这部分主要是用来映射AD中的用户组 和 AWS中的角色之间的对应关系, 其中红色部分需要根据我们前面所建的AD用户组名称 和 身份提供商的ARN和角色的ARN调整), 点击完成

c:[Type == “http://temp/variable”, Value =~ “(?i)^AWSBJS-“]

=> issue(Type = “https://aws.amazon.com/SAML/Attributes/Role”, Value = RegExReplace(c.Value, “AWSBJS-“, “arn:aws-cn:iam::761602622223:saml-provider/ADFS,arn:aws-cn:iam::761602622223:role/ADFSBJS-“));

13.    重新启动 Active Directory Federation Service

测试配置效果

1.       访问https://ADFS/adfs/ls/IdpInitiatedSignOn.aspx (将ADFS换成你ADFS服务器的名称)

2.       输入用户名和密码

3.       验证以后, 服务器将根据它所在的组返回它拥有的角色, 用户选择不同的角色就可以拿到不同角色的权限

4.       登录以后在右上角可以看到当前用户及其所使用的角色信息

总结:

上述是将ADFS和AWS管理控制台集成从而实现使用AD账号系统登录访问AWS管理控制台的详细流程. 同时我们还可以通过调整ADFS本身的身份验证策略来实现多重验证等功能.