securing-aws-iam-permissions
本技能引导从业者加固 AWS 身份和访问管理(Identity and Access Management)配置,在云账户中强制执行最小权限(Least Privilege)访问。涵盖 IAM 策略范围界定、权限边界(Permission Boundary)、Access Analyzer 集成和凭据轮换策略,以降低受损身份的影响范围。
Best use case
securing-aws-iam-permissions is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
本技能引导从业者加固 AWS 身份和访问管理(Identity and Access Management)配置,在云账户中强制执行最小权限(Least Privilege)访问。涵盖 IAM 策略范围界定、权限边界(Permission Boundary)、Access Analyzer 集成和凭据轮换策略,以降低受损身份的影响范围。
Teams using securing-aws-iam-permissions should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/securing-aws-iam-permissions/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How securing-aws-iam-permissions Compares
| Feature / Agent | securing-aws-iam-permissions | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
本技能引导从业者加固 AWS 身份和访问管理(Identity and Access Management)配置,在云账户中强制执行最小权限(Least Privilege)访问。涵盖 IAM 策略范围界定、权限边界(Permission Boundary)、Access Analyzer 集成和凭据轮换策略,以降低受损身份的影响范围。
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# 保护 AWS IAM 权限
## 适用场景
- 接入需要范围化 IAM 策略的新 AWS 账户或工作负载时
- IAM Access Analyzer 报告过度宽松的策略或未使用的权限时
- 准备需要最小权限证据的合规审计(SOC 2、PCI-DSS)时
- 从长期访问密钥迁移到基于角色的短期凭据时
- 修复 AWS Security Hub 中与 IAM 错误配置相关的发现时
**不适用于**:Azure AD 或 Google Cloud IAM 配置、应用层授权逻辑,或联合身份(Federated Identity)提供商设置(参见 managing-cloud-identity-with-okta)。
## 前置条件
- 具有管理员访问权限或 IAM:FullAccess 权限的 AWS 账户
- 已安装 AWS CLI v2 并配置命名配置文件
- 已启用 AWS CloudTrail 并保留至少 90 天的 API 活动历史
- 熟悉基于 JSON 的 IAM 策略语法和 ARN 资源表示法
## 工作流程
### 步骤 1:清点现有 IAM 实体和策略
使用 AWS CLI 和 IAM 凭据报告生成所有 IAM 用户、角色、组和附加策略的完整清单。识别具有控制台访问、程序化访问密钥及其最近使用时间戳的账户。
```bash
# 生成 IAM 凭据报告
aws iam generate-credential-report
aws iam get-credential-report --query 'Content' --output text | base64 -d > iam-report.csv
# 列出所有 IAM 角色及其附加的策略
aws iam list-roles --query 'Roles[*].[RoleName,Arn,CreateDate]' --output table
# 查找访问密钥超过 90 天的用户
aws iam list-users --query 'Users[*].UserName' --output text | while read user; do
aws iam list-access-keys --user-name "$user" \
--query "AccessKeyMetadata[?CreateDate<='$(date -d '-90 days' +%Y-%m-%d)'].[UserName,AccessKeyId,Status,CreateDate]" \
--output table
done
```
### 步骤 2:启用并分析 IAM Access Analyzer 发现
在组织或账户级别激活 IAM Access Analyzer,识别外部共享的资源,并根据 CloudTrail 活动生成最小权限策略建议。
```bash
# 为账户创建 Access Analyzer
aws accessanalyzer create-analyzer \
--analyzer-name account-analyzer \
--type ACCOUNT
# 列出外部访问的活跃发现
aws accessanalyzer list-findings \
--analyzer-arn arn:aws:access-analyzer:us-east-1:123456789012:analyzer/account-analyzer \
--filter '{"status": {"eq": ["ACTIVE"]}}'
# 根据特定角色的 CloudTrail 活动生成策略
aws accessanalyzer start-policy-generation \
--policy-generation-details '{
"principalArn": "arn:aws:iam::123456789012:role/AppRole",
"cloudTrailDetails": {
"trailArn": "arn:aws:cloudtrail:us-east-1:123456789012:trail/management-trail",
"startTime": "2025-01-01T00:00:00Z",
"endTime": "2025-03-01T00:00:00Z"
}
}'
```
### 步骤 3:将策略范围限定到特定资源和条件
将通配符资源 ARN 替换为具体资源标识符。添加 IAM 策略条件,用于 MFA 强制执行、源 IP 限制和基于时间的访问窗口。
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowS3ReadSpecificBucket",
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:ListBucket"
],
"Resource": [
"arn:aws:s3:::production-data-bucket",
"arn:aws:s3:::production-data-bucket/*"
],
"Condition": {
"Bool": {"aws:MultiFactorAuthPresent": "true"},
"IpAddress": {"aws:SourceIp": "10.0.0.0/8"},
"DateGreaterThan": {"aws:CurrentTime": "2025-01-01T00:00:00Z"}
}
}
]
}
```
### 步骤 4:实施权限边界
为 IAM 角色和用户附加权限边界(Permission Boundary),定义实体可接收的最大权限范围,即使管理员附加了过度宽松的策略,也能防止权限提升。
```bash
# 创建权限边界策略
aws iam create-policy \
--policy-name DeveloperPermissionBoundary \
--policy-document file://developer-boundary.json
# 将边界附加到 IAM 角色
aws iam put-role-permissions-boundary \
--role-name DeveloperRole \
--permissions-boundary "arn:aws:iam::123456789012:policy/DeveloperPermissionBoundary"
```
```json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "AllowCommonServices",
"Effect": "Allow",
"Action": [
"s3:*",
"dynamodb:*",
"lambda:*",
"logs:*",
"cloudwatch:*"
],
"Resource": "*"
},
{
"Sid": "DenyIAMChanges",
"Effect": "Deny",
"Action": [
"iam:CreateUser",
"iam:DeleteUser",
"iam:CreateRole",
"iam:DeleteRole",
"iam:AttachRolePolicy",
"iam:PutRolePermissionsBoundary"
],
"Resource": "*"
}
]
}
```
### 步骤 5:强制执行 MFA 并消除长期凭据
要求所有访问 AWS 控制台和 CLI 的人工用户使用 MFA。将工作负载从 IAM 用户访问密钥迁移到通过 STS AssumeRole 获取临时凭据的 IAM 角色。
```bash
# 通过 SCP 在组织级别强制执行 MFA
aws organizations create-policy \
--name RequireMFA \
--type SERVICE_CONTROL_POLICY \
--content '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DenyAllExceptMFA",
"Effect": "Deny",
"NotAction": [
"iam:CreateVirtualMFADevice",
"iam:EnableMFADevice",
"iam:ListMFADevices",
"iam:ResyncMFADevice",
"sts:GetSessionToken"
],
"Resource": "*",
"Condition": {
"BoolIfExists": {"aws:MultiFactorAuthPresent": "false"}
}
}
]
}'
# 停用未使用的访问密钥
aws iam update-access-key --user-name old-user --access-key-id AKIAEXAMPLE --status Inactive
```
### 步骤 6:自动化持续 IAM 监控
部署 AWS Config 规则和 Security Hub 控制,持续评估 IAM 安全态势。设置 EventBridge 规则,对高风险 IAM 变更(如创建新的 Root 访问密钥或修改策略)发出告警。
```bash
# 启用 IAM 密码策略的 AWS Config 规则
aws configservice put-config-rule \
--config-rule '{
"ConfigRuleName": "iam-password-policy",
"Source": {
"Owner": "AWS",
"SourceIdentifier": "IAM_PASSWORD_POLICY"
},
"InputParameters": "{\"RequireUppercaseCharacters\":\"true\",\"RequireLowercaseCharacters\":\"true\",\"RequireSymbols\":\"true\",\"RequireNumbers\":\"true\",\"MinimumPasswordLength\":\"14\",\"MaxPasswordAge\":\"90\"}"
}'
# EventBridge 规则检测 Root 账户使用情况
aws events put-rule \
--name DetectRootUsage \
--event-pattern '{
"detail-type": ["AWS API Call via CloudTrail"],
"detail": {
"userIdentity": {"type": ["Root"]}
}
}'
```
## 核心概念
| 术语 | 定义 |
|------|------|
| 最小权限(Least Privilege) | 仅授予身份执行其功能所需的最低权限 |
| 权限边界(Permission Boundary) | 高级 IAM 功能,设置实体可拥有的最大权限,不受附加策略影响 |
| IAM Access Analyzer | 使用自动推理识别外部共享资源并根据 CloudTrail 活动生成最小权限策略的 AWS 服务 |
| 服务控制策略(SCP) | 在 AWS Organizations 的所有账户中设置权限护栏的组织级别策略 |
| AssumeRole | STS 操作,返回用于跨账户或服务间访问的临时安全凭据 |
| 凭据报告(Credential Report) | AWS 生成的 CSV 文件,列出所有 IAM 用户、访问密钥、MFA 状态和最近活动时间戳 |
| 策略条件(Policy Condition) | IAM 策略中限制权限适用时间和方式的约束条件,例如 MFA 要求或 IP 范围限制 |
| 联合身份(Identity Federation) | 允许外部身份提供商无需创建 IAM 用户即可授予临时 AWS 访问权限 |
## 工具与系统
- **AWS IAM Access Analyzer**:从 CloudTrail 活动生成最小权限策略,识别与外部实体共享的资源
- **AWS Config**:根据托管和自定义规则持续评估 IAM 配置合规性
- **AWS Security Hub**:将来自 Access Analyzer、Config 和第三方工具的 IAM 安全发现汇总到统一仪表板
- **IAM Policy Simulator**:在部署前通过模拟 API 调用测试 IAM 策略效果
- **Prowler**:开源 AWS 安全评估工具,运行 300+ 项检查,包括 IAM 最佳实践和 CIS Benchmark 控制
## 常见场景
### 场景:开发者角色过度授权了 AdministratorAccess
**场景背景**:初创公司在早期开发阶段为了效率,为所有开发者角色附加了 AWS 管理的 AdministratorAccess 策略。安全审计发现 15 个角色具有完全账户访问权限,而开发者实际只使用 S3、Lambda 和 DynamoDB。
**方法**:
1. 启用 IAM Access Analyzer,根据每个角色 90 天的 CloudTrail 数据生成策略建议
2. 创建仅允许访问各团队实际使用的特定 S3 存储桶、Lambda 函数和 DynamoDB 表的范围化策略
3. 附加拒绝 IAM、Organizations 和计费操作的权限边界
4. 在并行角色中部署新策略并通过 CloudTrail 监控后,再替换原始角色
5. 移除 AdministratorAccess 并轮换所有访问密钥
**常见陷阱**:未经并行测试阶段直接替换策略会导致服务中断。忘记将 Lambda:InvokeFunction 限定到特定函数 ARN 会留下横向移动路径。
### 场景:跨多个服务轮换受损访问密钥
**场景背景**:在公开 GitHub 仓库中发现一个访问密钥。该密钥属于在三个 AWS 账户中具有 S3 和 EC2 权限的 IAM 用户。
**方法**:
1. 立即使用 `aws iam update-access-key --status Inactive` 停用受损密钥
2. 检查 CloudTrail 日志,审查过去 30 天内使用受损密钥进行的所有 API 调用
3. 为用户创建新访问密钥,并更新所有依赖的服务和 CI/CD 流水线
4. 确认所有服务使用新凭据后,删除受损密钥
5. 将工作负载迁移到使用 IAM 角色和 STS 临时凭据,防止未来密钥泄露
**常见陷阱**:在停用密钥前直接删除会阻碍对哪些服务依赖它的取证分析。未检查所有三个账户的未授权活动会留下潜在后门未被发现。
## 输出格式
```
IAM 安全评估报告
==============================
账户 ID: 123456789012
评估日期: 2025-02-23
分析器: IAM Access Analyzer + Prowler v4.3
严重发现:
[C-001] Root 账户有活跃访问密钥
- 资源: arn:aws:iam::123456789012:root
- 修复建议: 删除 Root 访问密钥,为 Root 启用 MFA
- CIS Benchmark: 1.4(确保不存在 Root 账户访问密钥)
[C-002] IAM 用户 'deploy-bot' 具有 AdministratorAccess 且无 MFA
- 资源: arn:aws:iam::123456789012:user/deploy-bot
- 最近活动: 2025-02-20
- 修复建议: 替换为 IAM 角色,强制 MFA 条件
高危发现:
[H-001] 3 条 IAM 策略对敏感操作使用通配符资源 "*"
- 策略: DevPolicy, CIPolicy, LegacyAdminPolicy
- 修复建议: 使用 Access Analyzer 将资源限定到特定 ARN
[H-002] 检测到 7 个超过 90 天的访问密钥
- 用户: svc-backup, svc-monitoring, dev-alice, dev-bob, ...
- 修复建议: 轮换密钥,迁移到基于角色的访问
摘要:
总发现数: 14
严重: 2 | 高危: 4 | 中危: 5 | 低危: 3
合规分数: 62%(CIS AWS Foundations Benchmark v3.0)
```Related Skills
securing-serverless-functions
本技能涵盖 AWS Lambda、Azure Functions 和 Google Cloud Functions 等无服务器计算平台的安全加固,涉及最小权限 IAM 角色、依赖漏洞扫描、密钥管理集成、输入验证、函数 URL 认证以及运行时监控,以防范注入攻击、凭证窃取和供应链攻击。
securing-remote-access-to-ot-environment
本技能涵盖为操作员、工程师和供应商实施OT/ICS环境的安全远程访问,同时防止可能危害工业运营的未授权访问。涉及跳板服务器架构、多因素认证、会话记录、特权访问管理、供应商远程访问控制,以及符合IEC 62443和NERC CIP-005远程访问要求。
securing-kubernetes-on-cloud
本技能涵盖通过实施 Pod 安全标准(Pod Security Standards)、网络策略、工作负载身份、RBAC 权限控制、镜像准入控制和运行时安全监控,对 EKS、AKS 和 GKE 上的托管 Kubernetes 集群进行加固。涉及云平台特定安全功能,包括 EKS 的 IRSA、GKE 的工作负载身份(Workload Identity)以及 AKS 的托管身份(Managed Identity)。
securing-historian-server-in-ot-environment
本技能涵盖在OT环境中加固和保护过程历史数据服务器(OSIsoft PI、Honeywell PHD、GE Proficy、AVEVA Historian)。涉及跨Purdue模型各层级的网络部署、历史数据服务器接口的访问控制、通过数据二极管或PI-to-PI连接器在DMZ中进行数据复制、历史数据查询中的SQL注入防护,以及用于安全分析、法规报告和过程优化的过程数据完整性保护。
securing-helm-chart-deployments
通过验证 Chart 完整性、扫描模板中的错误配置并在 Kubernetes 发布中强制执行安全上下文,保护 Helm Chart 部署安全。
securing-github-actions-workflows
本技能涵盖加固 GitHub Actions 工作流以防范供应链攻击、凭据盗窃和权限提升。 内容包括将 action 固定到 SHA 摘要、最小化 GITHUB_TOKEN 权限、防止机密泄露、 防止工作流表达式中的脚本注入,以及为工作流变更实施必要的审阅者机制。
securing-container-registry-with-harbor
Harbor 是一个开源容器镜像仓库,提供安全功能包括漏洞扫描(集成 Trivy)、镜像签名(Notary/Cosign)、RBAC、内容信任策略(Content Trust)、复制和审计日志。配置这些功能以强制执行镜像来源验证、防止有漏洞镜像部署并维护仓库访问控制。
securing-container-registry-images
通过使用 Trivy 和 Grype 实施漏洞扫描、使用 Cosign 和 Sigstore 强制执行镜像签名、配置镜像仓库访问控制,以及构建阻止部署未扫描或未签名镜像的 CI/CD 流水线,来保护容器仓库(Container Registry)中的镜像安全。
securing-api-gateway-with-aws-waf
通过配置 OWASP Top 10 防护托管规则组(Managed Rule Group)、创建自定义速率限制规则、实施机器人(Bot)控制、设置 IP 信誉过滤以及监控 WAF 指标,使用 AWS WAF 保护 API Gateway 端点。
auditing-kubernetes-rbac-permissions
Kubernetes 基于角色的访问控制(RBAC)审计,系统性地审查角色、集群角色、绑定关系及服务账户权限,以识别过度宽松的访问配置、权限提升路径及违反最小权限原则的情况。
auditing-gcp-iam-permissions
使用 gcloud CLI、Policy Analyzer 和 IAM Recommender,审计 Google Cloud Platform IAM 权限, 识别过度宽松的绑定、原始角色使用、服务账户密钥泛滥和跨项目访问风险。
auditing-aws-s3-bucket-permissions
使用 AWS CLI、S3audit 和 Prowler,系统性审计 AWS S3 存储桶权限,识别可公开访问的存储桶、 过度宽松的 ACL、错误配置的存储桶策略和缺失的加密设置,以强制执行最小权限数据访问控制。