Skip to content

Commit 1a2952c

Browse files
Ak-skyshemau
andauthored
feat: Added feature to add CBR for Kibana app and other security issues (#476)
* feat: added proper user for kibana app * added cbr for kibana * updated var des * fixed cra * updated kibana setup * updated kibana setup * addressed review comments * addressed review comments * addressed review comments * addressed review comments * cda * Revert "addressed review comments" This reverts commit 414f320. * fixes * fixes * updated kibana system pw * updated catalog --------- Co-authored-by: shemau <[email protected]>
1 parent fe0904f commit 1a2952c

File tree

8 files changed

+89
-11
lines changed

8 files changed

+89
-11
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ You need the following permissions to run this module.
136136
| <a name="output_port"></a> [port](#output\_port) | Database connection port |
137137
| <a name="output_service_credentials_json"></a> [service\_credentials\_json](#output\_service\_credentials\_json) | Service credentials json map |
138138
| <a name="output_service_credentials_object"></a> [service\_credentials\_object](#output\_service\_credentials\_object) | Service credentials object |
139+
| <a name="output_users_credentials"></a> [users\_credentials](#output\_users\_credentials) | Database user credentials |
139140
| <a name="output_version"></a> [version](#output\_version) | Elasticsearch version |
140141
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->
141142

ibm_catalog.json

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -446,19 +446,22 @@
446446
"key": "kibana_image_port"
447447
},
448448
{
449-
"key": "kibana_image_secret"
449+
"key": "cbr_code_engine_kibana_project_rules"
450450
},
451451
{
452-
"key": "kibana_registry_personal_access_token"
452+
"key": "use_private_registry"
453453
},
454454
{
455-
"key": "kibana_registry_server"
455+
"key": "kibana_image_secret"
456456
},
457457
{
458458
"key": "kibana_registry_username"
459459
},
460460
{
461-
"key": "use_private_registry"
461+
"key": "kibana_registry_personal_access_token"
462+
},
463+
{
464+
"key": "kibana_registry_server"
462465
},
463466
{
464467
"key": "kibana_visibility",

modules/fscloud/README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,5 +74,6 @@ No resources.
7474
| <a name="output_port"></a> [port](#output\_port) | Database connection port |
7575
| <a name="output_service_credentials_json"></a> [service\_credentials\_json](#output\_service\_credentials\_json) | Service credentials json map |
7676
| <a name="output_service_credentials_object"></a> [service\_credentials\_object](#output\_service\_credentials\_object) | Service credentials object |
77+
| <a name="output_users_credentials"></a> [users\_credentials](#output\_users\_credentials) | Database user credentials |
7778
| <a name="output_version"></a> [version](#output\_version) | Elasticsearch instance version |
7879
<!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK -->

modules/fscloud/outputs.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,9 @@ output "certificate_base64" {
5959
value = module.elasticsearch.certificate_base64
6060
sensitive = true
6161
}
62+
63+
output "users_credentials" {
64+
description = "Database user credentials"
65+
value = module.elasticsearch.users_credentials
66+
sensitive = true
67+
}

outputs.tf

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,12 @@ output "adminuser" {
4444
value = ibm_database.elasticsearch.adminuser
4545
}
4646

47+
output "users_credentials" {
48+
description = "Database user credentials"
49+
value = ibm_database.elasticsearch.users
50+
sensitive = true
51+
}
52+
4753
output "hostname" {
4854
description = "Database connection hostname"
4955
value = data.ibm_database_connection.database_connection.https[0].hosts[0].hostname

solutions/fully-configurable/main.tf

Lines changed: 40 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -273,6 +273,20 @@ data "ibm_database_connection" "existing_connection" {
273273
user_type = "database"
274274
}
275275

276+
locals {
277+
kibana_users = [{
278+
name = "kibana_user"
279+
password = local.kibana_app_login_password
280+
type = "database"
281+
},
282+
{
283+
name = "kibana_system"
284+
password = local.kibana_system_password
285+
}]
286+
287+
all_users = local.kibana_app_login_password != null ? concat(var.users, local.kibana_users) : var.users
288+
}
289+
276290
# Create new instance
277291
module "elasticsearch" {
278292
count = var.existing_elasticsearch_instance_crn != null ? 0 : 1
@@ -292,7 +306,7 @@ module "elasticsearch" {
292306
access_tags = var.access_tags
293307
tags = var.resource_tags
294308
admin_pass = local.admin_pass
295-
users = var.users
309+
users = local.all_users
296310
members = var.members
297311
member_host_flavor = var.member_host_flavor
298312
memory_mb = var.member_memory_mb
@@ -412,11 +426,29 @@ module "secrets_manager_service_credentials" {
412426
# Code Engine Kibana Dashboard instance
413427
########################################################################################################################
414428

429+
resource "random_password" "kibana_system_password" {
430+
count = var.enable_kibana_dashboard ? 1 : 0
431+
length = 32
432+
special = true
433+
override_special = "-_"
434+
min_numeric = 1
435+
}
436+
437+
resource "random_password" "kibana_app_login_password" {
438+
count = var.enable_kibana_dashboard ? 1 : 0
439+
length = 32
440+
special = true
441+
override_special = "-_"
442+
min_numeric = 1
443+
}
444+
415445
locals {
416-
code_engine_project_id = var.existing_code_engine_project_id != null ? var.existing_code_engine_project_id : null
417-
code_engine_project_name = local.code_engine_project_id != null ? null : "${local.prefix}${var.kibana_code_engine_new_project_name}"
418-
code_engine_app_name = "${local.prefix}${var.kibana_code_engine_new_app_name}"
419-
kibana_version = var.enable_kibana_dashboard ? jsondecode(data.http.es_metadata[0].response_body).version.number : null
446+
code_engine_project_id = var.existing_code_engine_project_id != null ? var.existing_code_engine_project_id : null
447+
code_engine_project_name = local.code_engine_project_id != null ? null : (var.prefix != null && var.prefix != "") ? "${var.prefix}-${var.kibana_code_engine_new_project_name}" : var.kibana_code_engine_new_project_name
448+
code_engine_app_name = (var.prefix != null && var.prefix != "") ? "${var.prefix}-${var.kibana_code_engine_new_app_name}" : var.kibana_code_engine_new_app_name
449+
kibana_version = var.enable_kibana_dashboard ? jsondecode(data.http.es_metadata[0].response_body).version.number : null
450+
kibana_system_password = var.enable_kibana_dashboard ? random_password.kibana_system_password[0].result : null
451+
kibana_app_login_password = var.enable_kibana_dashboard ? random_password.kibana_app_login_password[0].result : null
420452
}
421453

422454
data "http" "es_metadata" {
@@ -432,12 +464,13 @@ module "code_engine_kibana" {
432464
resource_group_id = module.resource_group.resource_group_id
433465
project_name = local.code_engine_project_name
434466
existing_project_id = local.code_engine_project_id
467+
cbr_rules = var.cbr_code_engine_kibana_project_rules
435468
secrets = merge(
436469
{
437470
"es-secret" = {
438471
format = "generic"
439472
data = {
440-
"ELASTICSEARCH_PASSWORD" = local.admin_pass
473+
"ELASTICSEARCH_PASSWORD" = local.kibana_system_password
441474
}
442475
}
443476
},
@@ -466,7 +499,7 @@ module "code_engine_kibana" {
466499
{
467500
type = "literal"
468501
name = "ELASTICSEARCH_USERNAME"
469-
value = local.elasticsearch_username
502+
value = "kibana_system"
470503
},
471504
{
472505
type = "secret_key_reference"

solutions/fully-configurable/outputs.tf

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,14 @@ output "kibana_app_endpoint" {
6060
value = var.enable_kibana_dashboard ? module.code_engine_kibana[0].app[local.code_engine_app_name].endpoint : null
6161
}
6262

63+
output "user_credentials" {
64+
description = "Kibana/database user credentials for Elasticsearch"
65+
value = var.enable_kibana_dashboard ? {
66+
for user in module.elasticsearch[0].users_credentials : user.name => user.password
67+
if user.name != "kibana_system"
68+
} : null
69+
sensitive = true
70+
}
6371
output "cbr_rule_ids" {
6472
description = "CBR rule ids created to restrict Elasticsearch"
6573
value = var.existing_elasticsearch_instance_crn != null ? null : module.elasticsearch[0].cbr_rule_ids

solutions/fully-configurable/variables.tf

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -583,3 +583,23 @@ variable "cbr_rules" {
583583
description = "(Optional, list) List of context-based restrictions rules to create. [Learn more](https://github.com/terraform-ibm-modules/terraform-ibm-icd-elasticsearch/tree/main/solutions/fully-configurable/DA-cbr_rules.md)"
584584
default = []
585585
}
586+
587+
variable "cbr_code_engine_kibana_project_rules" {
588+
type = list(object({
589+
description = string
590+
account_id = string
591+
rule_contexts = list(object({
592+
attributes = optional(list(object({
593+
name = string
594+
value = string
595+
}))) }))
596+
enforcement_mode = string
597+
operations = optional(list(object({
598+
api_types = list(object({
599+
api_type_id = string
600+
}))
601+
})))
602+
}))
603+
description = "(Optional, list) List of context-based restrictions rules to create for the Kibana dashboard and it is only applicable if `enable_kibana_dashboard` is true. [Learn more](https://github.com/terraform-ibm-modules/terraform-ibm-icd-elasticsearch/tree/main/solutions/standard/DA-cbr_rules.md)"
604+
default = []
605+
}

0 commit comments

Comments
 (0)