Skip to content

Commit a5a3d10

Browse files
committed
feat: Add support for security Config
1 parent d3cd45f commit a5a3d10

File tree

7 files changed

+128
-0
lines changed

7 files changed

+128
-0
lines changed

README.md

+23
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ Dynamic Terraform module, which creates a Opensearch Serverless Collection and r
1717
- [VPC Access](#vpc-access)
1818
+ [Data Access Policy](#data-access-policy)
1919
+ [Data Lifecycle Policy](#data-lifecycle-policy)
20+
+ [Security Config](#security-config)
2021
* [Examples](#examples)
2122
* [Requirements](#requirements)
2223
* [Providers](#providers)
@@ -40,6 +41,7 @@ Dynamic Terraform module, which creates a Opensearch Serverless Collection and r
4041
- Data Access Policy
4142
- Opensearch Serverless VPCE
4243
- Data Lifecycle Policy
44+
- Security Config
4345

4446
## How to Use
4547

@@ -129,6 +131,17 @@ data_lifecycle_policy_rules = [
129131
]
130132
```
131133

134+
### Security Config
135+
136+
To create security config use variable `create_security_config = true`.
137+
```hcl
138+
create_security_config = true
139+
saml_metadata = "${path.module}/saml-metadata.xml"
140+
saml_user_attribute = "example"
141+
saml_group_attribute = "example"
142+
saml_session_timeout = 90
143+
```
144+
132145
## Examples
133146

134147
- [Complete](https://github.com/fdmsantos/terraform-aws-opensearch-serverless/tree/main/examples/complete) - Creates an opensearch serverless collection with all features.
@@ -158,6 +171,7 @@ No modules.
158171
| [aws_opensearchserverless_access_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/opensearchserverless_access_policy) | resource |
159172
| [aws_opensearchserverless_collection.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/opensearchserverless_collection) | resource |
160173
| [aws_opensearchserverless_lifecycle_policy.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/opensearchserverless_lifecycle_policy) | resource |
174+
| [aws_opensearchserverless_security_config.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/opensearchserverless_security_config) | resource |
161175
| [aws_opensearchserverless_security_policy.encryption](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/opensearchserverless_security_policy) | resource |
162176
| [aws_opensearchserverless_security_policy.network](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/opensearchserverless_security_policy) | resource |
163177
| [aws_opensearchserverless_vpc_endpoint.this](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/opensearchserverless_vpc_endpoint) | resource |
@@ -173,6 +187,7 @@ No modules.
173187
| <a name="input_create_data_lifecycle_policy"></a> [create\_data\_lifecycle\_policy](#input\_create\_data\_lifecycle\_policy) | Controls if data lifecycle policy should be created. | `bool` | `false` | no |
174188
| <a name="input_create_encryption_policy"></a> [create\_encryption\_policy](#input\_create\_encryption\_policy) | Controls if encryption policy should be created. | `bool` | `true` | no |
175189
| <a name="input_create_network_policy"></a> [create\_network\_policy](#input\_create\_network\_policy) | Controls if network policy should be created. | `bool` | `true` | no |
190+
| <a name="input_create_security_config"></a> [create\_security\_config](#input\_create\_security\_config) | Controls if security config should be created. | `bool` | `false` | no |
176191
| <a name="input_data_lifecycle_policy_description"></a> [data\_lifecycle\_policy\_description](#input\_data\_lifecycle\_policy\_description) | Description of the data lifecycle policy. | `string` | `null` | no |
177192
| <a name="input_data_lifecycle_policy_name"></a> [data\_lifecycle\_policy\_name](#input\_data\_lifecycle\_policy\_name) | The name of the data lifecycle policy. | `string` | `null` | no |
178193
| <a name="input_data_lifecycle_policy_rules"></a> [data\_lifecycle\_policy\_rules](#input\_data\_lifecycle\_policy\_rules) | Rules to apply on data lifecycle policy. | <pre>list(object({<br> indexes = list(string)<br> retention = optional(string, "Unlimited")<br> }))</pre> | `[]` | no |
@@ -184,6 +199,12 @@ No modules.
184199
| <a name="input_network_policy_description"></a> [network\_policy\_description](#input\_network\_policy\_description) | Description of the network policy. | `string` | `null` | no |
185200
| <a name="input_network_policy_name"></a> [network\_policy\_name](#input\_network\_policy\_name) | The name of the network policy. | `string` | `null` | no |
186201
| <a name="input_network_policy_type"></a> [network\_policy\_type](#input\_network\_policy\_type) | Type of Network Policy. Supported Values are: AllPublic, AllPrivate, PublicCollectionPrivateDashboard, PrivateCollectionPublicDashboard | `string` | `"AllPublic"` | no |
202+
| <a name="input_saml_group_attribute"></a> [saml\_group\_attribute](#input\_saml\_group\_attribute) | Specify an attribute for group to map user groups or roles from your assertion. | `string` | `null` | no |
203+
| <a name="input_saml_metadata"></a> [saml\_metadata](#input\_saml\_metadata) | The XML IdP metadata file generated from your identity provider. Needs to be path to a file. | `string` | `null` | no |
204+
| <a name="input_saml_session_timeout"></a> [saml\_session\_timeout](#input\_saml\_session\_timeout) | Session timeout, in minutes. Minimum is 5 minutes and maximum is 720 minutes (12 hours). Default is 60 minutes. | `number` | `60` | no |
205+
| <a name="input_saml_user_attribute"></a> [saml\_user\_attribute](#input\_saml\_user\_attribute) | Specify a custom attribute for user ID if your assertion does not use NameID as the default attribute. | `string` | `null` | no |
206+
| <a name="input_security_config_description"></a> [security\_config\_description](#input\_security\_config\_description) | Description of the security config. | `string` | `null` | no |
207+
| <a name="input_security_config_name"></a> [security\_config\_name](#input\_security\_config\_name) | The name of the security config. | `string` | `null` | no |
187208
| <a name="input_tags"></a> [tags](#input\_tags) | A map of tags to assign to the collection. If configured with a provider default\_tags configuration block present, tags with matching keys will overwrite those defined at the provider-level. | `map(string)` | `{}` | no |
188209
| <a name="input_type"></a> [type](#input\_type) | Type of collection. One of SEARCH, TIMESERIES, or VECTORSEARCH. Defaults to TIMESERIES. | `string` | `"TIMESERIES"` | no |
189210
| <a name="input_use_standby_replicas"></a> [use\_standby\_replicas](#input\_use\_standby\_replicas) | Indicates whether standby replicas should be used for a collection. | `bool` | `true` | no |
@@ -209,6 +230,8 @@ No modules.
209230
| <a name="output_kms_key_arn"></a> [kms\_key\_arn](#output\_kms\_key\_arn) | The ARN of the Amazon Web Services KMS key used to encrypt the collection. |
210231
| <a name="output_network_policy_name"></a> [network\_policy\_name](#output\_network\_policy\_name) | Name of the network policy. |
211232
| <a name="output_network_policy_version"></a> [network\_policy\_version](#output\_network\_policy\_version) | Version of the network policy. |
233+
| <a name="output_security_config_name"></a> [security\_config\_name](#output\_security\_config\_name) | Name of the security config. |
234+
| <a name="output_security_config_version"></a> [security\_config\_version](#output\_security\_config\_version) | Version of the security config. |
212235
| <a name="output_vpce_id"></a> [vpce\_id](#output\_vpce\_id) | Id of the vpce. |
213236
| <a name="output_vpce_name"></a> [vpce\_name](#output\_vpce\_name) | Name of the interface endpoint. |
214237
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->

examples/complete/README.md

+4
Original file line numberDiff line numberDiff line change
@@ -59,4 +59,8 @@ Note that this example may create resources which cost money. Run `terraform des
5959
| <a name="output_collection_endpoint"></a> [collection\_endpoint](#output\_collection\_endpoint) | Collection-specific endpoint used to submit index, search, and data upload requests to an OpenSearch Serverless collection. |
6060
| <a name="output_collection_id"></a> [collection\_id](#output\_collection\_id) | Unique identifier for the collection. |
6161
| <a name="output_dashboard_endpoint"></a> [dashboard\_endpoint](#output\_dashboard\_endpoint) | Collection-specific endpoint used to access OpenSearch Dashboards. |
62+
| <a name="output_data_access_policy_version"></a> [data\_access\_policy\_version](#output\_data\_access\_policy\_version) | Data Access policy version. |
63+
| <a name="output_data_lifecycle_policy_version"></a> [data\_lifecycle\_policy\_version](#output\_data\_lifecycle\_policy\_version) | Data Lifecycle policy version. |
64+
| <a name="output_encrypt_policy_version"></a> [encrypt\_policy\_version](#output\_encrypt\_policy\_version) | Encryption policy version. |
65+
| <a name="output_network_policy_version"></a> [network\_policy\_version](#output\_network\_policy\_version) | Network policy version. |
6266
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->

examples/complete/main.tf

+5
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,11 @@ module "opensearch_serverless" {
4747
retention = "Unlimited"
4848
}
4949
]
50+
# create_security_config = true
51+
# saml_metadata = "${path.module}/saml-metadata.xml"
52+
# saml_user_attribute = "example"
53+
# saml_group_attribute = "example"
54+
# saml_session_timeout = 90
5055
tags = {
5156
Environment : "Dev"
5257
}

examples/complete/outputs.tf

+25
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,28 @@ output "dashboard_endpoint" {
1717
description = "Collection-specific endpoint used to access OpenSearch Dashboards."
1818
value = module.opensearch_serverless.dashboard_endpoint
1919
}
20+
21+
output "encrypt_policy_version" {
22+
description = "Encryption policy version."
23+
value = module.opensearch_serverless.encryption_policy_version
24+
}
25+
26+
output "network_policy_version" {
27+
description = "Network policy version."
28+
value = module.opensearch_serverless.network_policy_version
29+
}
30+
31+
output "data_access_policy_version" {
32+
description = "Data Access policy version."
33+
value = module.opensearch_serverless.access_policy_version
34+
}
35+
36+
output "data_lifecycle_policy_version" {
37+
description = "Data Lifecycle policy version."
38+
value = module.opensearch_serverless.data_lifecycle_policy_version
39+
}
40+
41+
#output "security_config_version" {
42+
# description = "Security Config version."
43+
# value = module.opensearch_serverless.security_config_version
44+
#}

main.tf

+13
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,16 @@ resource "aws_opensearchserverless_lifecycle_policy" "this" {
5959
"Rules" : local.data_lifecycle_policy
6060
})
6161
}
62+
63+
resource "aws_opensearchserverless_security_config" "this" {
64+
count = var.create_security_config ? 1 : 0
65+
name = coalesce(var.security_config_name, "${var.name}-security-config")
66+
description = var.security_config_description
67+
type = "saml"
68+
saml_options {
69+
metadata = file(var.saml_metadata)
70+
group_attribute = var.saml_group_attribute
71+
user_attribute = var.saml_user_attribute
72+
session_timeout = var.saml_session_timeout
73+
}
74+
}

outputs.tf

+13
Original file line numberDiff line numberDiff line change
@@ -89,3 +89,16 @@ output "data_lifecycle_policy_name" {
8989
description = "Name of the data lifecycle policy."
9090
value = var.create_data_lifecycle_policy ? aws_opensearchserverless_lifecycle_policy.this[0].name : null
9191
}
92+
93+
######
94+
# Security Config
95+
######
96+
output "security_config_version" {
97+
description = "Version of the security config."
98+
value = var.create_security_config ? aws_opensearchserverless_security_config.this[0].config_version : null
99+
}
100+
101+
output "security_config_name" {
102+
description = "Name of the security config."
103+
value = var.create_security_config ? aws_opensearchserverless_security_config.this[0].name : null
104+
}

variables.tf

+45
Original file line numberDiff line numberDiff line change
@@ -180,3 +180,48 @@ variable "data_lifecycle_policy_rules" {
180180
}))
181181
default = []
182182
}
183+
184+
######
185+
# Security Config
186+
######
187+
variable "create_security_config" {
188+
description = "Controls if security config should be created."
189+
type = bool
190+
default = false
191+
}
192+
193+
variable "security_config_name" {
194+
description = "The name of the security config."
195+
type = string
196+
default = null
197+
}
198+
199+
variable "security_config_description" {
200+
description = "Description of the security config."
201+
type = string
202+
default = null
203+
}
204+
205+
variable "saml_metadata" {
206+
description = "The XML IdP metadata file generated from your identity provider. Needs to be path to a file."
207+
type = string
208+
default = null
209+
}
210+
211+
variable "saml_group_attribute" {
212+
description = "Specify an attribute for group to map user groups or roles from your assertion."
213+
type = string
214+
default = null
215+
}
216+
217+
variable "saml_user_attribute" {
218+
description = "Specify a custom attribute for user ID if your assertion does not use NameID as the default attribute."
219+
type = string
220+
default = null
221+
}
222+
223+
variable "saml_session_timeout" {
224+
description = "Session timeout, in minutes. Minimum is 5 minutes and maximum is 720 minutes (12 hours). Default is 60 minutes."
225+
type = number
226+
default = 60
227+
}

0 commit comments

Comments
 (0)