IAM policy builder
Generate the orchestrator role's IAM policy with your account ID, region, and runner instance role substituted in. Copy or download — no values leave the browser.
Fill in the three fields below. The policy regenerates as you type. Nothing is sent anywhere — substitution runs entirely in your browser.
aws.region in your YAML config.PassRunnerInstanceProfile statement is omitted from the generated policy.// fill the fields above to generate the policyApply the policy
Save what you copied as iam-role.json (or use the Download button), then attach it to the orchestrator’s IAM role with the AWS CLI:
ROLE=pacer-orchestrator # the role your tool assumes; not the runner-instance role
aws iam put-role-policy \
--role-name "$ROLE" \
--policy-name pacer-orchestrator \
--policy-document file://iam-role.json
Verify it landed:
aws iam get-role-policy \
--role-name "$ROLE" \
--policy-name pacer-orchestrator \
--query 'PolicyDocument.Statement[].Sid' --output table
You should see the Sids that were generated — DescribeForValidation, ReadOnDemandPricing, ValidateInstanceProfileAtPoolSave, CreateTaggedLaunchTemplate, ModifyOnlyOurLaunchTemplates, RunInstancesReadOnlyResources, RunInstancesFromOurLaunchTemplate, RunInstancesTaggedInstanceAndVolume, TagOnCreate, TerminateOnlyOurInstances, and (only when you provided a runner instance role above) PassRunnerInstanceProfile.
Notes
- The
gha:managed-byvalue is hard-coded topacerin the binary (internal/core/ec2lt/ec2lt.go::ManagedByTagValue). Don’t change it unless you also fork the binary. - Runner instance role is optional. Leave the field blank if your pools won’t attach an instance profile – the generator drops the
PassRunnerInstanceProfilestatement entirely. The orchestrator’siam:PassRolepermission is only exercised when a pool’siam_instance_profilefield is non-empty AND the launch causes EC2 to attach a profile to the instance. If you later add an instance profile to a pool, regenerate the policy with the role name filled in – otherwise the spawn fails withInsufficient privileges to pass role. - Cost-tracking statements (
ReadOnDemandPricing,ec2:DescribeSpotPriceHistoryinsideDescribeForValidation) are optional. Drop them if you don’t want at-launch cost snapshots; the orchestrator will log a warning and stamp NULL prices. ValidateInstanceProfileAtPoolSaveis optional. Without it the pool save still works, but a missing instance profile only surfaces at the first spawn (with a cryptic EC2 error). Harmless to keep even when no pool uses an instance profile.- For multiple runner-instance roles, edit the
ResourceofPassRunnerInstanceProfileto a list of role ARNs, or to a path-based wildcard likearn:aws:iam::ACCOUNT:role/runners/*. - Want to verify the policy’s effective decisions before applying? See the simulator commands at the bottom of the AWS-side guide.