在 VPC 内为 Amazon OpenSearch Service 域构建 SAML 身份联合 大
在VPC内为Amazon OpenSearch Service域构建SAML身份联合
关键要点
Amazon OpenSearch Service:这是一个完全托管的搜索和分析服务,与Apache Lucene搜索库集成,可以在虚拟私有云VPC内运行。VPC设计:将OpenSearch Service域置于VPC中,确保服务之间安全通信,无需互联网网关、NAT设备或VPN连接。SAML集成:OpenSearch Service支持与客户现有身份提供者IdP集成的SAML,以实现SSO。详细指南:提供一个完整的解决方案,用于在VPC中集成SAML身份验证,包含逐步的部署指南和AWS CDK应用。Amazon OpenSearch Service是一项完全托管的搜索和分析服务,基于Apache Lucene搜索库,能够在虚拟私有云VPC内运行。VPC是专门为您的AWS账户创建的虚拟网络,与AWS云中的其他虚拟网络逻辑上隔离。将OpenSearch Service域放在VPC内能够确保OpenSearch Service与VPC内其他服务之间安全通信,无需互联网网关、NAT设备或VPN连接。所有流量都将在AWS云内安全传输,为您的数据提供安全的环境。企业客户可以通过两种选项之一将其与运行在私有VPC内的OpenSearch Service域连接:集成其VPC与企业网络,或者通过反向代理使集群端点公开可访问。详细评估可参考如何使用Amazon Cognito身份验证从VPC外访问OpenSearch Dashboards,比较可用选项的优缺点。
在企业客户的环境中管理OpenSearch Dashboards的访问,OpenSearch Service支持与客户现有身份提供者IdP的SAML集成,以实现单点登录SSO。虽然公共访问的OpenSearch Dashboards的SAML集成可以开箱即用,但在VPC内部启用SAML需要仔细设计和各种配置。
本文概述了在VPC中集成SAML身份验证的端到端解决方案,提供逐步的部署指南,并包含自动化所有必要配置的AWS Cloud Development KitAWS CDK应用。

解决方案概述
以下图表展示了通过SSO使用SAML身份联合访问私有OpenSearch Service域的逐步身份验证流程。括号内的图中显示了在Amazon Elastic Container ServiceAmazon ECS上运行高可用性私有NGINX反向代理服务器的公共互联网访问。
工作流程包括以下步骤:
用户在浏览器中导航到OpenSearch Dashboards的URL。浏览器解析域名IP地址并发送请求。AWS WAF规则确保仅允许列入白名单的IP地址范围。应用负载均衡器将请求转发到NGINX反向代理。NGINX添加必要的头信息并将请求转发到OpenSearch Dashboards。OpenSearch Dashboards检测到请求未经过身份验证,回应重定向到集成的SAML IdP以进行身份验证。用户被重定向到SSO登录页面。IdP验证用户身份并生成SAML断言令牌。用户被重定向回OpenSearch Dashboards的URL。请求再次经过步骤15,直到到达OpenSearch。这一次,OpenSearch Dashboards检测到随附的SAML断言并允许请求。在接下来的部分中,我们将在私有子网中设置NGINX反向代理,为在VPC私有子网内部署的OpenSearch Dashboards提供访问。然后,我们将使用SAML 20应用启用OpenSearch Dashboards的SAML身份验证,并使用自定义域名端点访问OpenSearch Dashboards,以查看SAML身份验证的实际操作。
前提条件
在开始之前,请完成此部分中的先决条件步骤。
安装所需工具
首先,安装AWS CDK。如需更多信息,请参阅AWS CDK v2开发者指南。
准备所需AWS资源
完成以下步骤以设置您的AWS资源:
创建AWS账户。创建一个Amazon Route 53公共托管区域,例如mydomaincom,用于将互联网流量路由到您的域。有关说明,请参考创建公共托管区域。请求一个AWS Certificate ManagerACM公共证书,用于托管区域。有关说明,请参考请求公共证书。创建具有公共和私有子网的VPC。启用AWS IAM身份中心。有关说明,请参考启用IAM身份中心。准备您的OpenSearch Service集群
本文附带了一个独立的AWS CDK应用opensearchdomain,用于在私有VPC子网中部署一个示例OpenSearch Service域。已部署的域仅用于演示目的,是可选的。
如果您希望使用现有的OpenSearch Service域进行SAML集成,请应用以下配置:
在集群配置选项卡中,选择编辑并在自定义端点部分选择启用自定义端点。在自定义主机名中,输入一个完全合格的域名FQDN,例如opensearchmydomaincom,用于访问您的集群。请注意,提供的FQDN的域名例如,mydomaincom必须与您之前创建的公共托管区域相同。在AWS证书中,选择您之前创建的SSL证书。在摘要部分,可选择性地启用干运行分析,并选择干运行或取消选择并选择保存更改。否则,下载附带的opensearchdomain AWS CDK应用并解压缩。然后,编辑解压缩文件夹根目录下的cdkjson文件,并配置所需参数:
vpccidr 创建VPC的CIDR块。您可以保留默认值10000/16。opensearchclustername OpenSearch Service集群的名称。您可以保留默认值opensearch。它还将与hostedzonename参数一起用于构建自定义域URL的FQDN。hostedzoneid Route 53公共托管区域ID。hostedzonename Route 53公共托管区域名称例如,mydomaincom。使用默认示例值时,结果FQDN将是opensearchmydomaincom。最后,运行以下命令以部署AWS CDK应用:
bashcd opensearchdomain
创建一个Python环境并安装所需依赖
python3 m venv venvsource venv/bin/activatepip install r requirementsdevtxtpip install r requirementstxt
部署CDK应用
cdk deploy
准备好前提条件后,请参考以下部分以获取逐步的解决方案部署指南。
创建SAML 20应用
我们使用IAM身份中心作为SAML集成的身份源。相同配置应适用于其他SAML 20兼容的IdP。请查阅您的IdP文档。
在IAM身份中心控制台中,选择导航窗格中的组。创建一个名为Opensearch Admin的新组,并添加用户。这将是获得OpenSearch Dashboards完全权限的SAML组。请注意组ID。
快鸭加速器下载安装选择导航窗格中的应用。
创建一个新的自定义SAML 20应用。下载IAM身份中心SAML元数据文件,以在后续步骤中使用。对于应用启动URL,输入[Custom Domain URL]/dashboards/。自定义域URL由通信协议https//后跟您在前提条件中用于OpenSearch Service集群的FQDN,例如https//opensearchmydomaincom。如果有疑问,请查看OpenSearch Service集群配置。
对于应用ACS URL,输入[Custom Domain URL]/dashboards/opendistro/security/saml/acs。
对于应用SAML观众,输入[Custom Domain URL]不带任何尾部斜杠。选择提交。在分配用户部分,选择Opensearch Admin,然后选择分配用户。在操作菜单中,选择编辑属性映射。按照下图中所示定义属性映射,并选择保存更改。部署AWS CDK应用
完成以下步骤以部署AWS CDK应用:
下载并解压缩opensearchdomainsamlintegration AWS CDK应用。将您的私有SSL密钥和证书添加到AWS Secrets Manager,并创建两个秘密,称为Key和Crt。例如,参考以下代码:
bashKEY=(cat privatekey base64) ampamp aws secretsmanager createsecret name Key secretstring KEYCRT=(cat certificatecrt base64) ampamp aws secretsmanager createsecret name Crt secretstring CRT
您可以使用以下命令生成自签名证书。这仅用于测试;请勿在生产环境中使用。
bashopenssl req new newkey rsa4096 days 1095 nodes x509 subj / keyout privatekey out certificatecrt
编辑cdkjson文件并在嵌套的config对象中设置所需参数:
awsregion 您要部署的目标AWS区域例如,eucentral1。
vpcid OpenSearch Service域已部署的VPC ID。opensearchclustersecuritygroupid OpenSearch Service域使用的安全组ID,或允许对该域在端口80和443进行入站连接的任何其他安全组。此组ID将由应用负载均衡器用于将流量转发到您的OpenSearch Service域。hostedzoneid Route 53公共托管区域ID。hostedzone Route 53公共托管区域名称例如,mydomaincom。opensearchcustomdomainname 您希望用于访问集群的FQDN,例如opensearchmydomaincom。请注意,提供的FQDNmydomaincom的域名必须与hostedzone参数相同。opensearchcustomdomaincertificatearn 存储在ACM中的证书的ARN。opensearchdomainendpoint OpenSearch Service VPC域端点例如,vpcopensearchabc123eucentral1esamazonawscom。vpcdnsresolver 如果您的VPC CIDR是10000/16,必须为1000。有关详细信息,请参阅Amazon DNS服务器。albwafipwhitelistcidrs 这是一个可选列表,包含零个或多个IP CIDR范围,这些范围将在AWS WAF中自动列入白名单,以允许访问OpenSearch Service域。如果未指定,部署后,您需要手动将相关IP CIDR范围添加到AWS WAF IP集中以允许访问。例如,[1234/32 5670/24]。
部署OpenSearch Service域SAML集成AWS CDK应用:
bashcd opensearchdomainsamlintegration
创建一个Python环境并安装所需依赖
python3 m venv venvsource venv/bin/activatepip install r requirementsdevtxtpip install r requirementstxt
部署CDK应用
cdk deploy
为您的OpenSearch Service集群启用SAML身份验证
应用程序部署完成后,为您的集群启用SAML身份验证:
在OpenSearch Service控制台中,导航到您的域。在安全配置选项卡中,选择编辑。选择启用SAML身份验证。选择从XML文件导入,并导入之前下载的IAM身份中心SAML元数据文件。对于SAML主后端角色,使用之前保存的组ID。展开附加设置部分,对于角色,输入您在AWS身份中心创建SAML 20应用时之前映射的SAML 20属性名称。配置域访问策略以进行SAML集成。提交更改并等待OpenSearch Service应用配置,然后再继续下一部分。测试解决方案
完成以下步骤以查看解决方案的实际效果:
在IAM身份中心控制台中,选择导航窗格中的仪表板。在设置摘要部分,选择AWS访问门户URL下的链接。使用您的用户名和密码登录如果这是您第一次登录,请注册您的密码。如果您的账户已成功添加到管理员组中,将会看到一个SAML应用logo。
选择自定义SAML 20应用,以通过SSO重定向到OpenSearch Service仪表板,而无需任何额外的登录尝试。另外,您可以跳过登录访问门户,直接在浏览器中输入OpenSearch Dashboards的URL。在这种情况下,OpenSearch Dashboards将首先重定向您到访问门户进行登录,成功登录后再重定向回OpenSearch Dashboards UI,得出与下图相同的结果。
故障排除
您的公共IP必须在AWS WAF规则中列入白名单,否则将返回403 Forbidden错误。通过AWS CDK的albwafipwhitelistcidrs属性将您的IP CIDR范围列入白名单,如安装指南中所述,并重新部署AWS CDK应用以使更改生效。
清理
完成此配置后,为避免未来产生费用,请清理资源。
在OpenSearch Service控制台中,导航到OpenSearch Service域的安全配置选项卡,选择编辑。取消选择启用SAML身份验证,并选择保存更改。在禁用Amazon SAML集成后,使用cdk destroy删除opensearchdomainsamlintegration堆栈。如果您使用了提供的OpenSearch Service示例AWS CDK堆栈opensearchdomain,则可以选配地使用cdk destroy将其删除。结论
OpenSearch Service允许企业客户使用首选的联合身份提供者IdP,如使用IAM身份中心的SAML,以支持运行在私有VPC子网内的集群,遵循AWS最佳实践。
在本文中,我们展示了如何将VPC内的OpenSearch Service域与现有的SAML IdP集成,实现对OpenSearch Dashboards的SSO访问。提供的解决方案使用AWS WAF安全管理网络访问资源,仅限制授权的网络段或特定IP地址访问。
要开始,参考如何使用Amazon Cognito身份验证从VPC外访问OpenSearch Dashboards,以进一步比较OpenSearch Service域在私有VPC的访问模式。
作者介绍
Mahdi Ebrahimi是亚马逊网络服务AWS的高级云基础设施架构师,专由设计分布式、高可用的软件系统。他致力于提供尖端解决方案,使客户能够在快速发展的汽车行业中创新。