agentsclimarketplace

Access control

Skill kyleoliveiro/sg-gov-skills/skills/access-control

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.From its SKILL.md

Install
npx -y skills add kyleoliveiro/sg-gov-skills --skill access-control

Assembled from the repository path, not quoted from the project. Check it against their README if it does not work.

One thing to look at

  • 15 stars15 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.

SKILL.md

13.4 KB, as published. Nobody here has run it

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 that governs accounts, identity, authentication, and privilege from creation to removal.

Three facts anchor everything:

  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 the moment a system handles Confidential / Sensitive High data. High-Risk Cloud CII adds AC-1 (least privilege) to Level 0. These are hygiene controls that lose their deviation path exactly when data sensitivity rises.
  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 the finding, not an implementation choice.
  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. Inventory first, then scope.

What this family is not about

  • Application-layer auth mechanics are AS (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 (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 precisely 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 singpass / corppass; sg-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 (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:

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 ssp-navigator determines levels):

ControlParameterWhat the SSP defines
AC-3ac-3_prm_1Days after account expiry to disable/remove
AC-3ac-3_prm_2Days of inactivity before disable/remove
AC-3ac-3_prm_3The account types in scope
AC-4ac-4_prm_1Access review frequency
AC-4ac-4_prm_2Days to remove access rights after review
AC-8ac-8_prm_1Lifecycle processes to automate
AC-8ac-8_prm_2Recommended lifecycle management tool
AC-8ac-8_prm_3Account types for automated lifecycle
AC-11ac-11_prm_1The type of user/identity per endpoint
AC-13ac-13_prm_1Days 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. Orphaned accounts are unfindable without it.

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 canonical 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 — admin consoles, COTS installs, 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 — automated (AWS Config iam-user-unused-credentials-check, SCIM workflows), not remembered. 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 is the canonical 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.

IDCheckWhereParam
AC-1Deny by default; minimum permissions per account/process, grounded in the inventory; no wildcard grantsIAM policies
AC-2MFA on privileged accounts at login; factors independent of deviceIdP / IAM config
AC-3Inactive/expired accounts disabled within ac-3_prm_1 days of expiry or ac-3_prm_2 days of inactivity, automatedIdP reports / AWS Config✓
AC-4Access review at ac-4_prm_1; removals within ac-4_prm_2 days; evidence keptReview records✓
AC-5Remote developer/maintainer/admin access only from hardened, posture-checked devicesEndpoint mgmt config
AC-6No default credentials survive to first use; first-login password change forcedConsole/COTS configs
AC-7High-assurance public transactions use Singpass/Corppass MFAAuth flow
AC-8Account lifecycle (ac-8_prm_1) automated for ac-8_prm_3 via ac-8_prm_2-class toolingIdP/SCIM config✓
AC-9Endpoint device management (MDM) implemented and maintainedMDM config
AC-10Identity + device posture govern access to private resources, not network position aloneSSE/IAP config
AC-11One designated primary ac-11_prm_1 per endpoint, enforcedDevice enrolment✓
AC-12Internal services behind SSO with MFA at the IdP; no local password tablesIdP federation
AC-13Static credentials rotated every ac-13_prm_1 days or time-restricted alternatives usedKey ages✓
AC-14Inventory of all accounts and access rights, current and reviewedInventory artifact
AC-15Lifecycle-tool integration validation-tested (provisioning path, final-day deactivation, role match)Test records
AC-16Separation 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; and treat "everyone uses the shared admin login" as the multi-control failure it is (AC-1, AC-2 accountability, AC-14).

Related skills in this repo

  • 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).
  • secure-coding-as — AS password/session/secrets mechanics alongside AC account governance.
  • logging-monitoring — LM-4/LM-7 capture the account and access-rights changes AC governs; LM-20 UEBA watches account behaviour.
  • singpass — the AC-7 public-user login itself: Singpass FAPI 2.0 flow, Myinfo, the UUID-first identity model (corppass for business users acting for an entity). These own the public-user login and TX-6 pre-fill integration.
  • sg-service-shell — the surrounding DSS page shell (where the Singpass/Corppass button sits), not the integration itself.
  • secure-pipeline — SD/SC pipeline controls; CI credentials fall under AC-13.
  • data-protection — DP classification decides when Medium-Risk promotion (and the AC-2/3/5/6 Level-0 set) applies at all.
  • 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.

Keep looking

Skills are one crate of 628,853. Ordering is by how many stacks a row turns up in, so the top of any crate is what has actually been picked rather than what has the most stars.