Skip to content

Commit 84bd206

Browse files
feat: dashboard tenant and opensearch role submodules (#36)
1 parent ed62d57 commit 84bd206

File tree

13 files changed

+234
-0
lines changed

13 files changed

+234
-0
lines changed

examples/role/main.tf

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
module "role" {
2+
source = "../../modules/role"
3+
4+
name = "reader"
5+
description = "Opensearch reader role"
6+
7+
cluster_permissions = ["*"]
8+
9+
index_permissions = {
10+
"test-index-*" = {
11+
allowed_actions = ["read"]
12+
}
13+
}
14+
15+
tenant_permissions = {
16+
"test-index-*" = ["read"]
17+
}
18+
19+
backend_roles = [
20+
"arn:aws:iam::999999999999:role/TestReaderRole",
21+
]
22+
23+
users = [
24+
"arn:aws:iam::999999999999:user/TestUser",
25+
]
26+
}

examples/role/providers.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
provider "opensearch" {
2+
}

examples/role/versions.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
terraform {
2+
required_version = ">= 1.4"
3+
4+
required_providers {
5+
opensearch = {
6+
source = "opensearch-project/opensearch"
7+
version = "~> 2.2.0"
8+
}
9+
}
10+
}

modules/dashboard/tenant/README.md

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
## Requirements
2+
3+
| Name | Version |
4+
|------|---------|
5+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.4 |
6+
| <a name="requirement_opensearch"></a> [opensearch](#requirement\_opensearch) | >= 2.0 |
7+
8+
## Providers
9+
10+
| Name | Version |
11+
|------|---------|
12+
| <a name="provider_opensearch"></a> [opensearch](#provider\_opensearch) | >= 2.0 |
13+
14+
## Modules
15+
16+
No modules.
17+
18+
## Resources
19+
20+
| Name | Type |
21+
|------|------|
22+
| [opensearch_dashboard_tenant.this](https://registry.terraform.io/providers/opensearch-project/opensearch/latest/docs/resources/dashboard_tenant) | resource |
23+
24+
## Inputs
25+
26+
| Name | Description | Type | Default | Required |
27+
|------|-------------|------|---------|:--------:|
28+
| <a name="input_description"></a> [description](#input\_description) | The dashboard tenant description | `string` | `""` | no |
29+
| <a name="input_name"></a> [name](#input\_name) | The dashboard tenant name | `string` | n/a | yes |
30+
31+
## Outputs
32+
33+
No outputs.

modules/dashboard/tenant/main.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
resource "opensearch_dashboard_tenant" "this" {
2+
tenant_name = var.name
3+
description = var.description
4+
}

modules/dashboard/tenant/outputs.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
output "id" {
2+
description = "The ID of the dashboard tenant"
3+
value = opensearch_dashboard_tenant.this.id
4+
}

modules/dashboard/tenant/variables.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
variable "name" {
2+
description = "Dashboard tenant name"
3+
type = string
4+
}
5+
6+
variable "description" {
7+
description = "Dashboard tenant description"
8+
type = string
9+
default = ""
10+
}

modules/dashboard/tenant/versions.tf

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
terraform {
2+
required_version = ">= 1.4"
3+
4+
required_providers {
5+
opensearch = {
6+
source = "opensearch-project/opensearch"
7+
version = ">= 2.0"
8+
}
9+
}
10+
}

modules/role/README.md

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
## Requirements
2+
3+
| Name | Version |
4+
|------|---------|
5+
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.4 |
6+
| <a name="requirement_opensearch"></a> [opensearch](#requirement\_opensearch) | >= 2.0 |
7+
8+
## Providers
9+
10+
| Name | Version |
11+
|------|---------|
12+
| <a name="provider_opensearch"></a> [opensearch](#provider\_opensearch) | >= 2.0 |
13+
14+
## Modules
15+
16+
No modules.
17+
18+
## Resources
19+
20+
| Name | Type |
21+
|------|------|
22+
| [opensearch_role.this](https://registry.terraform.io/providers/opensearch-project/opensearch/latest/docs/resources/role) | resource |
23+
| [opensearch_roles_mapping.this](https://registry.terraform.io/providers/opensearch-project/opensearch/latest/docs/resources/roles_mapping) | resource |
24+
25+
## Inputs
26+
27+
| Name | Description | Type | Default | Required |
28+
|------|-------------|------|---------|:--------:|
29+
| <a name="input_backend_roles"></a> [backend\_roles](#input\_backend\_roles) | (Optional) Set of backend roles to map to the Opensearch role | `set(string)` | `[]` | no |
30+
| <a name="input_cluster_permissions"></a> [cluster\_permissions](#input\_cluster\_permissions) | Set of cluster permissions to apply to the role | `set(string)` | n/a | yes |
31+
| <a name="input_description"></a> [description](#input\_description) | Opensearch role description | `string` | `""` | no |
32+
| <a name="input_index_permissions"></a> [index\_permissions](#input\_index\_permissions) | Map of index pattern to permissions to apply to the pattern | <pre>map(object(<br> {<br> allowed_actions = set(string)<br> masked_fields = optional(set(string))<br> document_level_security = optional(string)<br> field_level_security = optional(set(string))<br> }<br> ))</pre> | n/a | yes |
33+
| <a name="input_name"></a> [name](#input\_name) | Opensearch role name | `string` | n/a | yes |
34+
| <a name="input_tenant_permissions"></a> [tenant\_permissions](#input\_tenant\_permissions) | Map of tenant pattern to set of permissions to apply to the pattern | `map(set(string))` | n/a | yes |
35+
| <a name="input_users"></a> [users](#input\_users) | (Optional) Set of users to map to the Opensearch role | `set(string)` | `[]` | no |
36+
37+
## Outputs
38+
39+
| Name | Description |
40+
|------|-------------|
41+
| <a name="output_id"></a> [id](#output\_id) | The ID of the role |

modules/role/main.tf

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
resource "opensearch_role" "this" {
2+
role_name = var.name
3+
description = var.description
4+
5+
cluster_permissions = var.cluster_permissions
6+
7+
dynamic "index_permissions" {
8+
for_each = var.index_permissions
9+
10+
content {
11+
index_patterns = index_permissions.key
12+
allowed_actions = index_permissions.value.allowed_actions
13+
document_level_security = index_permissions.value.document_level_security
14+
field_level_security = index_permissions.value.field_level_security
15+
masked_fields = index_permissions.value.masked_fields
16+
}
17+
}
18+
19+
dynamic "tenant_permissions" {
20+
for_each = var.tenant_permissions
21+
content {
22+
tenant_patterns = tenant_permissions.key
23+
allowed_actions = tenant_permissions.value
24+
}
25+
}
26+
}
27+
28+
resource "opensearch_roles_mapping" "this" {
29+
count = length(setunion(var.backend_roles, var.users)) > 0 ? 1 : 0
30+
31+
role_name = opensearch_role.this.role_name
32+
description = "Role mapping for ${var.name}"
33+
34+
backend_roles = var.backend_roles
35+
users = var.users
36+
}

0 commit comments

Comments
 (0)