Cross-Account Role
Prerequisites
- Two AWS accounts (source and target)
- Terraform >= 1.0
- AWS credentials with IAM permissions
Step 1: Define Trust Policy
data "aws_iam_policy_document" "cross_account_assume" {
statement {
actions = ["sts:AssumeRole"]
principals {
type = "AWS"
identifiers = ["arn:aws:iam::123456789012:root"]
}
condition {
test = "StringEquals"
variable = "sts:ExternalId"
values = ["unique-external-id"]
}
}
}
Step 2: Create the Role
module "cross_account_role" {
source = "registry.patterneddesigns.ca/patterneddesigns/iam-role/aws"
version = "2.0.0"
name = "cross-account-admin"
assume_role_policy = data.aws_iam_policy_document.cross_account_assume.json
managed_policy_arns = [
"arn:aws:iam::aws:policy/ReadOnlyAccess"
]
max_session_duration = 3600
}
Step 3: Assume the Role
From the source account, assume the role:
aws sts assume-role \
--role-arn "arn:aws:iam::TARGET_ACCOUNT:role/cross-account-admin" \
--role-session-name "admin-session" \
--external-id "unique-external-id"
Step 4: Verify Access
Test that the assumed role has the expected permissions in the target account.