Skip to content

Commit 71d35ea

Browse files
FEATURE ASH-28: Enable role prefix and assume policy override (#51)
Co-authored-by: Marko Fabry <marko.fabry@vertice.one>
1 parent 847f122 commit 71d35ea

File tree

7 files changed

+34
-9
lines changed

7 files changed

+34
-9
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,7 @@ No providers.
120120
| <a name="input_data_export_s3_prefix"></a> [data\_export\_s3\_prefix](#input\_data\_export\_s3\_prefix) | The prefix for the S3 bucket path where the AWS Data Export data will be saved. | `string` | no |
121121
| <a name="input_data_export_table_config"></a> [data\_export\_table\_config](#input\_data\_export\_table\_config) | COR table configurations; see https://docs.aws.amazon.com/cur/latest/userguide/table-dictionary-cor.html for details. | <pre>object({<br> INCLUDE_ALL_RECOMMENDATIONS = string<br> FILTER = string<br> })</pre> | no |
122122
| <a name="input_governance_role_additional_policy_json"></a> [governance\_role\_additional\_policy\_json](#input\_governance\_role\_additional\_policy\_json) | Custom additional policy in JSON format to attach to VerticeGovernance role. Default is null for no additional policy. | `string` | no |
123+
| <a name="input_governance_role_assume_policy_json"></a> [governance\_role\_assume\_policy\_json](#input\_governance\_role\_assume\_policy\_json) | Optional override for VerticeGovernanceRole assume policy. Default assume role policy is constructed if this is not provided. | `string` | no |
123124
| <a name="input_governance_role_enabled"></a> [governance\_role\_enabled](#input\_governance\_role\_enabled) | Whether to enable the module that creates VerticeGovernance role for the Cloud Cost Optimization. | `bool` | no |
124125
| <a name="input_governance_role_external_id"></a> [governance\_role\_external\_id](#input\_governance\_role\_external\_id) | STS external ID value to require for assuming the governance role. Required if the governance IAM role is to be created. You will receive this from Vertice. | `string` | no |
125126
| <a name="input_vertice_account_ids"></a> [vertice\_account\_ids](#input\_vertice\_account\_ids) | List of Account IDs, which are allowed to access the Vertice cross account role. | `list(string)` | no |

main.tf

+1
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ module "vertice_governance_role" {
77
vertice_account_ids = var.vertice_account_ids
88
account_type = var.account_type
99
governance_role_external_id = var.governance_role_external_id
10+
governance_role_assume_policy_json = var.governance_role_assume_policy_json
1011
governance_role_additional_policy_json = var.governance_role_additional_policy_json
1112
billing_policy_addons = var.billing_policy_addons
1213
}

modules/vertice-governance-role/README.md

+2
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,9 @@ No modules.
5151
| <a name="input_cur_bucket_name"></a> [cur\_bucket\_name](#input\_cur\_bucket\_name) | The name of the bucket which will be used to store the CUR data for Vertice. | `string` | `null` | no |
5252
| <a name="input_data_export_enabled"></a> [data\_export\_enabled](#input\_data\_export\_enabled) | Include policy enabling access to AWS Data Exports. | `bool` | `false` | no |
5353
| <a name="input_governance_role_additional_policy_json"></a> [governance\_role\_additional\_policy\_json](#input\_governance\_role\_additional\_policy\_json) | Custom additional policy in JSON format to attach to VerticeGovernance role. Default is `null` for no additional policy. | `string` | `null` | no |
54+
| <a name="input_governance_role_assume_policy_json"></a> [governance\_role\_assume\_policy\_json](#input\_governance\_role\_assume\_policy\_json) | Optional override for VerticeGovernanceRole assume policy. Default assume role policy is constructed if this is not provided. | `string` | `null` | no |
5455
| <a name="input_governance_role_external_id"></a> [governance\_role\_external\_id](#input\_governance\_role\_external\_id) | STS external ID value to require for assuming the governance role. Required if the governance IAM role is to be created. You will receive this from Vertice. | `string` | `""` | no |
56+
| <a name="input_governance_role_name_prefix"></a> [governance\_role\_name\_prefix](#input\_governance\_role\_name\_prefix) | Prefix of the VerticeGovernance role name and names of its policies. For testing purposes. It is discouraged to set / change this. | `string` | `""` | no |
5557
| <a name="input_vertice_account_ids"></a> [vertice\_account\_ids](#input\_vertice\_account\_ids) | List of Account IDs, which are allowed to access the Vertice cross account role. | `list(string)` | <pre>[<br> "642184526628",<br> "762729743961"<br>]</pre> | no |
5658

5759
## Outputs

modules/vertice-governance-role/iam_policies.tf

+6-6
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ data "aws_iam_policy_document" "vertice_cur_bucket_access" {
6363
resource "aws_iam_policy" "vertice_cur_bucket_access" {
6464
count = local.billing_access_enabled ? 1 : 0
6565

66-
name = "CURBucketAccess"
66+
name = "${var.governance_role_name_prefix}CURBucketAccess"
6767
policy = data.aws_iam_policy_document.vertice_cur_bucket_access[0].json
6868
}
6969

@@ -134,7 +134,7 @@ data "aws_iam_policy_document" "vertice_billing_access" {
134134
resource "aws_iam_policy" "vertice_billing_access" {
135135
count = local.billing_access_enabled ? 1 : 0
136136

137-
name = "VerticeGovernanceRolePolicy"
137+
name = "${var.governance_role_name_prefix}VerticeGovernanceRolePolicy"
138138
policy = data.aws_iam_policy_document.vertice_billing_access[0].json
139139
}
140140

@@ -208,7 +208,7 @@ data "aws_iam_policy_document" "vertice_core_access" {
208208
resource "aws_iam_policy" "vertice_core_access" {
209209
count = local.core_access_enabled ? 1 : 0
210210

211-
name = "VerticeCoreAccess"
211+
name = "${var.governance_role_name_prefix}VerticeCoreAccess"
212212
policy = data.aws_iam_policy_document.vertice_core_access[0].json
213213
}
214214

@@ -236,15 +236,15 @@ data "aws_iam_policy_document" "vertice_core_simulate_access" {
236236
]
237237

238238
resources = [
239-
"arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/vertice/VerticeGovernanceRole"
239+
"arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/vertice/${var.governance_role_name_prefix}VerticeGovernanceRole"
240240
]
241241
}
242242
}
243243

244244
resource "aws_iam_policy" "vertice_core_simulate_access" {
245245
count = local.simulate_access_enabled ? 1 : 0
246246

247-
name = "VerticeCoreSimulate"
247+
name = "${var.governance_role_name_prefix}VerticeCoreSimulate"
248248
policy = data.aws_iam_policy_document.vertice_core_simulate_access[0].json
249249
}
250250

@@ -262,7 +262,7 @@ resource "aws_iam_role_policy_attachment" "vertice_core_simulate_access" {
262262
resource "aws_iam_policy" "vertice_governance_role_additional_policy" {
263263
count = local.governance_role_additional_policy_enabled ? 1 : 0
264264

265-
name = "VerticeAdditionalPolicy"
265+
name = "${var.governance_role_name_prefix}VerticeAdditionalPolicy"
266266
policy = var.governance_role_additional_policy_json
267267
}
268268

modules/vertice-governance-role/main.tf

+6-3
Original file line numberDiff line numberDiff line change
@@ -22,15 +22,18 @@ data "aws_iam_policy_document" "vertice_governance_assume_role" {
2222
}
2323

2424
resource "aws_iam_role" "vertice_governance_role" {
25-
name = "VerticeGovernanceRole"
25+
name = "${var.governance_role_name_prefix}VerticeGovernanceRole"
2626
path = "/vertice/"
2727
max_session_duration = 60 * 60 * 12
2828

29-
assume_role_policy = data.aws_iam_policy_document.vertice_governance_assume_role.json
29+
assume_role_policy = coalesce(
30+
var.governance_role_assume_policy_json,
31+
data.aws_iam_policy_document.vertice_governance_assume_role.json,
32+
)
3033

3134
lifecycle {
3235
precondition {
33-
condition = length(var.governance_role_external_id) > 0
36+
condition = length(var.governance_role_external_id) > 0 || var.governance_role_assume_policy_json != null
3437
error_message = "The ExternalId for governance role must be set."
3538
}
3639
}

modules/vertice-governance-role/variables.tf

+12
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,18 @@ variable "governance_role_external_id" {
2222
default = ""
2323
}
2424

25+
variable "governance_role_name_prefix" {
26+
type = string
27+
description = "Prefix of the VerticeGovernance role name and names of its policies. For testing purposes. It is discouraged to set / change this."
28+
default = ""
29+
}
30+
31+
variable "governance_role_assume_policy_json" {
32+
type = string
33+
description = "Optional override for VerticeGovernanceRole assume policy. Default assume role policy is constructed if this is not provided."
34+
default = null
35+
}
36+
2537
variable "governance_role_additional_policy_json" {
2638
type = string
2739
description = "Custom additional policy in JSON format to attach to VerticeGovernance role. Default is `null` for no additional policy."

variables.tf

+6
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,12 @@ variable "governance_role_external_id" {
4040
default = ""
4141
}
4242

43+
variable "governance_role_assume_policy_json" {
44+
type = string
45+
description = "Optional override for VerticeGovernanceRole assume policy. Default assume role policy is constructed if this is not provided."
46+
default = null
47+
}
48+
4349
variable "governance_role_additional_policy_json" {
4450
type = string
4551
description = "Custom additional policy in JSON format to attach to VerticeGovernance role. Default is null for no additional policy."

0 commit comments

Comments
 (0)