随着云计算的需求越来越强烈,客户需要高可用的身份管理系统来进行统一的身份管理、访问控制、鉴权和登录。
但在部分区域 (如北京、宁夏、香港) 尚未提供 Amazon Cognito User Pool 或 Amazon SSO 功能,客户无法进行身份管理;同时,客户对于身份管理系统运行在第三方网站存在安全顾虑,更不希望自己从头搭建一套身份管理系统,日后将面临运维的痛苦。
我们今天要介绍的方案,可以帮助客户在 Amazon Web Services 上把已经建立好的用户 (user) 或身份 (identity) 带上云端来使用,并兼顾安全与管理的便利,让客户加速创新进入市场。跟我一起来了解吧!
这套方案运用到的是一款名为Keycloak的软件
它是一款开源的身份与访问控制软件提供单点登录 (SSO) 功能,支持 OpenID Connect、 OAuth 2.0、SAML 2.0 标准协议。Keycloak 提供可自定义的用户界面,用于登录、注册和账户管理等。客户可将其集成到现有的 LDAP 和 Azure Active Directory 服务器中,还可以将身份验证委派给第三方身份提供商。
Keycloak支持OpenJDK、Docker、Kubernetes、Openshift等多种方式部署.
本文档主要指引如何在AWS EC2上通过OpenJDK部署单机模式的Keycloak软件;如您需要以高可用的集群模式部署KeyCloak,请联系我们。
配置Keycloak环境
01
Keycloak安装
· 安装JDK 1.8
sudo yum install -y java-1.8.O-openjdk java-1.8.0-openjdk-devel
· 下载Keycloak
wget
https://github.com/keycloak/keycloak/releases/download/15.0.2/keycloak-15.0.2.zip
02
Keycloak启动与配置
· 进入文件夹
cd keycloak-15.0.2/bin
· 添加管理员账号
./add-user-keycloak.sh -r master -u admin -p admin
-r 后为Keycloak的Realm名称(全小写),本篇都设置为master;
-u 后为管理员用户名,-p 后为管理员密码。
· 重启服务使管理员添加生效
./jboss-cli.sh --connect command=:reload
· 启动服务(默认只能本机访问,使用 0.0.0.0 允许外部访问)
./standalone.sh -b 0.0.0.0 -bmanagement 0.0.0.0
03
Https访问配置
· 默认Keycloak使用8080端口,但在下一个章节中获取IDP descriptor会需要Https访问,解决方案如下:
1. 配置ALB侦听443端口,后端目标组绑定8080,实现Https 443跳转Http 8080;
2. 在Route 53上配置一个域名,Alias记录到ALB;
3. 在ACM为该域名申请证书,并将证书绑定在ALB上。
04
访问Keycloak管理员界面
· 通过以下链接来访问您的Keycloak管理员界面:
http://<服务器IP或Domain>:8080/auth/admin
05
(可选)SSL配置
当完成了上述步骤,您可能发现无法登录Keycloak;或是在下一个章节中会出现不能正常获取IDP descriptor的问题;请完成这部分的可选步骤,关闭Keycloak的SSL以解决问题。
1. (可选)在LocalHost中使用管理员身份登陆
./kcadm.sh config credentials --server http://localhost:
8080/auth --realm master --user admin
2. (可选)管理员强制关闭SSL
./kcadm.sh update realms/master -s sslRequired=
NONE
3. (可选)重启服务
./jboss-cli.sh --connect command=:reload
配置AWS IAM
01
下载Keycloak的descriptorXML文件
· 访问以下链接,获取Keycloak的descriptor XML文件
https:///auth/realms//protocol/saml/descriptor
如遇到提示需要Https访问,请参阅上一章节的步骤3、步骤5!
02
创建AWS IAM 身份提供商
1.进入AWS IAM控制台,添加身份提供商,上传descriptor XML文件
2.保存下身份提供商的ARN
03
创建AWS IAM Role
1.进入AWS IAM控制台,
创建一个IAM Role,并授予所需的权限
2.保存下Role的ARN,之后会用到
配置Keycloak
01
配置Clients
1.下载AWS的saml-metadata.xml文件
https://signin.aws.amazon.com/static/saml-metadata.xml
2.新建Clients,上传xml文件,保存
3.配置 IDP Initiated SSO URL Name:amazon-aws
4.配置 Base URL:/auth/realms//protocol/saml/clients/amazon-aws
5.添加角色
角色名称,使用刚才保存下来的两个ARN,中间加英文逗号分隔:
<Role-ARN>,<Provider-ARN>
构建出来的Role Name形如:
arn:aws:iam::<账号ID>:role/<角色名称>,arn:aws:iam::<账号ID>:saml-provider/
6.在Scope中关闭Full Scope Allowed
7.重要:在Client的Mappers中添加三条(按照图上内容填写)
1)Session Role
https://aws.amazon.com/SAML/Attributes/Role
2)Session Name
https://aws.amazon.com/SAML/Attributes/RoleSessionName
3)Session Duration
https://aws.amazon.com/SAML/Attributes/SessionDuration
8.删除Client Scope的默认Scope
02
配置User、User Group
1.在Keycloak中创建用户、修改密码
2.创建用户组,该组中的用户将可以通过SSO登录AWS
3.为用户组配置角色映射
4.将用户加入组
访问测试
希望云小编的教程有帮助到你!
如果有技术性的问题,欢迎联系我们解决
• end •