Skip to content

ACAI PROVISIO Deployment

The PROVISIO solution consists of two sub-modules:

  • /core - The core solution deployed to the designated Core Baselining account.
  • /principals - The baselining principals deployed to all member accounts.

Deploy Core Solution

Deploy the PROVISIO Core Solution to the selected Platform Core Baselining account.

Prerequisites

Ensure that the acai-account-cache-org-reader-role is available in the AWS Organization Management Account.

Terraform Configuration

module "provisio_account_cache" {
  source = "git::https://github.com/acai-consulting/terraform-aws-acf-account-cache?ref=1.3.0"

  settings = {
    org_reader_role_arn = "arn:aws:iam::123456789012:role/acai-account-cache-org-reader-role"
  }
  providers = {
    aws = aws.core_baselining
  }
}

module "provisio_core" {
  source = "git::https://github.com/acai-consulting/terraform-aws-acai-provisio//core?ref=1.0.0"

  provisio_settings = {
    org_reader_role_arn = local.platform_settings.governance.org_mgmt.org_info_reader.iam_role_arn
    core_provisio = {
      account_cache = {
        existing_ddb_name              = module.provisio_account_cache.ddb_name
        existing_permission_policy_arn = module.provisio_account_cache.cache_lambda_permission_policy_arn
      }
    }
    member_principal = local.platform_settings.governance.provisio.member_principal
  }
  provisio_baselining_specification = {
    terraform_version     = "1.5.7"
    provider_aws_version  = "5.75.0"
    provisio_regions      = local.platform_settings.governance.org_mgmt
  }
  providers = {
    aws = aws.core_baselining
  }
}

Store the output module.provisio_core.provisio_configuration_to_write in the Platform Configuration Store using the terraform-aws-acf-core-configuration module.

PROVISIO-DEPLOYMENT-1

Deploy Principals

The PROVISIO Principal IAM Role must be deployed in all member accounts to be baselined. This role must trust the CodeBuild Execution Role of the PROVISIO Core Solution. Provide the ARN of the CodeBuild Execution Role to provisio_settings.member_principal.iam_role.trustee.

For the AWS Organization Management Account, an AWS CloudFormation Stack will be used. For all other AWS accounts, a ServiceManaged AWS CloudFormation StackSet will be deployed.

locals {
  provisio_settings = module.platform_settings.governance.provisio
}

module "acai_provisio_member_permissions" {
  source = "git::https://github.com/acai-consulting/terraform-aws-account-baseline//member-permissions?ref=1.0.0"
}

module "provisio_member" {
  source = "git::https://github.com/acai-consulting/terraform-aws-acai-provisio//principals/org-mgmt-account?ref=1.0.0"

  provisio_member_principal = {
    iam_role = merge(
      local.platform_settings.governance.provisio.member_principal.iam_role,
      {
        rendered_permissions = module.acai_provisio_member_permissions.cf_permissions_rendered
      }
    )
  }
  resource_tags = local.resource_tags
  providers = {
    aws = aws.aws_org_mgmt
  }
}
locals {
  provisio_settings = module.platform_settings.governance.provisio
}

module "acai_provisio_member_permissions" {
  source = "git::https://github.com/acai-consulting/terraform-aws-account-baseline//member-permissions?ref=1.0.0"
}

module "provisio_member" {
  source = "git::https://github.com/acai-consulting/terraform-aws-acai-provisio//principals/members?ref=1.0.0"

  provisio_settings = {
    central_stackset = {
      name                          = local.provisio_settings.central_stackset.name
      member_principal_target_ou_id = local.provisio_settings.central_stackset.member_principal_target_ou_id
      call_as                       = "DELEGATED_ADMIN"
    }
    member_principal = {
      iam_role = merge(
        local.provisio_settings.member_principal.iam_role,
        {
          rendered_permissions = module.acai_provisio_member_permissions.cf_permissions_rendered
        }
      )
    }
  }
  resource_tags = local.resource_tags
  providers = {
      aws = aws.delegated_cloudformation
  }
}

PROVISIO-DEPLOYMENT-2