docs: document IAM policy resources and their required permissions (CXH-1152, CXP-785) - #148
Conversation
…XH-1152) The connector has synced IAM managed policies and inline policies as resources with their policy documents since #132 / #134 / #145, but docs/connector.mdx was never updated. README.md carries the new permissions; the customer-facing page does not. Because the document fetch degrades AccessDenied to a warn-and-skip, a customer who builds their IAM role from the published policy gets policy resources with no policy_document and no error — the feature is silently inert for anyone onboarding from the docs. - Add a SyncIAMPolicyDocuments statement to all three setup paths (IAM setup, Identity Center setup, Terraform) covering the 12 IAM actions the policy resource types actually call. - Add "IAM policies as resources" describing both resource types, the policy document attribute, and the degrade-on-missing-permission behaviour. - Add IAM managed policies / Inline policies to the capabilities table. - Add an explanation bullet group in the IAM setup tab, matching the existing style of that section. Not included: sso:ListCustomerManagedPolicyReferencesInPermissionSet is also missing from this page. That gap belongs to CXP-785 and is left alone here. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Connector PR Review: docs: document IAM policy resources and their required permissions (CXH-1152)Blocking Issues: 0 | Suggestions: 0 | Threads Resolved: 0 Review SummaryThis is a docs-only PR touching docs/connector.mdx. The full PR diff was scanned for security and correctness; it contains only documentation changes and no code. The new commits add sso:ListCustomerManagedPolicyReferencesInPermissionSet to both the standalone permissions-policy JSON and the Terraform aws_iam_role policy, matching the existing sso action ordering. I verified the three SyncIAMPolicyDocuments blocks are permission-complete: blocks 2 and 3 grant iam:ListPolicies via their preceding IAMListPermissions block, and block 1 includes it inline, so the documented iam:ListPolicies requirement is satisfied in every policy variant. No new issues found. Security IssuesNone found. Correctness IssuesNone found. SuggestionsNone. |
…-785) Folds in the one surviving item from CXP-785. Auditing that ticket's five claimed actions against main: - sso:GetInlinePolicyForPermissionSet and sso:ListManagedPoliciesInPermissionSet are already present in this file. - sso:GetPermissionsBoundaryForPermissionSet and sso:DescribePermissionSetProvisioningStatus are not in baton_capabilities.json and are not called by the connector, so they are not required permissions. - sso:ListCustomerManagedPolicyReferencesInPermissionSet is genuinely missing, and is called at permission_set_assignment.go:382. Added to the Identity Center and Terraform read policies. Every sso: action declared in baton_capabilities.json is now present in both. Also note CXP-785's stated impact is stale: that call degrades AccessDenied to a warn-and-skip (permission_set_assignment.go:392-397), so the sync does not fail — customer-managed policy grants on permission sets are silently missing instead, the same failure class as the iam: gaps in this PR. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Summary
The connector has synced IAM managed policies and inline policies as resources — with their policy documents in the resource profile — since PRs #132, #134 and #145.
docs/connector.mdxwas never updated to match.README.mdwas updated with the new permissions in #147; the customer-facing page was not. Because the document fetch degradesAccessDeniedto a warn-and-skip (pkg/connector/iam_policy.go:99-105,pkg/connector/inline_policy.go:313-320), a customer who builds their IAM role from the published policy getsiam_policyresources with nopolicy_documentand no error. The feature is silently inert for anyone onboarding from the docs, which is why this blocks closing CXH-1152 rather than being a cosmetic docs nit.This PR also folds in the one surviving item from CXP-785 — see below.
Changes
1.
SyncIAMPolicyDocumentsstatement in all three setup paths (CXH-1152)IAM setup tab, Identity Center setup tab, and the Terraform script. Covers the 12 IAM actions the two policy resource types actually call, verified against the call sites rather than against
baton_capabilities.jsonalone:iam:ListPoliciesiam_policy.go:144iam:GetPolicy/iam:GetPolicyVersioniam_policy.go:83,:87iam:ListUserPolicies/ListRolePolicies/ListGroupPoliciesinline_policy.go:221,:231,:241iam:GetUserPolicy/GetRolePolicy/GetGroupPolicyinline_policy.go:281,:291,:301iam:ListAttachedUserPolicies/...Role.../...Group...iam_policy.go:488,:507,:526Note
iam:ListRolePoliciesandiam:ListAttachedRolePolicieswere previously present only under the resource-scopedAccessToSSOProvisionedRolesstatement (arn:aws:iam::*:role/aws-reserved/sso.amazonaws.com/*), while the connector calls them for every role. The new statement grants them atResource: "*".2.
sso:ListCustomerManagedPolicyReferencesInPermissionSet(CXP-785)Auditing CXP-785's five claimed missing actions against current
main, only one survives:sso:GetInlinePolicyForPermissionSetsso:ListManagedPoliciesInPermissionSetsso:GetPermissionsBoundaryForPermissionSetbaton_capabilities.json, not calledsso:DescribePermissionSetProvisioningStatusbaton_capabilities.json, not calledsso:ListCustomerManagedPolicyReferencesInPermissionSetpermission_set_assignment.go:382Added to the Identity Center and Terraform read policies. Every
sso:action declared inbaton_capabilities.jsonis now present in both.CXP-785's stated impact is also stale — it says the sync is fail-fast. That call degrades
AccessDeniedto a warn-and-skip (permission_set_assignment.go:392-397), so the sync completes and customer-managed policy grants on permission sets are silently missing instead: the same failure class as theiam:gaps above.History of this gap:
ConductorOne/docs#398(merged 2026-07-17) added the two already-present actions to the publishedbaton/aws.mdx, and baton-aws#146 (merged 2026-07-30) added the same two here, so the published page and this file are in sync. Neither addedsso:ListCustomerManagedPolicyReferencesInPermissionSet— it is missing from both. This PR fixes it in the source of truth, which is what regenerates the published page.3. Narrative and capabilities table
IAM managed policiesandInline policiesrows. Neither resource type appeared anywhere on the page before this.Test plan
jsonfences parse as valid JSON after the editsjsonencodeinline-policy payload parses; statement orderConductorOneReadAccess → ConductorOneProvisionAccess → AccessToSSOProvisionedRoles → IAMListPermissions → SyncIAMPolicyDocumentsiam:actions verified present in each of the three setup pathssso:action inbaton_capabilities.jsonverified present in the Identity Center and Terraform policiesiam:ListPolicies— the Identity Center and Terraform policies already grant it underIAMListPermissionsDocs-only; no Go changes.
Refs CXH-1152, CXP-785. Related: #132, #134, #145, #147, ConductorOne/docs#398, #146.
🤖 Generated with Claude Code