原英文链接: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. 用户在登陆页面输入username及password, 提交以后ADFS将联系AD进行用户验证
3. 用户浏览器收到ADFS返回的SAML 断言
4. 用户浏览器将用户断言Post到AWS的Sign-in SAML终结点 (https://signin.amazonaws.cn/saml), Sign-in将调用AssumeRoleWithSAML API接口请求暂时安全凭证并使用其构建管理控制台的登陆链接
5. 用户浏览器转向使用构建的登陆链接进行登陆
配置活动文件夹:
1. 在活动文件夹中及建立用户adfsuser, 邮件地址设为[email protected]
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
訪问ADFSserver并导出 SAML Metadata Document (将ADFS换成你ADFSserver的名称)
https://ADFS/FederationMetadata/2007-06/FederationMetadata.xml
配置AWS
1. 登录 AWS管理控制台https://console.amazonaws.cn/
2. 在IAM服务中, 点击身份提供商, 选择SAML, 导入从ADFSserver上导出的SAML Metadata
3. 记录下提供商ARN记录
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
4. 新建IAM 角色ADFSBJS-Admin和ADFSBJS-ReadOnly [注意选择 授予 SAML 提供商 Web 单点登录 (Web SSO) 訪问权限, 这两个角色会和活动文件夹中的新建的用户组AWSBJS-Admin和AWSBJS-ReadOnly相应]
5. 记录各个角色的ARN
配置ADFS将AWS作为 信赖方信任
1. 打开ADFS管理界面, 选择信任关系-信赖方信任
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
2. 右键点击信赖方信任, 点击 加入信赖方信任
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
3. 点击 启动
4. 选择 导入有关在线或在本地网络公布的信赖方的数据, 在联合元数据地址栏输入下面地址,点击 下一步
https://signin.amazonaws.cn/static/saml-metadata.xml
5. 在 显示名称 中输入AWS China, 然后点击下一步
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
6. 选择 不配置多重身份验证, 点击 下一步:
7. 选择 同意全部用户訪问此信赖方, 点击下一步
8. 点击下一步:
9. 点击 关闭
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
10. 点击 关闭, 并打开编辑声明规则
为AWS 信赖方信任 建立 声明规则
1. 在编辑声明规则中, 点击 加入规则
2. 选择 转化传入声明, 点击下一步
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
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);
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
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换成你ADFSserver的名称)
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
2. 输入username和password
3. 验证以后, server将依据它所在的组返回它拥有的角色, 用户选择不同的角色就能够拿到不同角色的权限
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >
4. 登录以后在右上角能够看到当前用户及其所使用的角色信息
总结:
上述是将ADFS和AWS管理控制台集成从而实现使用AD账号系统登录訪问AWS管理控制台的具体流程. 同一时候我们还能够通过调整ADFS本身的身份验证策略来实现多重验证等功能.