In AWS IAM Identity Center, what exactly is a permission set, and what is created inside a member account when you assign one to a group?
answer
- a template, not a grant
- the assignment is the triple
- something real appears in the account
- AWSReservedSSO_ name prefix
- different ARN in every account
basics
~20 sA permission set is a reusable policy template — managed policies, customer managed policy references, an inline policy, an optional boundary and a session duration. Assigning it provisions an IAM role named AWSReservedSSO_<name>_<suffix> in the target account.
solid answer
~40 sA permission set is defined once in IAM Identity Center and holds the policies plus the session duration that a role should have. It grants nothing by itself; the grant is the *assignment*, which binds a principal (normally a group) to a permission set in a specific account. When you make that assignment, Identity Center provisions a real IAM role in the member account — its name is `AWSReservedSSO_<PermissionSetName>_<hash>` and it sits under the path `/aws-reserved/sso.amazonaws.com/`, with a trust policy that only Identity Center's federated sign-in satisfies. Editing the permission set re-provisions the role in every account it is assigned to, so one edit changes access consistently across the organization. Removing the assignment deletes that role. You should never hand-edit the provisioned role — the next provisioning run overwrites it.
code
json · 16 lines{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": { "AWS": "arn:aws:iam::111122223333:root" },
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::example-reports/*",
"Condition": {
"ArnLike": {
"aws:PrincipalArn": "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_ReadOnly_*"
}
}
}
]
}go deeper
Know the vocabulary: a permission set describes access, an assignment gives it to a group in a named account, and signing in gets you a temporary session for that pairing.
Be able to say that assignment provisions a genuine IAM role in the member account, name the AWSReservedSSO_ prefix, and explain that editing the permission set re-provisions everywhere it is assigned.
Demonstrate the operational detail: the per-account hash suffix forces wildcard matching in resource policies, provisioning can partially fail on a missing customer managed policy, and manual edits to the role are silently reverted.
Own the catalogue design — a small set of job-shaped permission sets assigned to groups, per-account variation through named policies rather than clones, boundaries on anything that can create roles, and session durations chosen as a revocation-lag budget.
## Template versus grant The most common confusion in Identity Center is treating a permission set as if it were the permission itself. It is not. There are two distinct objects: - The **permission set** — created once, in the Identity Center instance, describing *what* access looks like. - The **account assignment** — the triple *(principal, permission set, target account)* that says *who* gets that access *where*. One permission set called `ReadOnly` can be assigned to fifteen different groups across forty accounts. Editing it changes all forty. ## What a permission set contains - **AWS managed policies** attached by name, for example `ReadOnlyAccess` or `AWSLambda_ReadOnlyAccess`. - **Customer managed policy references** — a *name*, not a document. The policy with that exact name must already exist in every account the permission set is provisioned into, or provisioning fails there. This is the mechanism for per-account variation of the same permission set. - An **inline policy**, a single JSON document carried with the permission set itself. - An optional **permissions boundary**, capping whatever the above grant. - A **session duration**, expressed as an ISO-8601 duration such as `PT1H` or `PT8H`. As of 2026 the maximum is 12 hours; the default is one hour. - A **relay state**, which is just the console page the user lands on after sign-in. ## What provisioning actually does The moment you assign the permission set to a group in account `111122223333`, Identity Center reaches into that account and creates an IAM role: ``` arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/eu-west-1/AWSReservedSSO_ReadOnly_0a1b2c3d4e5f6789 ``` The policies you listed are attached to it, and its trust policy allows only the Identity Center SAML provider in that account to assume it. That role is a completely ordinary IAM role from the account's point of view — it appears in the IAM console, in CloudTrail, in Access Analyzer findings — but it is **managed**: it carries the `AWSReservedSSO_` name prefix and the `/aws-reserved/sso.amazonaws.com/` path so that both humans and tooling can recognise it as owned by Identity Center. If you attach an extra policy to it by hand, the next provisioning run reconciles it away. ## The hash suffix, and why it matters The trailing suffix is generated per account, so the same permission set has a **different role ARN in every account**. Any place you want to name that principal — a bucket policy, a KMS key policy, a cross-account trust — must therefore match with a wildcard rather than a literal ARN: ```json "Condition": { "ArnLike": { "aws:PrincipalArn": "arn:aws:iam::111122223333:role/aws-reserved/sso.amazonaws.com/*/AWSReservedSSO_ReadOnly_*" } } ``` A candidate who has actually operated Identity Center knows this, because the first cross-account bucket policy they wrote against a hard-coded SSO role ARN broke the day someone re-provisioned it. ## Drift and re-provisioning Changing a permission set marks it as needing re-provisioning in the accounts where it is assigned. In the modern console this happens for you, but the underlying API operation — `ProvisionPermissionSet` — is worth knowing about, because a permission set that references a customer managed policy missing from one account will show that account as failed while the rest succeed. Provisioning is per account and can partially fail. ## Designing the set of permission sets The practical guidance interviewers listen for: - Keep the number of permission sets small and job-shaped — `ReadOnly`, `Developer`, `Billing`, `SecurityAudit`, `AdministratorAccess` — rather than one per team per account, which recreates the sprawl you left IAM users to escape. - Assign to **groups**, never to individual users; the group is the thing your identity provider already manages. - Express per-account differences through customer managed policy references or condition keys, not by cloning the permission set. - Set the session duration to the shortest length people can actually work with, because that duration is also your revocation lag. - Use a permissions boundary on any permission set that is allowed to create IAM roles, so that delegated administrators cannot mint something wider than themselves. ## The shape of a good answer Say "template, plus an assignment that provisions a real IAM role in the target account", name the `AWSReservedSSO_` prefix, and mention that the ARN differs per account. That trio proves hands-on exposure rather than documentation reading.
- A permission set references a customer managed policy. What has to be true in each account before it will provision?A customer managed policy with exactly that name must already exist in that account. Identity Center references it by name and does not copy the document across, so provisioning fails in any account where the policy is missing while succeeding elsewhere. It is the intended way to let one permission set carry account-specific detail.
- Someone attaches an extra policy directly to a provisioned AWSReservedSSO_ role. What happens?It works until the next provisioning run, then disappears — Identity Center reconciles the role back to the permission-set definition. Manual edits to those roles are invisible drift. The correct change is to the permission set, or to a customer managed policy that the permission set references by name.
- How do you make the same permission set grant different access in production than in dev?Two clean options: reference a customer managed policy by name whose contents differ per account, or write conditions that key off account-level facts. Cloning the permission set per account is the option to avoid — it multiplies the objects you must keep in step and defeats the point of a central template.
saying these in an interview costs you the question
- A permission set is itself the permission, no assignment needed
- Identity Center evaluates access centrally, nothing exists in the account
- The provisioned role ARN is identical in every account
- You can safely edit the AWSReservedSSO_ role by hand
- Customer managed policy references are copied into each account