Install
$ agentstack add skill-shieldnet-360-secure-vibe-iam-best-practices ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
Identity & Access Management Best Practices
Least-privilege IAM design, key rotation, MFA enforcement, role assumption, and cross-account access patterns for AWS / GCP / Azure / Kubernetes
ALWAYS
- Grant the minimum permissions required for the workload's stated job (NIST AC-6). Start with a deny-by-default policy and add concrete actions with explicit
ResourceARNs; neverAction: "*"combined withResource: "*". - Prefer workload identity (IAM roles for service accounts on EKS, GKE Workload Identity, Azure Managed Identity) over long-lived access keys. Static access keys are the exception, not the default.
- Require MFA for every human IAM user, especially any principal that can assume a privileged role. Enforce MFA via an IAM policy condition (
aws:MultiFactorAuthPresent: true), not just a directory-level setting. - Rotate access keys, service-account keys, and signing keys on a documented schedule (≤ 90 days). Detect inactive credentials (≥ 90 days unused) and disable them automatically.
- Use role assumption with
sts:AssumeRole+ ExternalId for cross-account trust. The ExternalId must be unique per consumer and stored as a secret in both accounts. - Issue session-scoped credentials with
MaxSessionDuration ≤ 1hfor human roles and ≤ 12h for break-glass roles. Long-lived sessions defeat rotation. - Separate deploy and runtime identities. The CI/CD pipeline gets a deploy role; the running service gets a distinct runtime role with no IAM-mutating permissions.
- For Kubernetes RBAC, scope
Role/RoleBindingto a single namespace; useClusterRoleonly for true cluster-wide objects. Auditcluster-adminbindings on every PR. - Log every IAM-mutating call (CloudTrail / Cloud Audit Logs / Azure Activity Log) to a tamper-evident sink. Alert on policy changes,
iam:PassRole,iam:CreateAccessKey, andsts:AssumeRolefrom unexpected principals. - For break-glass access (root, owner, cluster-admin), require an out-of-band approval (e.g., PagerDuty incident + ticket) and emit an immediate alert on every use.
- Tag every IAM principal with
owner,environment, andpurpose. Use these tags in SCPs / org policies to constrain blast radius.
NEVER
- Use the root account for day-to-day operations. Root credentials get a hardware MFA device, are stored offline, and are used only for the small set of root-only tasks (e.g., closing the account, changing the support plan).
- Embed long-lived access keys in source, container images, AMIs, or CI environment variables when a workload identity is available.
- Grant
iam:PassRolewithResource: "*". Always pin the role ARNs the caller may pass to downstream services. - Grant
iam:*orsts:*to a runtime workload — these are deploy-time permissions only. - Share a single IAM user across multiple humans or services. One principal per identity is the audit invariant.
- Use
AdministratorAccess(or any*:*) managed policy on a routine basis; treat it as a break-glass-only attachment. - Trust any cross-account assume-role without an
ExternalIdcondition for third-party integrations (Confused Deputy: AWS Security Bulletin 2021). - Hard-code AWS / GCP / Azure ARNs / resource IDs in policy documents without a corresponding tag-based or organization-path scope (when the number of resources can grow).
- Disable MFA for a principal to "fix" a login problem — rotate the device, do not remove the requirement.
- Persist OIDC / SAML assertion tokens beyond their stated TTL. Refresh by re-assertion, not by storing the original token.
KNOWN FALSE POSITIVES
Resource: "*"is acceptable for inherently account-scoped read operations likeec2:DescribeRegionsorsts:GetCallerIdentity— those APIs do not accept a resource ARN.- Service-linked roles (e.g.,
AWSServiceRoleForAutoScaling) ship with broader permissions than your custom roles; that is by design and managed by the provider. - One-time bootstrap operators (Terraform-runners in a fresh account) often need elevated permissions; gate by tag / SCP and revoke after the bootstrap is complete.
- Local-development emulators (LocalStack, GCS emulator) may accept any credentials; that is a property of the emulator, not a real grant.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: ShieldNet-360
- Source: ShieldNet-360/secure-vibe
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.