Standardmäßig ist der Prompt ausgewählt, der zuerst die Quelle prüft. Sie können zu einem direkten Befehl wechseln oder eine lokale Kopie herunterladen.
Quelldateien prüfen
Lesen Sie SKILL.md und alle von SkillsMP angezeigten Begleitdateien, bevor Sie sich für eine Installation entscheiden.
Mit Codex oder Claude installieren Kopieren Sie diesen Prompt, fügen Sie ihn in Codex, Claude oder einen anderen Assistant ein und lassen Sie die Skill-Seite prüfen und installieren.
Ein direkter Befehl überspringt den Prüf-Prompt. Prüfen Sie die Quelle, bevor Sie ihn ausführen.
Conduct periodic access reviews and certifications. Implement access governance and recertification workflows. Use when managing access compliance.
license
MIT
metadata
{"author":"devops-skills","version":"1.0"}
Access Review
Implement periodic access review processes for AWS IAM, GitHub, Okta, and other identity providers, including automated reporting, certification workflows, and unused permission detection.
When to Use
Conducting quarterly or annual access reviews for compliance (SOC 2, HIPAA, PCI DSS, ISO 27001)
Identifying and removing stale accounts and unused credentials
Certifying that current access levels match job responsibilities
Detecting excessive privileges and dormant service accounts
Generating evidence for auditor requests on access governance
Access Review Process
access_review_workflow:1_scope:actions:-Definesystemsinscopeforthereviewcycle-Identifyreviewowners(managers,systemowners)-Setreviewtimelineanddeadlines-Generateaccessinventoryfromallidentitysourcesfrequency:privileged_access:Quarterlystandard_access:Semi-annuallyservice_accounts:Quarterlyapi_keys:Monthly2_extract:actions:-Pullcurrentaccessdatafromallsystems-Correlateidentitiesacrossplatforms(SSOmapping)-Enrichwithlastloginandactivitydata-Flagaccountsforreview(inactive,over-privileged,orphaned)3_review:actions:-Assignreviewitemstoappropriatemanagers-Managercertifieseachuser'saccess(approve/revoke/modify)-Risk-basedprioritization(privilegedusersreviewedfirst)-Escalatenon-responsesafterdeadlinedecisions:approve:"Access is appropriate for current role"modify:"Access needs adjustment (reduce/change scope)"revoke:"Access is no longer needed"4_remediate:actions:-Revokeaccessflaggedforremoval-Modifyaccessasdirectedbyreviewers-Documentexceptionswithjustification-Confirmchangeswithsystemownerssla:revocations:"Complete within 5 business days of decision"modifications:"Complete within 10 business days"exceptions:"Approved by security team, documented, time-limited"5_report:actions:-Generatecompletionmetrics(%reviewed,%ontime)-Documentalldecisionsandactionstaken-Archiveevidenceforcomplianceaudits-Identifyprocessimprovementsfornextcycle
AWS IAM Access Review Scripts
#!/usr/bin/env bash# aws-iam-review.sh - Comprehensive IAM access review report
OUTPUT_DIR="./access-review/$(date +%Y-%m)"mkdir -p "$OUTPUT_DIR"echo"=== AWS IAM Access Review ==="# Generate credential report
aws iam generate-credential-report > /dev/null
sleep 10
aws iam get-credential-report --output text --query Content | \
base64 -d > "$OUTPUT_DIR/credential-report.csv"echo"--- Users Without MFA ---"
aws iam get-credential-report --output text --query Content | base64 -d | \
awk -F, 'NR>1 && $4=="true" && $8=="false" {print $1}' | \
tee"$OUTPUT_DIR/users-without-mfa.txt"echo"--- Inactive Users (90+ days) ---"
THRESHOLD=$(date -d '90 days ago' +%Y-%m-%dT%H:%M:%S 2>/dev/null || date -v-90d +%Y-%m-%dT%H:%M:%S)
aws iam get-credential-report --output text --query Content | base64 -d | \
awk -F, -v t="$THRESHOLD"'NR>1 && $5!="N/A" && $5!="no_information" && $5<t {
print $1","$5
}' | tee"$OUTPUT_DIR/inactive-users.csv"echo"--- Stale Access Keys (90+ days unused) ---"for user in $(aws iam list-users --query 'Users[*].UserName' --output text); dofor key_id in $(aws iam list-access-keys --user-name "$user" \
--query --output text);
last_used=$(aws iam get-access-key-last-used --access-key-id \
--query --output text)
[ = ] || [ \< ];
|
user $(aws iam list-users --query --output text);
policies=$(aws iam list-attached-user-policies --user-name \
--query --output text)
| grep -qi ;
=$(aws iam list-groups-for-user --user-name \
--query --output text)
|
role $(aws iam list-roles --query --output text);
trust=$(aws iam get-role --role-name \
--query --output json 2>/dev/null)
| grep -q && | grep -qv ;
| jq -c
|
aws iam get-credential-report --output text --query Content | -d | \
awk -F, | \
GitHub Access Review
#!/usr/bin/env bash# github-access-review.sh - GitHub organization access audit
ORG="your-org"
OUTPUT_DIR="./access-review/github/$(date +%Y-%m)"mkdir -p "$OUTPUT_DIR"echo"=== GitHub Organization Access Review ==="echo"--- Organization Members ---"
gh api orgs/$ORG/members --paginate \
--jq '.[] | [.login, .site_admin] | @csv' \
> "$OUTPUT_DIR/org-members.csv"echo"--- Organization Owners ---"
gh api "orgs/$ORG/members?role=admin" --paginate \
--jq '.[] | .login' \
> "$OUTPUT_DIR/org-owners.txt"echo"--- Outside Collaborators ---"
gh api orgs/$ORG/outside_collaborators --paginate \
--jq '.[] | .login' \
> "$OUTPUT_DIR/outside-collaborators.txt"echo"--- Repository Access Per Repo ---"for repo in $(gh repo list $ORG --json name -q '.[].name' --limit 500); doecho"Repo: $repo"
gh api "repos/$ORG/$repo/collaborators" --paginate \
--jq '.[] | [.login, .role_name] | @csv' \
> "$OUTPUT_DIR/repo-$repo-access.csv" 2>/dev/null
team $(gh api orgs//teams --paginate --jq );
gh api --paginate \
--jq \
>
gh api orgs//invitations --paginate \
--jq \
>
repo $(gh repo list --json name -q -- 500);
keys=$(gh api --jq 2>/dev/null)
[ -n ];
>
repo $(gh repo list --json name -q -- 500);
protection=$(gh api 2>/dev/null)
[ $? -eq 0 ];
| jq \
>
>>