sg-gov-access-control · git:20261027.6f21efa · 2026-10-27 · sha256 b37614a31e47c1c4
sg-gov-access-control git:20261027.6f21efaA
Immutable. This exact content never changes and is served at /api/v1/blob/b37614a31e47c1c4.
--- name: sg-gov-access-control description: >- Set up or audit identity and access management against the Singapore Government's ICT&SS Policy Reform (IM8 successor) Access Control controls (AC-1..AC-16): account inventory and deny-by-default least privilege, MFA for privileged accounts, Singpass/Corppass for public users vs government SSO (WOG AAD) for internal users, inactive/expired account handling, access reviews, automated account lifecycle, static credential rotation, endpoint hardening/MDM, identity- and device-based access, and separation of duties. Use whenever designing IAM policies or roles, authentication flows, admin or privileged access, account provisioning and deprovisioning, credential/API-key management, or when auditing who can access an agency system. Triggers: "access control", IM8/ICT&SS AC controls, least privilege, MFA, Singpass/Corppass login, SSO, dormant/orphaned accounts, access review, credential rotation, endpoint compliance, zero trust on a government project. --- # sg-gov-access-control: AC controls for SG government systems You are setting up or auditing who and what can access a system, with which credentials, from which devices, and for how long, against the ICT&SS Policy Reform **Access Control family (AC-1..AC-16)**. The family governs accounts, identity, authentication, and privilege from creation to removal. Three points apply throughout: 1. **Medium-Risk Cloud puts AC-2, AC-3, AC-5, AC-6 at Level 0**: MFA for privileged accounts, disabling inactive/expired accounts, hardened endpoints for remote admin access, and changing default credentials are mandatory with no deviation path once a system handles Confidential / Sensitive High data. **High-Risk Cloud CII adds AC-1 (least privilege) to Level 0.** 2. **Identity is split by audience.** Public users needing high identity assurance use **Singpass/Corppass MFA** (AC-7); agency and internal users use **Government-managed SSO such as WOG AAD** (AC-7's recommendation, enforced through AC-12 SSO with MFA at the IdP). Building a bespoke login for either audience is a finding. 3. **Least privilege is grounded in the inventory.** AC-1's statement grants minimum permissions *"based on the account inventory implemented"*. Without the AC-14 inventory of accounts and access rights, deny-by-default has nothing authoritative to check grants against, so build the inventory first. ## What this family is *not* about - **Application-layer auth mechanics are AS** (sg-gov-secure-coding-as): password policy (AS-5), salted hashing (AS-6), per-request authorisation checks in code (AS-7), secrets storage (AS-8), login rate limiting (AS-4), session timeouts (AS-11). AC owns account and identity governance: a weak password hash is an AS-6 finding; an account nobody disabled is AC-3. - **Logging account and access changes is LM** (sg-gov-logging-monitoring): LM-4/LM-7 capture account, access-rights, and authentication events; UEBA over account behaviour is LM-20. AC-16's compensating "audit logging and alerting" runs on LM machinery. - **Network position is NS.** Firewalls, segmentation, and subnet ACLs are Network Security; AC-10 is about not trusting network position: identity and device posture replace VPN reachability. - **Singpass/Corppass integration is its own skill.** The login plumbing and TX-6 Myinfo pre-fill live in **sg-gov-singpass** / **sg-gov-corppass**; **sg-gov-service-shell** only owns the surrounding DSS page shell (where the button sits). AC-7 is the cybersecurity-side mandate to use Singpass/Corppass MFA at all. - **Pipeline hardening is SD/SC** (sg-gov-secure-pipeline). CI deploy keys fall under AC-13 rotation, but protected branches and CI gates are Secure Development. ## Source and currency Control text in this skill and `references/ac-controls.md` is embedded from **info.standards.tech.gov.sg as of 2026-07-23**; the AC family page was last updated **24 March 2026**. The standards iterate. For any compliance-critical decision, verify against the live page: - AC control catalog: https://info.standards.tech.gov.sg/control-catalog/cybersecurity/ac/ ## Reference files - `references/ac-controls.md` — full text of AC-1..AC-16 (statement, recommendations, risk, all ten parameters) plus the verified per-SSP level table and cross-family notes. Read it when you need exact wording for an audit response or SSP documentation. - `references/implementation-recipes.md` — concrete config per control: inventory formats, deny-by-default IAM, MFA guardrail policies, unused-credential automation, Singpass/WOG AAD integration split, SCIM lifecycle, credential-rotation audits, endpoint posture, separation-of-duties tooling, and audit quick-greps. Read it when actually building. ## Before you start: the SSP parameters Get these values from the System Security Plan. If the SSP is missing or a value is blank, flag that as its own finding and ask; never invent a number. The sibling skill **sg-gov-ssp-navigator** determines levels. | Control | Parameter | What the SSP defines | |---|---|---| | AC-3 | ac-3_prm_1 | Days after account expiry to disable/remove | | AC-3 | ac-3_prm_2 | Days of inactivity before disable/remove | | AC-3 | ac-3_prm_3 | The account types in scope | | AC-4 | ac-4_prm_1 | Access review frequency | | AC-4 | ac-4_prm_2 | Days to remove access rights after review | | AC-8 | ac-8_prm_1 | Lifecycle processes to automate | | AC-8 | ac-8_prm_2 | Recommended lifecycle management tool | | AC-8 | ac-8_prm_3 | Account types for automated lifecycle | | AC-11 | ac-11_prm_1 | The type of user/identity per endpoint | | AC-13 | ac-13_prm_1 | Days between static credential rotations | Levels: no AC control is Level 0 in the Low-Risk plans; **Medium-Risk Cloud promotes AC-2/3/5/6 to Level 0**; **High-Risk Cloud CII adds AC-1 at Level 0**, promotes AC-11/AC-13 to Level 1, and is the only plan containing AC-16. AC-15 is in the catalog but no published SSP. The project's own SSP is authoritative. ## Procedure Work in this order. For **setup**, produce each configuration/artifact. For **audit**, verify each and record pass / fail / not-applicable-per-SSP with evidence (the IAM policies, the IdP config, the inventory, the review records, key ages). Recipes for every step are in `references/implementation-recipes.md`. ### Stage 1 — Know the accounts, then deny by default (AC-14, AC-1, AC-16) **1a. Inventory (AC-14).** Establish and maintain an inventory of all accounts (human, service, vendor) and their access rights. Regularly reviewed, automated where feasible. Without it, orphaned accounts can't be found. **1b. Least privilege (AC-1).** Deny by default; grant only the minimum permissions each account or process needs for its specific function, based on that inventory. Wildcard grants (`"Action": "*"` on `"Resource": "*"`) are the typical failure. Use IAM Access Advisor / Azure AD Access Review to trim to actual usage; consider attribute-based access control for granularity. **1c. Separation of duties (AC-16, High-Risk CII).** RBAC + PIM + JIT access so no single person controls a key process end-to-end; compensate with audit logging, alerting, and rate limits where perfect separation is infeasible. ### Stage 2 — Authenticate by audience (AC-2, AC-6, AC-7, AC-12) **2a. MFA for privileged accounts (AC-2).** At login, with factors different and independent of the accessing device; prefer phishing-resistant factors, and consider step-up MFA for privileged actions via PIM. **2b. No default credentials (AC-6).** Change them **before first use** on admin consoles, COTS installs, and appliances. Force password change on first login after creation or reset. **2c. Public users → Singpass/Corppass (AC-7).** High-assurance citizen/business transactions authenticate with Singpass/Corppass MFA; don't build a bespoke citizen login. **2d. Internal users → SSO (AC-12).** Government-managed SSO (WOG AAD-class) with MFA at the IdP; internal apps federate rather than keeping local password tables. ### Stage 3 — Manage the lifecycle (AC-3, AC-4, AC-8, AC-15, AC-13) **3a. Kill dormant and expired accounts (AC-3 — Level 0 at Medium-Risk).** Disable or remove ac-3_prm_3 accounts within **ac-3_prm_1 days** of last authorised use or after **ac-3_prm_2 days** of inactivity. Automate this (AWS Config `iam-user-unused-credentials-check`, SCIM workflows) rather than relying on manual follow-up. Contractor accounts get expiry dates at creation. **3b. Review access (AC-4).** At **ac-4_prm_1** frequency; remove unnecessary rights within **ac-4_prm_2 days**. Keep the evidence trail. **3c. Automate the lifecycle (AC-8), then validate it (AC-15).** Joiner/mover/leaver propagation via SSO just-in-time provisioning or SCIM (tool per ac-8_prm_2); validation tests confirm provisioning happens only through the tool, deactivation on the final day of authorised use, and rights matching the assigned role. **3d. Rotate or retire static credentials (AC-13).** API keys, access keys, PATs rotated every **ac-13_prm_1 days**, or replaced with time-restricted credentials (STS, OIDC federation) so there is nothing long-lived to steal. ### Stage 4 — Control the endpoint and the context (AC-5, AC-9, AC-10, AC-11) - **Hardened endpoints for remote privileged access (AC-5 — Level 0 at Medium-Risk)**: posture checked and access denied when hardening requirements fail. Personal laptops administering production are the typical failure. - **Endpoint device management (AC-9)**: MDM enforcing disk encryption, configuration, updates, remote wipe. - **Identity- and device-based access (AC-10)**: SSE/IAP/Conditional-Access-class controls instead of flat VPN trust. - **Single primary user per endpoint (AC-11)**: enforced via enrolment; secondary support accounts secured with endpoint privilege management. ## Audit checklist Verify each row; record evidence. "Param" marks controls whose pass criteria come from the SSP; ask for the values rather than inventing them. | ID | Check | Where | Param | |---|---|---|---| | AC-1 | Deny by default; minimum permissions per account/process, grounded in the inventory; no wildcard grants | IAM policies | | | AC-2 | MFA on privileged accounts at login; factors independent of device | IdP / IAM config | | | AC-3 | Inactive/expired accounts disabled within ac-3_prm_1 days of expiry or ac-3_prm_2 days of inactivity, automated | IdP reports / AWS Config | ✓ | | AC-4 | Access review at ac-4_prm_1; removals within ac-4_prm_2 days; evidence kept | Review records | ✓ | | AC-5 | Remote developer/maintainer/admin access only from hardened, posture-checked devices | Endpoint mgmt config | | | AC-6 | No default credentials survive to first use; first-login password change forced | Console/COTS configs | | | AC-7 | High-assurance public transactions use Singpass/Corppass MFA | Auth flow | | | AC-8 | Account lifecycle (ac-8_prm_1) automated for ac-8_prm_3 via ac-8_prm_2-class tooling | IdP/SCIM config | ✓ | | AC-9 | Endpoint device management (MDM) implemented and maintained | MDM config | | | AC-10 | Identity + device posture govern access to private resources, not network position alone | SSE/IAP config | | | AC-11 | One designated primary ac-11_prm_1 per endpoint, enforced | Device enrolment | ✓ | | AC-12 | Internal services behind SSO with MFA at the IdP; no local password tables | IdP federation | | | AC-13 | Static credentials rotated every ac-13_prm_1 days or time-restricted alternatives used | Key ages | ✓ | | AC-14 | Inventory of all accounts and access rights, current and reviewed | Inventory artifact | | | AC-15 | Lifecycle-tool integration validation-tested (provisioning path, final-day deactivation, role match) | Test records | | | AC-16 | Separation of duties via RBAC/PIM/JIT or compensating controls (High-Risk CII) | Role design | | Report per control ID with pass / fail / not-applicable-per-SSP, the evidence found, and, for failures, the fix from `references/implementation-recipes.md`. Attribute password-hashing and session findings to AS, account-event logging gaps to LM, and network segmentation to NS, not AC. Report a shared admin login used by everyone as a failure of AC-1, AC-2 (accountability), and AC-14. ## Related skills in this repo - **sg-gov-ssp-navigator** — which SSP applies and at which level each AC control sits (AC-2/3/5/6 are Level 0 at Medium-Risk Cloud; High-Risk CII adds AC-1). - **sg-gov-secure-coding-as** — AS password/session/secrets mechanics alongside AC account governance. - **sg-gov-logging-monitoring** — LM-4/LM-7 capture the account and access-rights changes AC governs; LM-20 UEBA watches account behaviour. - **sg-gov-singpass** — the AC-7 public-user login: Singpass FAPI 2.0 flow, Myinfo, the UUID-first identity model (**sg-gov-corppass** for business users acting for an entity). These own the public-user login and TX-6 pre-fill integration. - **sg-gov-service-shell** — the surrounding DSS page shell (where the Singpass/Corppass button sits), not the integration itself. - **sg-gov-secure-pipeline** — SD/SC pipeline controls; CI credentials fall under AC-13. - **sg-gov-data-protection** — DP classification decides when Medium-Risk promotion (and the AC-2/3/5/6 Level-0 set) applies at all. - **sg-gov-network-security** — NS-10 owns the network path for remote admin access (VPN/ZTNA, split-tunneling ban, session re-authentication); AC owns the accounts, MFA policy, and device hardening of the people using it.