Skip to content

Commit dc68c5b

Browse files
feat: add permissions to close accounts in explicitly defined OUs
this change will support the upcoming automated tenant deletion feature of meshStack
1 parent ee49a4a commit dc68c5b

File tree

3 files changed

+30
-7
lines changed

3 files changed

+30
-7
lines changed

Diff for: modules/meshcloud-replicator/replicator-management-account-access/README.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
| Name | Version |
1111
|------|---------|
12-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 2.7.0 |
12+
| <a name="provider_aws"></a> [aws](#provider\_aws) | 4.21.0 |
1313

1414
## Modules
1515

@@ -39,9 +39,10 @@ No modules.
3939
|------|-------------|------|---------|:--------:|
4040
| <a name="input_allow_federated_role"></a> [allow\_federated\_role](#input\_allow\_federated\_role) | n/a | `bool` | `false` | no |
4141
| <a name="input_aws_sso_instance_arn"></a> [aws\_sso\_instance\_arn](#input\_aws\_sso\_instance\_arn) | ARN of the AWS SSO instance to use | `string` | n/a | yes |
42+
| <a name="input_can_close_accounts_in_resource_org_paths"></a> [can\_close\_accounts\_in\_resource\_org\_paths](#input\_can\_close\_accounts\_in\_resource\_org\_paths) | AWS ResourceOrgPaths that are used in Landing Zones and where meshStack is allowed to close accounts. | `list(string)` | `[]` | no |
4243
| <a name="input_control_tower_enrollment_enabled"></a> [control\_tower\_enrollment\_enabled](#input\_control\_tower\_enrollment\_enabled) | Set to true, to allow meshStack to enroll Accounts via AWS Control Tower for the meshPlatform | `bool` | `false` | no |
4344
| <a name="input_control_tower_portfolio_id"></a> [control\_tower\_portfolio\_id](#input\_control\_tower\_portfolio\_id) | Must be set for AWS Control Tower | `string` | `""` | no |
44-
| <a name="input_landing_zone_ou_arns"></a> [landing\_zone\_ou\_arns](#input\_landing\_zone\_ou\_arns) | Organizational Unit ARNs that are used in Landing Zones. We recommend to explicitly list the OU ARNs that meshStack should manage. | `list(string)` | <pre>[<br> "arn:aws:organizations::*:ou/o-*/ou-*"<br>]</pre> | no |
45+
| <a name="input_landing_zone_ou_arns"></a> [landing\_zone\_ou\_arns](#input\_landing\_zone\_ou\_arns) | Organizational Unit ARNs that are used in Landing Zones. We recommend to explicitly list the OU ARNs that meshStack should manage. | `list(string)` | `[]` | no |
4546
| <a name="input_management_account_service_role_name"></a> [management\_account\_service\_role\_name](#input\_management\_account\_service\_role\_name) | Name of the custom role in the management account. See https://docs.meshcloud.io/docs/meshstack.how-to.integrate-meshplatform-aws-manually.html#set-up-aws-account-2-management | `string` | `"MeshfedServiceRole"` | no |
4647
| <a name="input_meshcloud_account_id"></a> [meshcloud\_account\_id](#input\_meshcloud\_account\_id) | The ID of the meshcloud AWS Account | `string` | n/a | yes |
4748
| <a name="input_meshcloud_account_service_user_name"></a> [meshcloud\_account\_service\_user\_name](#input\_meshcloud\_account\_service\_user\_name) | Name of the meshfed-service user. This user is responsible for replication. | `string` | `"meshfed-service-user"` | no |
@@ -55,4 +56,4 @@ No modules.
5556
|------|-------------|
5657
| <a name="output_management_account_role_arn"></a> [management\_account\_role\_arn](#output\_management\_account\_role\_arn) | Amazon Resource Name (ARN) of Management Account Role |
5758
| <a name="output_meshstack_access_role_name"></a> [meshstack\_access\_role\_name](#output\_meshstack\_access\_role\_name) | The name for the Account Access Role that will be rolled out to all managed accounts. |
58-
<!-- END_TF_DOCS -->
59+
<!-- END_TF_DOCS -->

Diff for: modules/meshcloud-replicator/replicator-management-account-access/data.tf

+18-1
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,31 @@ data "aws_iam_policy_document" "meshfed_service" {
5050
[
5151
# The actions organizations:TagResource and organizations:UntagResource act on accounts.
5252
# The actions can not be restricted to a subtree of the OU hierarchy. This is a limitation in the permission model of AWS Organization Service.
53-
# To supprt tagging for this meshPlatform we need to allow both actions on all accounts.
53+
# To support tagging for this meshPlatform we need to allow both actions on all accounts.
5454
"arn:${data.aws_partition.current.partition}:organizations::*:account/o-*/*",
5555
# New accounts need to be moved from root to the target OU.
5656
"arn:${data.aws_partition.current.partition}:organizations::${local.account_id}:root/o-*/r-*"
5757
],
5858
var.landing_zone_ou_arns)
5959
}
6060

61+
statement {
62+
sid = "OrgManagementAccessCloseAccount"
63+
effect = "Allow"
64+
actions = [
65+
"organizations:CloseAccount"
66+
]
67+
resources = [
68+
// allow acting on any account owned by this org
69+
"arn:${data.aws_partition.current.partition}:organizations::*:account/o-*/*",
70+
]
71+
condition {
72+
test = "ForAnyValue:StringLike"
73+
variable = "aws:ResourceOrgPaths"
74+
values = var.can_close_accounts_in_resource_org_paths
75+
}
76+
}
77+
6178
statement {
6279
sid = "OrgManagementAccessNoResourceLevelRestrictions"
6380
effect = "Allow"

Diff for: modules/meshcloud-replicator/replicator-management-account-access/variables.tf

+8-3
Original file line numberDiff line numberDiff line change
@@ -52,9 +52,14 @@ variable "support_root_account_via_aws_sso" {
5252
variable "landing_zone_ou_arns" {
5353
type = list(string)
5454
description = "Organizational Unit ARNs that are used in Landing Zones. We recommend to explicitly list the OU ARNs that meshStack should manage."
55-
default = [
56-
"arn:aws:organizations::*:ou/o-*/ou-*"
57-
]
55+
default = []
56+
}
57+
58+
variable "can_close_accounts_in_resource_org_paths" {
59+
type = list(string)
60+
// see https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-resourceorgpaths
61+
description = "AWS ResourceOrgPaths that are used in Landing Zones and where meshStack is allowed to close accounts."
62+
default = [] // example: o-a1b2c3d4e5/r-f6g7h8i9j0example/ou-ghi0-awsccccc/ou-jkl0-awsddddd/
5863
}
5964

6065
variable "allow_federated_role" {

0 commit comments

Comments
 (0)