Skip to content

RAM and Onboarding

RAM onboarding is not the same as IPAM usage showing up in the network account. Two separate mechanisms apply.

StepStackEffect
Enable org RAM sharingorg-bootstrap/ (management)Required before pools can be shared in the org
Share leaf poolsipam/ (network)org-nz-dev and org-au-sandbox RAM resource shares
Consume poolsworkload-a/ / workload-b/VPC CIDR allocated via ipv4_ipam_pool_id
LayerStackMechanismEffect
1. Org IPAM integrationorg-bootstrap/aws_vpc_ipam_organization_admin_accountNetwork account becomes IPAM admin
2. Pool access (RAM)ipam/ram_share_principals on leaf poolsWorkload account may use that pool
3. Consumptionworkload-a/ / workload-b/pool_id + ipv4_ipam_pool_idWorkload draws a CIDR from the shared pool

Layer 2 is defined in ipam/main.tf:

dev = {
cidr = ["10.64.0.0/16"]
ram_share_principals = [var.workload_account_a_id]
}

The root module creates aws_ram_resource_share, aws_ram_resource_association (pool ARN), and aws_ram_principal_association (account ID) per leaf pool.

Pool pathResource share namePrincipal
org/nz/devorg-nz-devDev workload account (111111111111)
org/au/sandboxorg-au-sandboxSandbox workload account (222222222222)

Verify in the network account (ipam-network, ap-southeast-6):

  • RAM → Shared by me → Resource sharesorg-nz-dev, org-au-sandbox Active
  • RAM → Shared by me → Shared resources — two ec2:IpamPool resources
  • IPAM → Planning → Pools → leaf pool → Resource shares — same relationship
ConceptWhat it isVisible in network IPAM as
RAM sharePermission for another account to use an IPAM poolRAM → Shared by me; pool → Resource shares
IPAM allocationPool CIDR bound to a VPC with owner account + regionPool → Allocations tab
Org resource monitoringIPAM discovers VPCs, subnets, ENIs via org integrationMonitoring → Resources → subnet → ENIs

RAM share alone does not create a formal pool allocation. The workload must create a VPC with ipv4_ipam_pool_id.

module "vpc" {
source = "../modules/ipam-vpc"
ipv4_ipam_pool_id = var.pool_id
ipv4_netmask_length = 20
}

The module creates the VPC from the shared pool:

resource "aws_vpc" "this" {
ipv4_ipam_pool_id = var.ipv4_ipam_pool_id
ipv4_netmask_length = var.ipv4_netmask_length
}

Subnet CIDRs are computed from the pool-allocated VPC CIDR at apply time.

Upstream: examples/multi-account/