auditing-gcp-iam-permissions

使用 gcloud CLI、Policy Analyzer 和 IAM Recommender,审计 Google Cloud Platform IAM 权限, 识别过度宽松的绑定、原始角色使用、服务账户密钥泛滥和跨项目访问风险。

9 stars

Best use case

auditing-gcp-iam-permissions is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

使用 gcloud CLI、Policy Analyzer 和 IAM Recommender,审计 Google Cloud Platform IAM 权限, 识别过度宽松的绑定、原始角色使用、服务账户密钥泛滥和跨项目访问风险。

Teams using auditing-gcp-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

$curl -o ~/.claude/skills/auditing-gcp-iam-permissions/SKILL.md --create-dirs "https://raw.githubusercontent.com/killvxk/cybersecurity-skills-zh/main/skills/auditing-gcp-iam-permissions/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/auditing-gcp-iam-permissions/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How auditing-gcp-iam-permissions Compares

Feature / Agentauditing-gcp-iam-permissionsStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

使用 gcloud CLI、Policy Analyzer 和 IAM Recommender,审计 Google Cloud Platform IAM 权限, 识别过度宽松的绑定、原始角色使用、服务账户密钥泛滥和跨项目访问风险。

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

# 审计 GCP IAM 权限

## 适用场景

- 对 GCP 组织或项目 IAM 配置进行安全评估时
- 识别具有过多权限或未使用访问的服务账户时
- 合规要求要求审查访问控制和角色分配时
- 调查通过 IAM 错误配置实现的横向移动时
- 通过缩减权限范围减少失陷凭据的爆炸半径时

**不适用于**:VPC 防火墙规则审计(使用网络安全工具)、GKE RBAC 审计(使用 Kubernetes 专用 RBAC 工具),或 IAM 操作的实时威胁检测(使用 SCC Event Threat Detection)。

## 前置条件

- GCP 组织或项目具备 `roles/iam.securityReviewer` 和 `roles/cloudAsset.viewer`
- gcloud CLI 已使用适当权限认证
- Cloud Asset API 已启用(`gcloud services enable cloudasset.googleapis.com`)
- IAM Recommender API 已启用(`gcloud services enable recommender.googleapis.com`)
- Policy Analyzer API 已启用(`gcloud services enable policyanalyzer.googleapis.com`)

## 工作流程

### 步骤 1:枚举整个组织的 IAM 绑定

在组织、文件夹和项目层级列出所有 IAM 绑定,以了解完整的访问状况。

```bash
# 组织级 IAM 绑定
gcloud organizations get-iam-policy ORG_ID \
  --format=json > org-iam-policy.json

# 跨组织搜索所有 IAM 策略
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --format="table(resource, policy.bindings.role, policy.bindings.members)" \
  --limit=500

# 查找所有具有 Owner 角色的用户和服务账户
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --query="policy:roles/owner" \
  --format="table(resource, policy.bindings.members)"

# 查找所有使用原始角色(Owner、Editor、Viewer)的绑定
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --query="policy:roles/owner OR policy:roles/editor" \
  --format=json | python3 -c "
import json, sys
data = json.load(sys.stdin)
for result in data:
    resource = result.get('resource', '')
    for binding in result.get('policy', {}).get('bindings', []):
        role = binding.get('role', '')
        if role in ['roles/owner', 'roles/editor']:
            for member in binding.get('members', []):
                print(f'{resource} | {role} | {member}')
"
```

### 步骤 2:审计服务账户及其密钥

识别权限过高、使用用户管理密钥和未使用的服务账户。

```bash
# 列出项目中所有服务账户
gcloud iam service-accounts list \
  --project=PROJECT_ID \
  --format="table(email, displayName, disabled)"

# 检查用户管理的密钥(应最小化)
for sa in $(gcloud iam service-accounts list --project=PROJECT_ID --format="value(email)"); do
  keys=$(gcloud iam service-accounts keys list \
    --iam-account="$sa" \
    --managed-by=user \
    --format="table(name.basename(),validAfterTime,validBeforeTime)")
  if [ -n "$keys" ]; then
    echo "=== $sa ==="
    echo "$keys"
  fi
done

# 查找所有项目中具有管理员角色的服务账户
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --query="policy.bindings.members:serviceAccount AND (policy:roles/owner OR policy:roles/editor OR policy:admin)" \
  --format="table(resource, policy.bindings.role, policy.bindings.members)"

# 检查服务账户 IAM 策略(谁可以冒充)
for sa in $(gcloud iam service-accounts list --project=PROJECT_ID --format="value(email)"); do
  echo "=== $sa ==="
  gcloud iam service-accounts get-iam-policy "$sa" --format=json 2>/dev/null
done
```

### 步骤 3:使用 IAM Recommender 识别多余权限

利用 GCP 的 IAM Recommender 查找授予超出实际使用权限的角色。

```bash
# 列出项目的 IAM 角色建议
gcloud recommender recommendations list \
  --project=PROJECT_ID \
  --recommender=google.iam.policy.Recommender \
  --location=global \
  --format="table(name, description, priority, stateInfo.state)"

# 获取详细建议
gcloud recommender recommendations describe RECOMMENDATION_ID \
  --project=PROJECT_ID \
  --recommender=google.iam.policy.Recommender \
  --location=global \
  --format=json

# 列出 IAM 使用洞察
gcloud recommender insights list \
  --project=PROJECT_ID \
  --insight-type=google.iam.policy.Insight \
  --location=global \
  --format="table(name, description, severity, category)"

# 应用建议(审查后)
gcloud recommender recommendations mark-claimed RECOMMENDATION_ID \
  --project=PROJECT_ID \
  --recommender=google.iam.policy.Recommender \
  --location=global \
  --etag=ETAG
```

### 步骤 4:使用 Policy Analyzer 分析有效权限

使用 Policy Analyzer 确定特定主体或资源的有效访问权限。

```bash
# 检查谁有权访问特定资源
gcloud asset analyze-iam-policy \
  --organization=ORG_ID \
  --full-resource-name="//storage.googleapis.com/projects/_/buckets/sensitive-data-bucket" \
  --format="table(identityList.identities, accessControlLists.accesses.role)"

# 检查特定用户可以访问哪些资源
gcloud asset analyze-iam-policy \
  --organization=ORG_ID \
  --identity="user:developer@company.com" \
  --format="table(accessControlLists.resources.fullResourceName, accessControlLists.accesses.role)"

# 检查谁可以执行特定操作
gcloud asset analyze-iam-policy \
  --organization=ORG_ID \
  --full-resource-name="//cloudresourcemanager.googleapis.com/projects/PROJECT_ID" \
  --permissions="iam.serviceAccounts.actAs,iam.serviceAccountKeys.create" \
  --format="table(identityList.identities, accessControlLists.accesses.permission)"

# 查找所有具有 allUsers 或 allAuthenticatedUsers 访问的主体
gcloud asset search-all-iam-policies \
  --scope=organizations/ORG_ID \
  --query="policy:allUsers OR policy:allAuthenticatedUsers" \
  --format="table(resource, policy.bindings.role, policy.bindings.members)"
```

### 步骤 5:检查域范围委托和冒充风险

识别具有域范围委托和冒充能力的服务账户。

```bash
# 检查具有域范围委托的服务账户
# (需要 Admin SDK 访问权限列出委托账户)
gcloud iam service-accounts list --project=PROJECT_ID --format=json | python3 -c "
import json, sys
accounts = json.load(sys.stdin)
for sa in accounts:
    email = sa.get('email', '')
    # 检查 SA 是否启用了域范围委托
    # 这需要 Admin SDK API 访问权限
    print(f'SA: {email} - 请在 admin.google.com 检查委托状态')
"

# 查找其他身份可以冒充的服务账户
for sa in $(gcloud iam service-accounts list --project=PROJECT_ID --format="value(email)"); do
  policy=$(gcloud iam service-accounts get-iam-policy "$sa" --format=json 2>/dev/null)
  if echo "$policy" | python3 -c "
import json, sys
p = json.load(sys.stdin)
for b in p.get('bindings', []):
    if b['role'] in ['roles/iam.serviceAccountTokenCreator', 'roles/iam.serviceAccountUser']:
        print(f'  {b[\"role\"]}: {b[\"members\"]}')
" 2>/dev/null; then
    echo "=== 冒充风险: $sa ==="
  fi
done
```

### 步骤 6:生成审计报告并实施修复

汇总发现并实施建议的权限缩减措施。

```bash
# 移除原始角色并替换为预定义角色
gcloud projects remove-iam-policy-binding PROJECT_ID \
  --member="user:developer@company.com" \
  --role="roles/editor"

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:developer@company.com" \
  --role="roles/compute.viewer"

gcloud projects add-iam-policy-binding PROJECT_ID \
  --member="user:developer@company.com" \
  --role="roles/storage.objectViewer"

# 删除未使用的服务账户密钥
gcloud iam service-accounts keys delete KEY_ID \
  --iam-account=SA_EMAIL

# 禁用未使用的服务账户
gcloud iam service-accounts disable SA_EMAIL --project=PROJECT_ID
```

## 核心概念

| 术语 | 定义 |
|------|------------|
| 原始角色(Primitive Role) | 旧版 GCP 角色(Owner、Editor、Viewer),授予所有服务的广泛权限,不推荐在生产环境使用 |
| 预定义角色(Predefined Role) | GCP 管理的角色,范围限定于特定服务和操作,比原始角色提供更细粒度的访问 |
| IAM Recommender | GCP 基于机器学习的服务,分析实际权限使用情况并建议角色缩减以实现最小权限 |
| Policy Analyzer | 分析整个组织层级有效 IAM 访问的工具,可回答"谁能访问什么"的查询 |
| 服务账户密钥(Service Account Key) | 用于服务账户认证的用户管理凭据,密钥可被导出且不会自动过期,存在安全风险 |
| 域范围委托(Domain-Wide Delegation) | 授予服务账户冒充 Google Workspace 域中任何用户的能力,是重大的权限提升风险 |

## 工具与系统

- **gcloud CLI**:查询和管理 GCP IAM 策略、服务账户和角色绑定的主要工具
- **IAM Recommender**:基于实际使用情况减少过多权限的机器学习建议引擎
- **Policy Analyzer**:组织范围内的有效访问分析工具,用于了解谁能访问什么
- **Cloud Asset Inventory**:跨项目搜索 IAM 策略和资源元数据
- **ScoutSuite**:多云审计工具,包含 GCP IAM 专项检查(角色分配和服务账户)

## 常见场景

### 场景:减少 GCP 组织中原始角色的使用

**场景背景**:审计发现组织内 60% 的 IAM 绑定使用原始角色(Owner/Editor)。安全团队需要在不中断开发者工作流的情况下迁移到预定义角色。

**方法**:
1. 运行 `gcloud asset search-all-iam-policies` 清点所有原始角色绑定
2. 使用 IAM Recommender 获取基于机器学习的替换预定义角色建议
3. 对每个绑定,使用 Policy Analyzer 了解主体实际访问的资源
4. 创建映射文档:原始角色 -> 所需的特定预定义角色
5. 在保留原始角色的同时添加预定义角色,进行测试期
6. 使用 Cloud Audit Logs 监控访问拒绝错误
7. 确认 2 周内无访问问题后,移除原始角色

**常见陷阱**:原始角色包含所有 GCP 服务的权限,替换需要多个预定义角色。如果观察期未涵盖所有使用场景,Recommender 可能会建议过于严格的角色。当没有预定义角色完全匹配所需权限集时,自定义角色可以填补空白。

## 输出格式

```
GCP IAM 权限审计报告
===================================
组织: acme-org (ORG_ID: 123456789)
已审计项目: 25
审计日期: 2026-02-23

IAM 绑定摘要:
  总绑定数:                    342
  使用原始角色:               205 (60%)
  使用预定义角色:             112 (33%)
  使用自定义角色:              25 (7%)

严重发现:
[IAM-001] 具有 Owner 角色的服务账户
  SA: admin-sa@prod-project.iam.gserviceaccount.com
  角色: 项目 prod-project 的 roles/owner
  用户管理密钥: 3 个(最旧: 14 个月)
  修复: 替换为特定预定义角色,删除旧密钥

[IAM-002] allAuthenticatedUsers 绑定
  资源: gs://public-data-bucket
  角色: roles/storage.objectViewer
  风险: 任何 Google 账户持有者均可读取存储桶内容
  修复: 限制为特定用户组或服务账户

服务账户健康状况:
  服务账户总数:                67
  具有用户管理密钥:            23
  密钥超过 90 天:              18
  未使用账户(90 天以上):     12
  具有域范围委托:               2

Recommender 建议:
  总建议数:                    45
  高优先级:                    12
  估计减少的权限数:          2,847 个独立权限
```

Related Skills

securing-aws-iam-permissions

9
from killvxk/cybersecurity-skills-zh

本技能引导从业者加固 AWS 身份和访问管理(Identity and Access Management)配置,在云账户中强制执行最小权限(Least Privilege)访问。涵盖 IAM 策略范围界定、权限边界(Permission Boundary)、Access Analyzer 集成和凭据轮换策略,以降低受损身份的影响范围。

auditing-terraform-infrastructure-for-security

9
from killvxk/cybersecurity-skills-zh

使用 Checkov、tfsec、Terrascan 和 OPA/Rego 策略,审计 Terraform 基础设施即代码中的安全错误配置, 在云部署前检测过度宽松的 IAM 策略、公开资源暴露、缺失加密和不安全的默认设置。

auditing-kubernetes-rbac-permissions

9
from killvxk/cybersecurity-skills-zh

Kubernetes 基于角色的访问控制(RBAC)审计,系统性地审查角色、集群角色、绑定关系及服务账户权限,以识别过度宽松的访问配置、权限提升路径及违反最小权限原则的情况。

auditing-kubernetes-cluster-rbac

9
from killvxk/cybersecurity-skills-zh

使用 kubectl、rbac-tool、KubiScan 和 Kubeaudit,审计 Kubernetes 集群 RBAC 配置, 识别过度宽松的角色、通配符权限、危险的 ClusterRoleBindings、服务账户滥用和权限提升路径。

auditing-cloud-with-cis-benchmarks

9
from killvxk/cybersecurity-skills-zh

本 skill 详细介绍如何使用互联网安全中心(Center for Internet Security)基准对 AWS、Azure 和 GCP 进行云安全审计。 涵盖解读 CIS Foundations Benchmark 控制项、使用 Prowler 和 ScoutSuite 等工具运行自动化评估、 修复未通过的控制项,以及针对 CIS AWS v5、Azure v4 和 GCP v4 维持持续合规监控。

auditing-azure-active-directory-configuration

9
from killvxk/cybersecurity-skills-zh

审计 Microsoft Entra ID(Azure Active Directory)配置,使用 AzureAD PowerShell、Microsoft Graph API 和 ScoutSuite 识别高风险身份验证策略、过度宽松的角色分配、过期账户、条件访问缺口和来宾用户风险。

auditing-aws-s3-bucket-permissions

9
from killvxk/cybersecurity-skills-zh

使用 AWS CLI、S3audit 和 Prowler,系统性审计 AWS S3 存储桶权限,识别可公开访问的存储桶、 过度宽松的 ACL、错误配置的存储桶策略和缺失的加密设置,以强制执行最小权限数据访问控制。

triaging-vulnerabilities-with-ssvc-framework

9
from killvxk/cybersecurity-skills-zh

使用 CISA 的利益相关方特定漏洞分类(SSVC)决策树框架对漏洞进行分类和优先排序,产出可操作的修复优先级:Track、Track*、Attend 或 Act。

triaging-security-incident

9
from killvxk/cybersecurity-skills-zh

使用 NIST SP 800-61r3 和 SANS PICERL 框架对安全事件进行初始分类,确定严重性、范围和所需响应行动。 按类型对事件分类,根据业务影响分配优先级,并路由到相应的响应团队。适用于事件分类、 安全告警分类、严重性评估、事件优先级排序或初始事件分析等请求场景。

triaging-security-incident-with-ir-playbook

9
from killvxk/cybersecurity-skills-zh

使用结构化 IR Playbook 对安全事件进行分类和优先排序,确定严重性、分配响应团队并启动适当的响应程序。

triaging-security-alerts-in-splunk

9
from killvxk/cybersecurity-skills-zh

在 Splunk Enterprise Security 中对安全告警进行分类,通过 SPL 查询和事件审查(Incident Review) 仪表板对重要事件进行严重性分类、调查、关联相关遥测并做出升级或关闭决策。 适用于 SOC 分析师需要处理关联搜索产生的告警队列、确定调查优先级, 或需要为交接给二/三级分析师记录分类决策时。

tracking-threat-actor-infrastructure

9
from killvxk/cybersecurity-skills-zh

威胁行为者基础设施追踪涉及使用被动 DNS、证书透明度日志、Shodan/Censys 扫描、WHOIS 分析和网络指纹技术,对对手控制的 C2 服务器、钓鱼域名和暂存服务器等资产进行监控、映射和持续追踪