OpenSearch Dashboard使用Okta SAML登录

使用SAML登录OpenSearch Dashboard有两种方式: SP-initiatedIdP-initiated authentication

  • Service provider (SP) initiated: 顾名思义,是从服务提供端来访问。访问Openserach Dashboard(https://my-domain.us-east-1.es.amazonaws.com/_dashboards), 然后跳转到认证页面,登录后再跳转到OpenSearch Dashboard
  • Identity provider (IdP) initiated: 顾名思义是从认证端来访问。通过identity provider(Okta)访问并登录,然后从应用目录中选择OpenSearch Dashboards

本文介绍SP-initiated 这种方式

准备条件

  1. 为了使用SAML,必须先开启fine-grained access control

image-20231020114058022

  1. 只支持一种认证方式,如果使用了cognito这种方式,要先关掉。

原理

SAML transactions between Amazon OpenSearch Service and Okta

  1. 浏览器访问OpenSearch dashbaord URL
  2. OpenSearch生成一个SAML认证请求
  3. OpenSearch将这个请求传给浏览器
  4. 浏览器重定向到Okta URL
  5. Okta分析SAML请求,进行验证,并返回SAML结果
  6. Okta将SAML结果返回给浏览器
  7. 浏览器拿着SAML结果给OpenSearch Service Assertion Consumer Service(ACS)
  8. ACS验证SAML结果
  9. 用户登录到OpenSearch

设置Okta用户组及用户

登录到Okta帐号,在Groups下面点击添加:

image-20231020133744851

组的名称为OpenSearch,点击确认:

Creating a group in Okta

在People页面创建新的用户:

image-20231020133838170

输入用户名和邮箱,Group选择之前创建的OpenSearch,点击保存:

image-20231020134352643

在邮件中会收到一封邮件,点击并完成注册。

配置SAML

在OpenSearch中编辑安全配置:

image-20231020152658064

开启SAML验证:

image-20231020152713110

能看到不同的URL地址,先保持这个页面不要关闭,后面会用到:

image-20231020115023225


转到okta,在Applications中创建App Integration:

image-20231020134815801

选择SAML 2.0, 进入下一步:

Creating a SAML app integration in Okta

为App Name设置为OpenSearch,进入下一步:

image-20231020134912839

在SAML设置部分,使用以下值:

image-20231020135256655

进入下一步,选择 I’m a software vendor... ,点击finish完成创建:

image-20231020135423010

创建完成后,在Sign on部分,打开Metadata URL,将XML保存下来:

image-20231020135905817

Assignments部分,选择 Assign to Groups, 选择OpenSearch这个组进行assign:

image-20231020140037380

回到OpenSearch的页面,将刚才下载的XML上传:

image-20231020140144926

  • SAML master backend role设置为OpenSearch(对应Okta的group)。
  • Role key 设置为 http://schemas.xmlsoap.org/claims/Group. Roles key – If you want to use backend roles (recommended), specify an attribute from the assertion in this field, such as role or group. This is another situation in which tools like SAML-tracer can help.

image-20231020140317332

假设有个用户叫jdoe, 属于admins组,

如果将jdoe添加在SAML master username里,只有这个用户有所有权限。

如果将admins添加在SAML master backend role里,admins下面的用户都有所有权限。

最后保存设置,等配置生效。


访问dashboard: https://search-test-domain-zim2xr5hjkuxwtlfcscs6c6ome.us-east-1.es.amazonaws.com/_dashboards

使用Okta登录到OpenSearch Dashboard:

image-20231020205306941

当前的用户自动具有all_access,这是因为之前设置了SAML master backend role

image-20231020204637765


没有用户所在的group没有被assign到,访问时会报这个错误:

image-20231107203340357

如果被assign到,但不在master backend role里:

image-20231107205736083

登录dashboard后,默认的role是default_role:

image-20231107204923737

参考: https://docs.aws.amazon.com/OpenSearch-service/latest/developerguide/saml.html#saml-idp-with-sp

https://aws.amazon.com/cn/blogs/architecture/building-saml-federation-for-amazon-OpenSearch-dashboards-with-okta/