This is the multi-page printable view of this section.
Click here to print.
Return to the regular view of this page.
Reference
Variable reference, policy library, and module documentation.
This section contains low-level reference documentation for Org Kickstart.
In This Section
Source
The complete module documentation is generated from the Terraform source and available in the
ModuleDocs.md file in
the repository.
Policy Library
Sample policies are included in the policies/
directory of the repository:
| File |
Type |
Description |
DenyRootSCP.json |
SCP |
Deny use of root user in all accounts |
SecurityControlsSCP.json.tftpl |
SCP |
Base security controls (requires audit_role_name) |
DisableRegionsPolicy.json.tftpl |
SCP |
Restrict to approved AWS regions |
DenyUnapprovedInstanceTypes.json |
SCP |
Deny non-approved EC2 instance types |
DenyUnapprovedServices.json |
SCP |
Deny unapproved AWS services |
SuspendedAccountsPolicy.json.tftpl |
SCP |
Deny all activity in suspended accounts |
RCP_S3DataPerimeter.json.tftpl |
RCP |
Restrict S3 access to org principals |
EC2ImageBPA_DCP.json |
Declarative |
Block public sharing of AMIs |
EC2SnapshotBPA_DCP.json |
Declarative |
Block public sharing of EBS snapshots |
EC2IMDSv2Enforce_DCP.json |
Declarative |
Enforce IMDSv2 with hop limit of 2 |
Policies with the .tftpl extension support Terraform template variables via policy_vars.
1 - Module Documentation
Auto-generated Terraform module reference — inputs, outputs, resources, and sub-modules.
This page is auto-generated from the Terraform source in
[org-kickstart](https://github.com/primeharbor/org-kickstart).
Run `make generate-module-docs` in the `org-kickstart-site/` directory to refresh it.
Requirements
| Name |
Version |
| aws |
>= 5.80.0 |
Providers
Modules
Resources
Outputs
2 - Parameter Reference
All Terraform variables for the Org Kickstart module.
All configuration is passed via the organization variable (an object type) and a few
top-level variables. Below are the key configuration parameters.
Top-Level Variables
| Variable |
Type |
Required |
Description |
organization |
object |
Yes |
Main configuration object (see below) |
backend_bucket |
string |
Yes |
S3 bucket name for Terraform state |
Organization Object
Core Identity
| Parameter |
Type |
Required |
Description |
organization_name |
string |
Yes |
Short name for the organization |
payer_name |
string |
Yes |
Display name for the management account |
payer_email |
string |
Yes |
Root email of the management account |
security_account_name |
string |
Yes |
Display name for the security account |
security_account_root_email |
string |
Yes |
Root email for the new security account |
CloudTrail
| Parameter |
Type |
Default |
Description |
cloudtrail_bucket_name |
string |
required |
S3 bucket for CloudTrail logs. Set null to disable |
cloudtrail_loggroup_name |
string |
"CloudTrail/DefaultLogGroup" |
CloudWatch Log Group name |
SSO / Identity Center
| Parameter |
Type |
Default |
Description |
session_duration |
string |
"PT8H" |
ISO 8601 duration for SSO sessions |
admin_permission_set_name |
string |
"AdministratorAccess" |
Name of the admin Permission Set |
admin_group_name |
string |
"AllAdmins" |
Name of the admin Identity Center group |
disable_sso_management |
bool |
false |
Set true to stop Terraform from managing SSO |
Audit Role
| Parameter |
Type |
Default |
Description |
deploy_audit_role |
bool |
true |
Deploy the cross-account audit role StackSet |
audit_role_name |
string |
"security-audit" |
Name of the audit role in each account |
audit_role_stack_set_template_url |
string |
required if deploy |
S3 URL to the CloudFormation template |
Billing
| Parameter |
Type |
Required |
Description |
billing_data_bucket_name |
string |
Yes |
S3 bucket for CUR reports |
cur_report_frequency |
string |
"DAILY" |
DAILY, HOURLY, MONTHLY, or "NONE" to disable |
declarative_policy_bucket_name |
string |
Yes |
S3 bucket for declarative policy documents |
Security Services
Configure which security services to enable/disable:
security_services = {
disable_guardduty = false
disable_securityhub = false
disable_macie = false
}
Organizational Units
Four OUs are always created: Governance, Workloads, Sandbox, Suspended.
Additional OUs can be defined:
organization_units = {
"MyOU" = {
name = "MyOU"
is_child_of_root = true
}
"NestedOU" = {
name = "NestedOU"
parent_id = "MyOU" # use parent OU name for direct children of custom OUs
}
}
Accounts
Each account in the accounts map:
accounts = {
my_account = {
account_name = "my-org-prod" # AWS account display name
account_email = "aws+prod@example.com" # root email (must be unique)
parent_ou_name = "Workloads" # OU name (or use parent_ou_id)
monthly_budget_amount = 1000 # optional, in USD
delegated_admin = ["service.amazonaws.com"] # optional
close_on_deletion = false # optional
# Optional: override primary contact for this account
primary_contact = {
full_name = "Account Owner"
company_name = "My Org"
address_line_1 = "123 Main St"
city = "Atlanta"
state_or_region = "GA"
postal_code = "30332"
country_code = "US"
email_address = "owner@example.com"
phone_number = "+14041234567"
}
}
}
Applied org-wide (overridable per account):
global_billing_contact = {
name = "Name"
title = "CFO"
email_address = "billing@example.com"
phone_number = "+1xxxxxxxxxx"
}
global_security_contact = {
name = "Name"
title = "CISO"
email_address = "security@example.com"
phone_number = "+1xxxxxxxxxx"
}
global_operations_contact = {
name = "Name"
title = "VP Engineering"
email_address = "ops@example.com"
phone_number = "+1xxxxxxxxxx"
}
global_primary_contact = {
full_name = "Name"
company_name = "My Org"
address_line_1 = "123 Main St"
city = "Atlanta"
state_or_region = "GA"
postal_code = "30332"
country_code = "US"
email_address = "aws@example.com"
phone_number = "+1xxxxxxxxxx"
}
Policies
All three policy types follow the same structure:
service_control_policies = {
my_policy = {
policy_name = "MyPolicy"
policy_description = "Description"
policy_json_file = "policies/MyPolicy.json"
policy_targets = ["Workloads", "ou-xxxx-xxxxxxxx"] # OU names or IDs
policy_vars = { # for .tftpl files
variable_name = "value"
}
}
}
The same structure applies to resource_control_policies and declarative_policies
(which also require policy_type = "DECLARATIVE_POLICY_EC2").
Billing Alerts
billing_alerts = {
levels = {
level1 = 100 # USD threshold
level2 = 500
oh_shit = 1000
}
subscriptions = ["email@example.com"]
}
budget_defaults = {
alert_recipients = ["email@example.com"]
currency = "USD"
warning_percentage = 80
organizational_budget = 1000
}