AWS Big Data Blog
Build SAML identity federation for Amazon OpenSearch Service domains within a VPC
Amazon OpenSearch Service is a fully managed search and analytics service powered by the Apache Lucene search library that can be operated within a virtual private cloud (VPC). A VPC is a virtual network that’s dedicated to your AWS account. It’s logically isolated from other virtual networks in the AWS Cloud. Placing an OpenSearch Service domain within a VPC enables a secure communication between OpenSearch Service and other services within the VPC without the need for an internet gateway, NAT device, or a VPN connection. All traffic remains securely within the AWS Cloud, providing a safe environment for your data. To connect to an OpenSearch Service domain running inside a private VPC, enterprise customers use one of two available options: either integrate their VPC with their enterprise network through VPN or AWS Direct Connect, or make the cluster endpoint publicly accessible through a reverse proxy. Refer to How can I access OpenSearch Dashboards from outside of a VPC using Amazon Cognito authentication for a detailed evaluation of the available options and the corresponding pros and cons.
For managing access to OpenSearch Dashboards in enterprise customers’ environments, OpenSearch Service supports Security Assertion Markup Language (SAML) integration with the customer’s existing identity providers (IdPs) to offer single sign-on (SSO). Although SAML integration for publicly accessible OpenSearch Dashboards works out of the box, enabling SAML for OpenSearch Dashboards within a VPC requires careful design with various configurations.
This post outlines an end-to-end solution for integrating SAML authentication for OpenSearch Service domains running in a VPC. It provides a step-by-step deployment guideline and is accompanied by AWS Cloud Development Kit (AWS CDK) applications, which automate all the necessary configurations.
Overview of solution
The following diagram describes the step-by-step authentication flow for accessing a private OpenSearch Service domain through SSO using SAML identity federation. The access is enabled over public internet through private NGINX reverse proxy servers running on Amazon Elastic Container Service (Amazon ECS) for high availability.
The workflow consists of the following steps:
- The user navigates to the OpenSearch Dashboards URL in their browser.
- The browser resolves the domain IP address and sends the request.
- AWS WAF rules make sure that only allow listed IP address ranges are allowed.
- Application Load Balancer forwards the request to NGINX reverse proxy.
- NGINX adds the necessary headers and forwards the request to OpenSearch Dashboards.
- OpenSearch Dashboards detects that the request is not authenticated. It replies with a redirect to the integrated SAML IdP for authentication.
- The user is redirected to the SSO login page.
- The IdP verifies the user’s identity and generates a SAML assertion token.
- The user is redirected back to the OpenSearch Dashboards URL.
- The request goes through the Steps 1–5 again until it reaches OpenSearch. This time, OpenSearch Dashboards detects the accompanying SAML assertion and allows the request.
In the following sections, we set up a NGINX reverse proxy in private subnets to provide access to OpenSearch Dashboards for a domain deployed inside VPC private subnets. We then enable SAML authentication for OpenSearch Dashboards using a SAML 2.0 application and use a custom domain endpoint to access OpenSearch Dashboards to see the SAML authentication in action.
Prerequisites
Before you get started, complete the prerequisite steps in this section.
Install required tools
First, install the AWS CDK. For more information, refer to the AWS CDK v2 Developer Guide.
Prepare required AWS resources
Complete the following steps to set up your AWS resources:
- Create an AWS account.
- Create an Amazon Route 53 public hosted zone such as
mydomain.com
to be used for routing internet traffic to your domain. For instructions, refer to Creating a public hosted zone. - Request an AWS Certificate Manager (ACM) public certificate for the hosted zone. For instructions, refer to Requesting a public certificate.
- Create a VPC with public and private subnets.
- Enable AWS IAM Identity Center. For instructions, refer to Enable IAM Identity Center.
Prepare your OpenSearch Service cluster
This post is accompanied with a standalone AWS CDK application (opensearch-domain) that deploys a sample OpenSearch Service domain in private VPC subnets. The deployed domain is for demonstration purposes only, and is optional.
If you have an existing OpenSearch Service domain in VPC that you want to use for SAML integration, apply the following configurations:
- On the Cluster configuration tab, choose Edit and select Enable custom endpoint in the Custom endpoint section.
- For Custom hostname, enter a fully qualified domain name (FQDN) such as
opensearch.mydomain.com
, which you want to use to access your cluster. Note that the domain name of the provided FQDN (for example,mydomain.com
) must be the same as the public hosted zone you created earlier. - For AWS certificate, choose the SSL certificate you created earlier.
- In the Summary section, optionally enable dry run analysis and select Dry run or deselect it and choose Save changes.
Otherwise, download the accompanied opensearch-domain AWS CDK application and unzip it. Then, edit the cdk.json
file on the root of the unzipped folder and configure the required parameters:
- vpc_cidr – The CIDR block in which to create the VPC. You may leave the default of 10.0.0.0/16.
- opensearch_cluster_name – The name of the OpenSearch Service cluster. You may leave the default value of
opensearch
. It will also be used, together with thehosted_zone_name
parameter, to build the FQDN of the custom domain URL. - hosted_zone_id – The Route 53 public hosted zone ID.
- hosted_zone_name – The Route 53 public hosted zone name (for example,
mydomain.com
). The result FQDN with the default example values will then beopensearch.mydomain.com
.
Finally, run the following commands to deploy the AWS CDK application:
With the prerequisites in place, refer to the following sections for a step-by-step guide to deploy this solution.
Create a SAML 2.0 application
We use IAM Identity Center as the source of identity for our SAML integration. The same configuration should apply to other SAML 2.0-compliant IdPs. Consult your IdP documentation.
- On the IAM Identity Center console, choose Groups in the navigation pane.
- Create a new group called
Opensearch Admin
, and add users to it.
This will be the SAML group that receives full permissions in OpenSearch Dashboards. Take note of the group ID. - Choose Applications in the navigation pane.
- Create a new custom SAML 2.0 application.
- Download the IAM Identity Center SAML metadata file to use in a later step.
- For Application start URL, enter
[Custom Domain URL]/_dashboards/
.
The custom domain URL is composed of communication protocol (https://) followed by the FQDN, which you used for your OpenSearch Service cluster in the prerequisites (for example, https://opensearch.mydomain.com). Look under your OpenSearch Service cluster configurations, if in doubt. - For Application ACS URL, enter
[Custom Domain URL]/_dashboards/_opendistro/_security/saml/acs
. - For Application SAML audience, enter
[Custom Domain URL]
(without any trailing slash).
- Choose Submit.
- In the Assigned users section, select Opensearch Admin and choose Assign Users.
- On the Actions menu, choose Edit attribute mappings.
- Define attribute mappings as shown in the following screenshot and choose Save changes.
Deploy the AWS CDK application
Complete the following steps to deploy the AWS CDK application:
- Download and unzip the opensearch-domain-saml-integration AWS CDK application.
- Add your private SSL key and certificate to AWS Secrets Manager and create two secrets called
Key
andCrt
. For example, see the following code:You can use the following command to generate a self-signed certificate. This is for testing only; do not use this for production environments.
- Edit the
cdk.json
file and set the required parameters inside the nestedconfig
object:
- aws_region – The target AWS Region for your deployment (for example,
eu-central-1
). - vpc_id – The ID of the VPC into which the OpenSearch Service domain has been deployed.
- opensearch_cluster_security_group_id – The ID of the security group used by the OpenSearch Service domain or any other security group that allows inbound connections to that domain on port 80 and 443. This group ID will be used by the Application Load Balancer to forward traffic to your OpenSearch Service domain.
- hosted_zone_id – The Route 53 public hosted zone ID.
- hosted_zone – The Route 53 public hosted zone name (for example,
mydomain.com
). - opensearch_custom_domain_name – An FQDN such as
opensearch.mydomain.com
, which you want to use to access your cluster. Note that the domain name of the provided FQDN (mydomain.com
) must be the same as thehosted_zone
parameter. - opensearch_custom_domain_certificate_arn – The ARN of the certificate stored in ACM.
- opensearch_domain_endpoint – The OpenSearch Service VPC domain endpoint (for example,
vpc-opensearch-abc123.eu-central-1.es.amazonaws.com
). - vpc_dns_resolver – This must be 10.0.0. if your VPC CIDR is 10.0.0.0/16. See Amazon DNS server for further details.
- alb_waf_ip_whitelist_cidrs – This is an optional list of zero or more IP CIDR ranges that will be automatically allow listed in AWS WAF to permit access to the OpenSearch Service domain. If not specified, after the deployment you will need to manually add relevant IP CIDR ranges to the AWS WAF IP set to allow access. For example,
["1.2.3.4/32", "5.6.7.0/24"]
.
- Deploy the OpenSearch Service domain SAML integration AWS CDK application:
Enable SAML authentication for your OpenSearch Service cluster
When the application deployment is complete, enable SAML authentication for your cluster:
- On the OpenSearch Service console, navigate to your domain.
- On the Security configuration tab, choose Edit.
- Select Enable SAML authentication.
- Choose Import from XML file and import the IAM Identity Center SAML metadata file that you downloaded in an earlier step.
- For SAML master backend role, use the group ID you saved earlier.
- Expand the Additional settings section and for Roles, enter the SAML 2.0 attribute name you mapped earlier when you created the SAML 2.0 application in AWS Identity Center.
- Configure the domain access policy for SAML integration.
- Submit changes and wait for OpenSearch Service to apply the configurations before proceeding to the next section.
Test the solution
Complete the following steps to see the solution in action:
- On the IAM Identity Center console, choose Dashboard in the navigation pane.
- In the Settings summary section, choose the link under AWS access portal URL.
- Sign in with your user name and password (register your password if this is your first login).
If your account was successfully added to the admin group, a SAML application logo is visible. - Choose Custom SAML 2.0 application to be redirected to the OpenSearch Service dashboards through SSO without any additional login attempts.
Alternatively, you could skip logging in to the access portal and directly point your browser to the OpenSearch Dashboards URL. In that case, OpenSearch Dashboards would first redirect you to the access portal to log in, which would redirect you back to the OpenSearch Dashboards UI after a successful login, resulting in the same outcome as shown in the following screenshot.
Troubleshooting
Your public-facing IP must be allow listed by the AWS WAF rule, otherwise a 403 Forbidden error will be returned. Allow list your IP CIDR range via the AWS CDK alb_waf_ip_whitelist_cidrs
property as described in the installation guide and redeploy the AWS CDK application for changes to take effect.
Clean up
When you’re finished with this configuration, clean up the resources to avoid future charges.
- On the OpenSearch Service console, navigate to the Security configuration tab of your OpenSearch Service domain and choose Edit.
- Deselect Enable SAML authentication and choose Save changes.
- After the Amazon SAML integration is disabled, delete the
opensearch-domain-saml-integration
stack usingcdk destroy
. - Optionally, if you used the provided OpenSearch Service sample AWS CDK stack (
opensearch-domain
), delete it usingcdk destroy
.
Conclusion
OpenSearch Service allows enterprise customers to use their preferred federated IdPs such as SAML using IAM Identity Center for clusters running inside private VPC subnets following AWS best practices.
In this post, we showed you how to integrate an OpenSearch Service domain within a VPC with an existing SAML IdP for SSO access to OpenSearch Dashboards using IAM Identity Center. The provided solution securely manages network access to the resources using AWS WAF to restrict access only to authorized network segments or specific IP addresses.
To get started, refer to How can I access OpenSearch Dashboards from outside of a VPC using Amazon Cognito authentication for further comparison of OpenSearch Service domain in private VPC access patterns.
About the Authors
Mahdi Ebrahimi is a Senior Cloud Infrastructure Architect with Amazon Web Services. He excels in designing distributed, highly-available software systems. Mahdi is dedicated to delivering cutting-edge solutions that empower his customers to innovate in the rapidly evolving landscape in the automotive industry.
Dmytro Protsiv is a Cloud Applications Architect for with Amazon Web Services. He is passionate about helping customers to solve their business challenges around application modernization.
Luca Menichetti is a Big Data Architect with Amazon Web Services. He helps customers develop performant and reusable solutions to process data at scale. Luca is passioned about managing organisation’s data architecture, enabling data analytics and machine learning. Having worked around the Hadoop ecosystem for a decade, he really enjoys tackling problems in NoSQL environments.
Krithivasan Balasubramaniyan is a Principal Consultant with Amazon Web Services. He enables global enterprise customers in their digital transformation journey and helps architect cloud native solutions.
Muthu Pitchaimani is a Search Specialist with Amazon OpenSearch Service. He builds large-scale search applications and solutions. Muthu is interested in the topics of networking and security, and is based out of Austin, Texas.