Skip to content

Commit 45770c7

Browse files
authored
[aws/accounts] Publish account details to SSM (#67)
* Publish account details to SSM * Apply suggestions from code review Co-Authored-By: osterman <[email protected]>
1 parent d72f5de commit 45770c7

File tree

11 files changed

+350
-33
lines changed

11 files changed

+350
-33
lines changed

aws/accounts/Makefile

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
init:
22
init-terraform
33

4-
plan:
5-
terraform $@
6-
7-
apply:
8-
terraform $@
9-
104
clean:
115
rm -rf .terraform
6+
7+
%:
8+
terraform $@

aws/accounts/audit.tf

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,49 @@ resource "aws_organizations_account" "audit" {
66
role_name = "${var.account_role_name}"
77
}
88

9+
locals {
10+
audit_account_arn = "${join("", aws_organizations_account.audit.*.arn)}"
11+
audit_account_id = "${join("", aws_organizations_account.audit.*.id)}"
12+
audit_organization_account_access_role = "arn:aws:iam::${join("", aws_organizations_account.audit.*.id)}:role/OrganizationAccountAccessRole"
13+
}
14+
15+
module "audit_parameters" {
16+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-parameter-store?ref=tags/0.1.5"
17+
enabled = "${contains(var.accounts_enabled, "audit") == true ? "true" : "false"}"
18+
19+
parameter_write = [
20+
{
21+
name = "/${var.namespace}/audit/account_id"
22+
value = "${local.audit_account_id}"
23+
type = "String"
24+
overwrite = "true"
25+
description = "AWS Account ID"
26+
},
27+
{
28+
name = "/${var.namespace}/audit/account_arn"
29+
value = "${local.audit_account_arn}"
30+
type = "String"
31+
overwrite = "true"
32+
description = "AWS Account ARN"
33+
},
34+
{
35+
name = "/${var.namespace}/audit/organization_account_access_role"
36+
value = "${local.audit_organization_account_access_role}"
37+
type = "String"
38+
overwrite = "true"
39+
description = "AWS Organization Account Access Role"
40+
},
41+
]
42+
}
43+
944
output "audit_account_arn" {
10-
value = "${join("", aws_organizations_account.audit.*.arn)}"
45+
value = "${local.audit_account_arn}"
1146
}
1247

1348
output "audit_account_id" {
14-
value = "${join("", aws_organizations_account.audit.*.id)}"
49+
value = "${local.audit_account_id}"
1550
}
1651

1752
output "audit_organization_account_access_role" {
18-
value = "arn:aws:iam::${join("", aws_organizations_account.audit.*.id)}:role/OrganizationAccountAccessRole"
53+
value = "${local.audit_organization_account_access_role}"
1954
}

aws/accounts/corp.tf

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,49 @@ resource "aws_organizations_account" "corp" {
66
role_name = "${var.account_role_name}"
77
}
88

9+
locals {
10+
corp_account_arn = "${join("", aws_organizations_account.corp.*.arn)}"
11+
corp_account_id = "${join("", aws_organizations_account.corp.*.id)}"
12+
corp_organization_account_access_role = "arn:aws:iam::${join("", aws_organizations_account.corp.*.id)}:role/OrganizationAccountAccessRole"
13+
}
14+
15+
module "corp_parameters" {
16+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-parameter-store?ref=tags/0.1.5"
17+
enabled = "${contains(var.accounts_enabled, "corp") == true ? "true" : "false"}"
18+
19+
parameter_write = [
20+
{
21+
name = "/${var.namespace}/corp/account_id"
22+
value = "${local.corp_account_id}"
23+
type = "String"
24+
overwrite = "true"
25+
description = "AWS Account ID"
26+
},
27+
{
28+
name = "/${var.namespace}/corp/account_arn"
29+
value = "${local.corp_account_arn}"
30+
type = "String"
31+
overwrite = "true"
32+
description = "AWS Account ARN"
33+
},
34+
{
35+
name = "/${var.namespace}/corp/organization_account_access_role"
36+
value = "${local.corp_organization_account_access_role}"
37+
type = "String"
38+
overwrite = "true"
39+
description = "AWS Organization Account Access Role"
40+
},
41+
]
42+
}
43+
944
output "corp_account_arn" {
10-
value = "${join("", aws_organizations_account.corp.*.arn)}"
45+
value = "${local.corp_account_arn}"
1146
}
1247

1348
output "corp_account_id" {
14-
value = "${join("", aws_organizations_account.corp.*.id)}"
49+
value = "${local.corp_account_id}"
1550
}
1651

1752
output "corp_organization_account_access_role" {
18-
value = "arn:aws:iam::${join("", aws_organizations_account.corp.*.id)}:role/OrganizationAccountAccessRole"
53+
value = "${local.corp_organization_account_access_role}"
1954
}

aws/accounts/data.tf

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,49 @@ resource "aws_organizations_account" "data" {
66
role_name = "${var.account_role_name}"
77
}
88

9+
locals {
10+
data_account_arn = "${join("", aws_organizations_account.data.*.arn)}"
11+
data_account_id = "${join("", aws_organizations_account.data.*.id)}"
12+
data_organization_account_access_role = "arn:aws:iam::${join("", aws_organizations_account.data.*.id)}:role/OrganizationAccountAccessRole"
13+
}
14+
15+
module "data_parameters" {
16+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-parameter-store?ref=tags/0.1.5"
17+
enabled = "${contains(var.accounts_enabled, "data") == true ? "true" : "false"}"
18+
19+
parameter_write = [
20+
{
21+
name = "/${var.namespace}/data/account_id"
22+
value = "${local.data_account_id}"
23+
type = "String"
24+
overwrite = "true"
25+
description = "AWS Account ID"
26+
},
27+
{
28+
name = "/${var.namespace}/data/account_arn"
29+
value = "${local.data_account_arn}"
30+
type = "String"
31+
overwrite = "true"
32+
description = "AWS Account ARN"
33+
},
34+
{
35+
name = "/${var.namespace}/data/organization_account_access_role"
36+
value = "${local.data_organization_account_access_role}"
37+
type = "String"
38+
overwrite = "true"
39+
description = "AWS Organization Account Access Role"
40+
},
41+
]
42+
}
43+
944
output "data_account_arn" {
10-
value = "${join("", aws_organizations_account.data.*.arn)}"
45+
value = "${local.data_account_arn}"
1146
}
1247

1348
output "data_account_id" {
14-
value = "${join("", aws_organizations_account.data.*.id)}"
49+
value = "${local.data_account_id}"
1550
}
1651

1752
output "data_organization_account_access_role" {
18-
value = "arn:aws:iam::${join("", aws_organizations_account.data.*.id)}:role/OrganizationAccountAccessRole"
53+
value = "${local.data_organization_account_access_role}"
1954
}

aws/accounts/dev.tf

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,49 @@ resource "aws_organizations_account" "dev" {
66
role_name = "${var.account_role_name}"
77
}
88

9+
locals {
10+
dev_account_arn = "${join("", aws_organizations_account.dev.*.arn)}"
11+
dev_account_id = "${join("", aws_organizations_account.dev.*.id)}"
12+
dev_organization_account_access_role = "arn:aws:iam::${join("", aws_organizations_account.dev.*.id)}:role/OrganizationAccountAccessRole"
13+
}
14+
15+
module "dev_parameters" {
16+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-parameter-store?ref=tags/0.1.5"
17+
enabled = "${contains(var.accounts_enabled, "dev") == true ? "true" : "false"}"
18+
19+
parameter_write = [
20+
{
21+
name = "/${var.namespace}/dev/account_id"
22+
value = "${local.dev_account_id}"
23+
type = "String"
24+
overwrite = "true"
25+
description = "AWS Account ID"
26+
},
27+
{
28+
name = "/${var.namespace}/dev/account_arn"
29+
value = "${local.dev_account_arn}"
30+
type = "String"
31+
overwrite = "true"
32+
description = "AWS Account ARN"
33+
},
34+
{
35+
name = "/${var.namespace}/dev/organization_account_access_role"
36+
value = "${local.dev_organization_account_access_role}"
37+
type = "String"
38+
overwrite = "true"
39+
description = "AWS Organization Account Access Role"
40+
},
41+
]
42+
}
43+
944
output "dev_account_arn" {
10-
value = "${join("", aws_organizations_account.dev.*.arn)}"
45+
value = "${local.dev_account_arn}"
1146
}
1247

1348
output "dev_account_id" {
14-
value = "${join("", aws_organizations_account.dev.*.id)}"
49+
value = "${local.dev_account_id}"
1550
}
1651

1752
output "dev_organization_account_access_role" {
18-
value = "arn:aws:iam::${join("", aws_organizations_account.dev.*.id)}:role/OrganizationAccountAccessRole"
53+
value = "${local.dev_organization_account_access_role}"
1954
}

aws/accounts/identity.tf

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,49 @@ resource "aws_organizations_account" "identity" {
66
role_name = "${var.account_role_name}"
77
}
88

9+
locals {
10+
identity_account_arn = "${join("", aws_organizations_account.identity.*.arn)}"
11+
identity_account_id = "${join("", aws_organizations_account.identity.*.id)}"
12+
identity_organization_account_access_role = "arn:aws:iam::${join("", aws_organizations_account.identity.*.id)}:role/OrganizationAccountAccessRole"
13+
}
14+
15+
module "identity_parameters" {
16+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-parameter-store?ref=tags/0.1.5"
17+
enabled = "${contains(var.accounts_enabled, "identity") == true ? "true" : "false"}"
18+
19+
parameter_write = [
20+
{
21+
name = "/${var.namespace}/identity/account_id"
22+
value = "${local.identity_account_id}"
23+
type = "String"
24+
overwrite = "true"
25+
description = "AWS Account ID"
26+
},
27+
{
28+
name = "/${var.namespace}/identity/account_arn"
29+
value = "${local.identity_account_arn}"
30+
type = "String"
31+
overwrite = "true"
32+
description = "AWS Account ARN"
33+
},
34+
{
35+
name = "/${var.namespace}/identity/organization_account_access_role"
36+
value = "${local.identity_organization_account_access_role}"
37+
type = "String"
38+
overwrite = "true"
39+
description = "AWS Organization Account Access Role"
40+
},
41+
]
42+
}
43+
944
output "identity_account_arn" {
10-
value = "${join("", aws_organizations_account.identity.*.arn)}"
45+
value = "${local.identity_account_arn}"
1146
}
1247

1348
output "identity_account_id" {
14-
value = "${join("", aws_organizations_account.identity.*.id)}"
49+
value = "${local.identity_account_id}"
1550
}
1651

1752
output "identity_organization_account_access_role" {
18-
value = "arn:aws:iam::${join("", aws_organizations_account.identity.*.id)}:role/OrganizationAccountAccessRole"
53+
value = "${local.identity_organization_account_access_role}"
1954
}

aws/accounts/main.tf

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,11 @@ variable "aws_assume_role_arn" {
88
type = "string"
99
}
1010

11+
variable "namespace" {
12+
type = "string"
13+
description = "Namespace (e.g. `cp` or `cloudposse`)"
14+
}
15+
1116
variable "account_role_name" {
1217
type = "string"
1318
description = "IAM role that Organization automatically preconfigures in the new member account"

aws/accounts/prod.tf

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,49 @@ resource "aws_organizations_account" "prod" {
66
role_name = "${var.account_role_name}"
77
}
88

9+
locals {
10+
prod_account_arn = "${join("", aws_organizations_account.prod.*.arn)}"
11+
prod_account_id = "${join("", aws_organizations_account.prod.*.id)}"
12+
prod_organization_account_access_role = "arn:aws:iam::${join("", aws_organizations_account.prod.*.id)}:role/OrganizationAccountAccessRole"
13+
}
14+
15+
module "prod_parameters" {
16+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-parameter-store?ref=tags/0.1.5"
17+
enabled = "${contains(var.accounts_enabled, "prod") == true ? "true" : "false"}"
18+
19+
parameter_write = [
20+
{
21+
name = "/${var.namespace}/prod/account_id"
22+
value = "${local.prod_account_id}"
23+
type = "String"
24+
overwrite = "true"
25+
description = "AWS Account ID"
26+
},
27+
{
28+
name = "/${var.namespace}/prod/account_arn"
29+
value = "${local.prod_account_arn}"
30+
type = "String"
31+
overwrite = "true"
32+
description = "AWS Account ARN"
33+
},
34+
{
35+
name = "/${var.namespace}/prod/organization_account_access_role"
36+
value = "${local.prod_organization_account_access_role}"
37+
type = "String"
38+
overwrite = "true"
39+
description = "AWS Organization Account Access Role"
40+
},
41+
]
42+
}
43+
944
output "prod_account_arn" {
10-
value = "${join("", aws_organizations_account.prod.*.arn)}"
45+
value = "${local.prod_account_arn}"
1146
}
1247

1348
output "prod_account_id" {
14-
value = "${join("", aws_organizations_account.prod.*.id)}"
49+
value = "${local.prod_account_id}"
1550
}
1651

1752
output "prod_organization_account_access_role" {
18-
value = "arn:aws:iam::${join("", aws_organizations_account.prod.*.id)}:role/OrganizationAccountAccessRole"
53+
value = "${local.prod_organization_account_access_role}"
1954
}

aws/accounts/security.tf

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,14 +6,49 @@ resource "aws_organizations_account" "security" {
66
role_name = "${var.account_role_name}"
77
}
88

9+
locals {
10+
security_account_arn = "${join("", aws_organizations_account.security.*.arn)}"
11+
security_account_id = "${join("", aws_organizations_account.security.*.id)}"
12+
security_organization_account_access_role = "arn:aws:iam::${join("", aws_organizations_account.security.*.id)}:role/OrganizationAccountAccessRole"
13+
}
14+
15+
module "security_parameters" {
16+
source = "git::https://github.com/cloudposse/terraform-aws-ssm-parameter-store?ref=tags/0.1.5"
17+
enabled = "${contains(var.accounts_enabled, "security") == true ? "true" : "false"}"
18+
19+
parameter_write = [
20+
{
21+
name = "/${var.namespace}/security/account_id"
22+
value = "${local.security_account_id}"
23+
type = "String"
24+
overwrite = "true"
25+
description = "AWS Account ID"
26+
},
27+
{
28+
name = "/${var.namespace}/security/account_arn"
29+
value = "${local.security_account_arn}"
30+
type = "String"
31+
overwrite = "true"
32+
description = "AWS Account ARN"
33+
},
34+
{
35+
name = "/${var.namespace}/security/organization_account_access_role"
36+
value = "${local.security_organization_account_access_role}"
37+
type = "String"
38+
overwrite = "true"
39+
description = "AWS Organization Account Access Role"
40+
},
41+
]
42+
}
43+
944
output "security_account_arn" {
10-
value = "${join("", aws_organizations_account.security.*.arn)}"
45+
value = "${local.security_account_arn}"
1146
}
1247

1348
output "security_account_id" {
14-
value = "${join("", aws_organizations_account.security.*.id)}"
49+
value = "${local.security_account_id}"
1550
}
1651

1752
output "security_organization_account_access_role" {
18-
value = "arn:aws:iam::${join("", aws_organizations_account.security.*.id)}:role/OrganizationAccountAccessRole"
53+
value = "${local.security_organization_account_access_role}"
1954
}

0 commit comments

Comments
 (0)