|
|
|
|
@@ -662,7 +662,7 @@ FAST defines a simple mechanism to extend stage functionality via the use of [ad
|
|
|
|
|
| name | description | modules | resources |
|
|
|
|
|
|---|---|---|---|
|
|
|
|
|
| [automation.tf](./automation.tf) | Automation project and resources. | <code>gcs</code> · <code>iam-service-account</code> · <code>project</code> | |
|
|
|
|
|
| [billing.tf](./billing.tf) | Billing export project and dataset. | <code>bigquery-dataset</code> · <code>project</code> | <code>google_billing_account_iam_member</code> |
|
|
|
|
|
| [billing.tf](./billing.tf) | Billing export project and dataset. | <code>bigquery-dataset</code> · <code>billing-account</code> · <code>logging-bucket</code> · <code>project</code> | |
|
|
|
|
|
| [cicd.tf](./cicd.tf) | CI/CD locals and resources. | <code>iam-service-account</code> | |
|
|
|
|
|
| [identity-providers-wfif-defs.tf](./identity-providers-wfif-defs.tf) | Workforce Identity provider definitions. | | |
|
|
|
|
|
| [identity-providers-wfif.tf](./identity-providers-wfif.tf) | Workforce Identity Federation provider definitions. | | <code>google_iam_workforce_pool</code> · <code>google_iam_workforce_pool_provider</code> |
|
|
|
|
|
@@ -683,29 +683,29 @@ FAST defines a simple mechanism to extend stage functionality via the use of [ad
|
|
|
|
|
|
|
|
|
|
| name | description | type | required | default | producer |
|
|
|
|
|
|---|---|:---:|:---:|:---:|:---:|
|
|
|
|
|
| [billing_account](variables.tf#L17) | Billing account id. If billing account is not part of the same org set `is_org_level` to `false`. To disable handling of billing IAM roles set `no_iam` to `true`. | <code title="object({ id = string force_create = optional(object({ dataset = optional(bool, false) project = optional(bool, false) }), {}) is_org_level = optional(bool, true) no_iam = optional(bool, false) })">object({…})</code> | ✓ | | |
|
|
|
|
|
| [organization](variables.tf#L281) | Organization details. | <code title="object({ id = number domain = optional(string) customer_id = optional(string) })">object({…})</code> | ✓ | | |
|
|
|
|
|
| [prefix](variables.tf#L296) | Prefix used for resources that need unique names. Use 9 characters or less. | <code>string</code> | ✓ | | |
|
|
|
|
|
| [bootstrap_user](variables.tf#L38) | Email of the nominal user running this stage for the first time. | <code>string</code> | | <code>null</code> | |
|
|
|
|
|
| [cicd_config](variables.tf#L44) | CI/CD repository configuration. Identity providers reference keys in the `federated_identity_providers` variable. Set to null to disable, or set individual repositories to null if not needed. | <code title="object({ bootstrap = optional(object({ identity_provider = string repository = object({ name = string branch = optional(string) type = optional(string, "github") }) })) resman = optional(object({ identity_provider = string repository = object({ name = string branch = optional(string) type = optional(string, "github") }) })) vpcsc = optional(object({ identity_provider = string repository = object({ name = string branch = optional(string) type = optional(string, "github") }) })) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [custom_roles](variables.tf#L85) | Map of role names => list of permissions to additionally create at the organization level. | <code>map(list(string))</code> | | <code>{}</code> | |
|
|
|
|
|
| [environments](variables.tf#L92) | Environment names. When not defined, short name is set to the key and tag name to lower(name). | <code title="map(object({ name = string is_default = optional(bool, false) short_name = optional(string) tag_name = optional(string) }))">map(object({…}))</code> | | <code title="{ dev = { name = "Development" } prod = { name = "Production" is_default = true } }">{…}</code> | |
|
|
|
|
|
| [essential_contacts](variables.tf#L132) | Email used for essential contacts, unset if null. | <code>string</code> | | <code>null</code> | |
|
|
|
|
|
| [factories_config](variables.tf#L138) | Configuration for the resource factories or external data. | <code title="object({ custom_constraints = optional(string, "data/custom-constraints") custom_roles = optional(string, "data/custom-roles") org_policies = optional(string, "data/org-policies") org_policies_iac = optional(string, "data/org-policies-iac") })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [billing_account](variables.tf#L17) | Billing account id. If billing account is not part of the same org set `is_org_level` to `false`. To disable handling of billing IAM roles set `no_iam` to `true`. | <code title="object({ id = string force_create = optional(object({ dataset = optional(bool, false) project = optional(bool, false) log_bucket = optional(bool, false) }), {}) is_org_level = optional(bool, true) no_iam = optional(bool, false) })">object({…})</code> | ✓ | | |
|
|
|
|
|
| [organization](variables.tf#L282) | Organization details. | <code title="object({ id = number domain = optional(string) customer_id = optional(string) })">object({…})</code> | ✓ | | |
|
|
|
|
|
| [prefix](variables.tf#L297) | Prefix used for resources that need unique names. Use 9 characters or less. | <code>string</code> | ✓ | | |
|
|
|
|
|
| [bootstrap_user](variables.tf#L39) | Email of the nominal user running this stage for the first time. | <code>string</code> | | <code>null</code> | |
|
|
|
|
|
| [cicd_config](variables.tf#L45) | CI/CD repository configuration. Identity providers reference keys in the `federated_identity_providers` variable. Set to null to disable, or set individual repositories to null if not needed. | <code title="object({ bootstrap = optional(object({ identity_provider = string repository = object({ name = string branch = optional(string) type = optional(string, "github") }) })) resman = optional(object({ identity_provider = string repository = object({ name = string branch = optional(string) type = optional(string, "github") }) })) vpcsc = optional(object({ identity_provider = string repository = object({ name = string branch = optional(string) type = optional(string, "github") }) })) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [custom_roles](variables.tf#L86) | Map of role names => list of permissions to additionally create at the organization level. | <code>map(list(string))</code> | | <code>{}</code> | |
|
|
|
|
|
| [environments](variables.tf#L93) | Environment names. When not defined, short name is set to the key and tag name to lower(name). | <code title="map(object({ name = string is_default = optional(bool, false) short_name = optional(string) tag_name = optional(string) }))">map(object({…}))</code> | | <code title="{ dev = { name = "Development" } prod = { name = "Production" is_default = true } }">{…}</code> | |
|
|
|
|
|
| [essential_contacts](variables.tf#L133) | Email used for essential contacts, unset if null. | <code>string</code> | | <code>null</code> | |
|
|
|
|
|
| [factories_config](variables.tf#L139) | Configuration for the resource factories or external data. | <code title="object({ custom_constraints = optional(string, "data/custom-constraints") custom_roles = optional(string, "data/custom-roles") org_policies = optional(string, "data/org-policies") org_policies_iac = optional(string, "data/org-policies-iac") })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [fast_addon](variables-addons.tf#L17) | FAST addons configurations for stages 1. Keys are used as short names for the add-on resources. | <code title="map(object({ parent_stage = string cicd_config = optional(object({ identity_provider = string repository = object({ name = string branch = optional(string) type = optional(string, "github") }) })) }))">map(object({…}))</code> | | <code>{}</code> | |
|
|
|
|
|
| [groups](variables.tf#L150) | Group names or IAM-format principals to grant organization-level permissions. If just the name is provided, the 'group:' principal and organization domain are interpolated. | <code title="object({ gcp-billing-admins = optional(string, "gcp-billing-admins") gcp-devops = optional(string, "gcp-devops") gcp-network-admins = optional(string, "gcp-vpc-network-admins") gcp-organization-admins = optional(string, "gcp-organization-admins") gcp-secops-admins = optional(string, "gcp-security-admins") gcp-security-admins = optional(string, "gcp-security-admins") gcp-support = optional(string, "gcp-devops") })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [iam](variables.tf#L167) | Organization-level custom IAM settings in role => [principal] format. | <code>map(list(string))</code> | | <code>{}</code> | |
|
|
|
|
|
| [iam_bindings_additive](variables.tf#L174) | Organization-level custom additive IAM bindings. Keys are arbitrary. | <code title="map(object({ member = string role = string condition = optional(object({ expression = string title = string description = optional(string) })) }))">map(object({…}))</code> | | <code>{}</code> | |
|
|
|
|
|
| [iam_by_principals](variables.tf#L189) | Authoritative IAM binding in {PRINCIPAL => [ROLES]} format. Principals need to be statically defined to avoid cycle errors. Merged internally with the `iam` variable. | <code>map(list(string))</code> | | <code>{}</code> | |
|
|
|
|
|
| [locations](variables.tf#L196) | Optional locations for GCS, BigQuery, and logging buckets created here. | <code title="object({ bq = optional(string, "EU") gcs = optional(string, "EU") logging = optional(string, "global") pubsub = optional(list(string), []) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [log_sinks](variables.tf#L210) | Org-level log sinks, in name => {type, filter} format. | <code title="map(object({ filter = string type = string disabled = optional(bool, false) exclusions = optional(map(string), {}) }))">map(object({…}))</code> | | <code title="{ audit-logs = { filter = <<-FILTER log_id("cloudaudit.googleapis.com/activity") OR log_id("cloudaudit.googleapis.com/system_event") OR log_id("cloudaudit.googleapis.com/policy") OR log_id("cloudaudit.googleapis.com/access_transparency") FILTER type = "logging" } iam = { filter = <<-FILTER protoPayload.serviceName="iamcredentials.googleapis.com" OR protoPayload.serviceName="iam.googleapis.com" OR protoPayload.serviceName="sts.googleapis.com" FILTER type = "logging" } vpc-sc = { filter = <<-FILTER protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata" FILTER type = "logging" } workspace-audit-logs = { filter = <<-FILTER protoPayload.serviceName="admin.googleapis.com" OR protoPayload.serviceName="cloudidentity.googleapis.com" OR protoPayload.serviceName="login.googleapis.com" FILTER type = "logging" } }">{…}</code> | |
|
|
|
|
|
| [org_policies_config](variables.tf#L266) | Organization policies customization. | <code title="object({ iac_policy_member_domains = optional(list(string)) import_defaults = optional(bool, false) tag_name = optional(string, "org-policies") tag_values = optional(map(object({ description = optional(string, "Managed by the Terraform organization module.") iam = optional(map(list(string)), {}) id = optional(string) })), {}) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [outputs_location](variables.tf#L290) | Enable writing provider, tfvars and CI/CD workflow files to local filesystem. Leave null to disable. | <code>string</code> | | <code>null</code> | |
|
|
|
|
|
| [project_parent_ids](variables.tf#L305) | Optional parents for projects created here in folders/nnnnnnn format. Null values will use the organization as parent. | <code title="object({ automation = optional(string) billing = optional(string) logging = optional(string) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [resource_names](variables.tf#L316) | Resource names overrides for specific resources. Prefix is always set via code, except where noted in the variable type. | <code title="object({ bq-billing = optional(string, "billing_export") bq-logs = optional(string, "logs") gcs-bootstrap = optional(string, "prod-iac-core-bootstrap-0") gcs-logs = optional(string, "prod-logs") gcs-outputs = optional(string, "prod-iac-core-outputs-0") gcs-resman = optional(string, "prod-iac-core-resman-0") gcs-vpcsc = optional(string, "prod-iac-core-vpcsc-0") project-automation = optional(string, "prod-iac-core-0") project-billing = optional(string, "prod-billing-exp-0") project-logs = optional(string, "prod-audit-logs-0") pubsub-logs_template = optional(string, "$${key}") sa-bootstrap = optional(string, "prod-bootstrap-0") sa-bootstrap_ro = optional(string, "prod-bootstrap-0r") sa-cicd_template = optional(string, "prod-$${key}-1") sa-cicd_template_ro = optional(string, "prod-$${key}-1r") sa-resman = optional(string, "prod-resman-0") sa-resman_ro = optional(string, "prod-resman-0r") sa-vpcsc = optional(string, "prod-vpcsc-0") sa-vpcsc_ro = optional(string, "prod-vpcsc-0r") wf-bootstrap = optional(string, "$${prefix}-bootstrap") wf-provider_template = optional(string, "$${prefix}-bootstrap-$${key}") wif-bootstrap = optional(string, "$${prefix}-bootstrap") wif-provider_template = optional(string, "$${prefix}-bootstrap-$${key}") })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [universe](variables.tf#L348) | Target GCP universe. | <code title="object({ domain = string prefix = string unavailable_services = optional(list(string), []) })">object({…})</code> | | <code>null</code> | |
|
|
|
|
|
| [workforce_identity_providers](variables.tf#L358) | Workforce Identity Federation pools. | <code title="map(object({ attribute_condition = optional(string) issuer = string display_name = string description = string disabled = optional(bool, false) saml = optional(object({ idp_metadata_xml = string }), null) }))">map(object({…}))</code> | | <code>{}</code> | |
|
|
|
|
|
| [workload_identity_providers](variables.tf#L374) | Workload Identity Federation pools. The `cicd_repositories` variable references keys here. | <code title="map(object({ attribute_condition = optional(string) issuer = string custom_settings = optional(object({ issuer_uri = optional(string) audiences = optional(list(string), []) jwks_json = optional(string) }), {}) }))">map(object({…}))</code> | | <code>{}</code> | |
|
|
|
|
|
| [groups](variables.tf#L151) | Group names or IAM-format principals to grant organization-level permissions. If just the name is provided, the 'group:' principal and organization domain are interpolated. | <code title="object({ gcp-billing-admins = optional(string, "gcp-billing-admins") gcp-devops = optional(string, "gcp-devops") gcp-network-admins = optional(string, "gcp-vpc-network-admins") gcp-organization-admins = optional(string, "gcp-organization-admins") gcp-secops-admins = optional(string, "gcp-security-admins") gcp-security-admins = optional(string, "gcp-security-admins") gcp-support = optional(string, "gcp-devops") })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [iam](variables.tf#L168) | Organization-level custom IAM settings in role => [principal] format. | <code>map(list(string))</code> | | <code>{}</code> | |
|
|
|
|
|
| [iam_bindings_additive](variables.tf#L175) | Organization-level custom additive IAM bindings. Keys are arbitrary. | <code title="map(object({ member = string role = string condition = optional(object({ expression = string title = string description = optional(string) })) }))">map(object({…}))</code> | | <code>{}</code> | |
|
|
|
|
|
| [iam_by_principals](variables.tf#L190) | Authoritative IAM binding in {PRINCIPAL => [ROLES]} format. Principals need to be statically defined to avoid cycle errors. Merged internally with the `iam` variable. | <code>map(list(string))</code> | | <code>{}</code> | |
|
|
|
|
|
| [locations](variables.tf#L197) | Optional locations for GCS, BigQuery, and logging buckets created here. | <code title="object({ bq = optional(string, "EU") gcs = optional(string, "EU") logging = optional(string, "global") pubsub = optional(list(string), []) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [log_sinks](variables.tf#L211) | Org-level log sinks, in name => {type, filter} format. | <code title="map(object({ filter = string type = string disabled = optional(bool, false) exclusions = optional(map(string), {}) }))">map(object({…}))</code> | | <code title="{ audit-logs = { filter = <<-FILTER log_id("cloudaudit.googleapis.com/activity") OR log_id("cloudaudit.googleapis.com/system_event") OR log_id("cloudaudit.googleapis.com/policy") OR log_id("cloudaudit.googleapis.com/access_transparency") FILTER type = "logging" } iam = { filter = <<-FILTER protoPayload.serviceName="iamcredentials.googleapis.com" OR protoPayload.serviceName="iam.googleapis.com" OR protoPayload.serviceName="sts.googleapis.com" FILTER type = "logging" } vpc-sc = { filter = <<-FILTER protoPayload.metadata.@type="type.googleapis.com/google.cloud.audit.VpcServiceControlAuditMetadata" FILTER type = "logging" } workspace-audit-logs = { filter = <<-FILTER protoPayload.serviceName="admin.googleapis.com" OR protoPayload.serviceName="cloudidentity.googleapis.com" OR protoPayload.serviceName="login.googleapis.com" FILTER type = "logging" } }">{…}</code> | |
|
|
|
|
|
| [org_policies_config](variables.tf#L267) | Organization policies customization. | <code title="object({ iac_policy_member_domains = optional(list(string)) import_defaults = optional(bool, false) tag_name = optional(string, "org-policies") tag_values = optional(map(object({ description = optional(string, "Managed by the Terraform organization module.") iam = optional(map(list(string)), {}) id = optional(string) })), {}) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [outputs_location](variables.tf#L291) | Enable writing provider, tfvars and CI/CD workflow files to local filesystem. Leave null to disable. | <code>string</code> | | <code>null</code> | |
|
|
|
|
|
| [project_parent_ids](variables.tf#L306) | Optional parents for projects created here in folders/nnnnnnn format. Null values will use the organization as parent. | <code title="object({ automation = optional(string) billing = optional(string) logging = optional(string) })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [resource_names](variables.tf#L317) | Resource names overrides for specific resources. Prefix is always set via code, except where noted in the variable type. | <code title="object({ bq-billing = optional(string, "billing_export") bq-logs = optional(string, "logs") gcs-bootstrap = optional(string, "prod-iac-core-bootstrap-0") gcs-logs = optional(string, "prod-logs") gcs-outputs = optional(string, "prod-iac-core-outputs-0") gcs-resman = optional(string, "prod-iac-core-resman-0") gcs-vpcsc = optional(string, "prod-iac-core-vpcsc-0") project-automation = optional(string, "prod-iac-core-0") project-billing = optional(string, "prod-billing-exp-0") project-logs = optional(string, "prod-audit-logs-0") pubsub-logs_template = optional(string, "$${key}") sa-bootstrap = optional(string, "prod-bootstrap-0") sa-bootstrap_ro = optional(string, "prod-bootstrap-0r") sa-cicd_template = optional(string, "prod-$${key}-1") sa-cicd_template_ro = optional(string, "prod-$${key}-1r") sa-resman = optional(string, "prod-resman-0") sa-resman_ro = optional(string, "prod-resman-0r") sa-vpcsc = optional(string, "prod-vpcsc-0") sa-vpcsc_ro = optional(string, "prod-vpcsc-0r") wf-bootstrap = optional(string, "$${prefix}-bootstrap") wf-provider_template = optional(string, "$${prefix}-bootstrap-$${key}") wif-bootstrap = optional(string, "$${prefix}-bootstrap") wif-provider_template = optional(string, "$${prefix}-bootstrap-$${key}") })">object({…})</code> | | <code>{}</code> | |
|
|
|
|
|
| [universe](variables.tf#L349) | Target GCP universe. | <code title="object({ domain = string prefix = string unavailable_services = optional(list(string), []) })">object({…})</code> | | <code>null</code> | |
|
|
|
|
|
| [workforce_identity_providers](variables.tf#L359) | Workforce Identity Federation pools. | <code title="map(object({ attribute_condition = optional(string) issuer = string display_name = string description = string disabled = optional(bool, false) saml = optional(object({ idp_metadata_xml = string }), null) }))">map(object({…}))</code> | | <code>{}</code> | |
|
|
|
|
|
| [workload_identity_providers](variables.tf#L375) | Workload Identity Federation pools. The `cicd_repositories` variable references keys here. | <code title="map(object({ attribute_condition = optional(string) issuer = string custom_settings = optional(object({ issuer_uri = optional(string) audiences = optional(list(string), []) jwks_json = optional(string) }), {}) }))">map(object({…}))</code> | | <code>{}</code> | |
|
|
|
|
|
|
|
|
|
|
## Outputs
|
|
|
|
|
|
|
|
|
|
|