mcpField
A
auditing-cloud-cluster-security

auditing-cloud-cluster-security

github.com/cockroachlabs安全23123 次安装14 周前更新
代码仓库

关于 auditing-cloud-cluster-security

auditing-cloud-cluster-security 是用于评估 CockroachDB Cloud 和自托管集群安全状况的只读技能。它检查网络访问、身份验证、权限、加密、日志、备份和 TLS,并生成含修复链接的 PASS/WARN/FAIL 报告。

主要功能

  1. 01网络访问控制检查
  2. 02身份验证与 SSO 审查
  3. 03用户与权限检查
  4. 04加密和 TLS 评估
  5. 05审计日志与备份检查
  6. 06含修复链接的结构化结果

适用场景

  1. 01准备合规审查
  2. 02评估新生产集群的安全基线
  3. 03调查事故后的安全配置缺口
  4. 04发布前审查集群

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/cockroachlabs/cockroachdb-skills --skill auditing-cloud-cluster-security

安装后在 Claude Code 中输入/auditing-cloud-cluster-security确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

references/
ccloud-commands.md
permissions.md
sample-report.md
sql-queries.md

详细介绍

审计云集群安全性

通过检查网络访问控制、身份验证和 SSO 配置、用户授权、加密、审计日志记录及备份状态,评估 CockroachDB Cloud 集群的安全状况。针对每项发现生成结构化的 PASS/WARN/FAIL 报告,并提供修复链接。支持 CockroachDB Cloud 和自托管集群;不适用于相应部署模式的检查会标记为 N/A。

只读审计: 所有操作均为只读。评估期间不会修改任何集群状态。

何时使用此技能

  • 为 SOC 2、HIPAA 或其他合规性审查做准备
  • 定期评估安全状况
  • 为新的生产集群进行接入,并验证安全基线
  • 在事件发生后调查安全配置缺口
  • 在重大发布或客户接入前审查集群安全性

前提条件

工具:

工具云端自托管用途
ccloud CLI必需N/A集群元数据、网络配置、CMEK
cockroach sql必需必需SQL 安全检查
openssl (v3+)推荐推荐TLS/PQC 密码套件探测(-starttls postgres)
sslyze可选可选全面的 TLS 枚举(--starttls postgres)

凭据:

凭据云端自托管
ccloud auth login 会话必需N/A
SQL 连接字符串必需(通过 ccloud cluster sql --url 获取)必需(由用户提供)
DB 用户名/密码必需(admin 或 VIEWACTIVITY)必需(admin 或 VIEWACTIVITY)
TLS 证书目录N/A(由服务管理)证书过期检查必需
CA 证书文件N/Aopenssl TLS 探测必需

有关详细的权限要求,请参阅权限参考。

安全审计维度

维度工具检查内容
网络安全ccloudIP 允许列表、专用端点
身份验证与 SSOccloud + sqlCloud Console SSO、Database SSO(Cluster SSO)、SCIM 2.0 配置、自动用户配置
授权sql用户、角色、admin 授权、PUBLIC 权限
加密ccloud + sqlCMEK 状态、TLS 设置
审计日志记录sql审计日志配置、会话日志记录
备份与恢复ccloud + sql托管备份状态、自行管理的备份计划
密码学状况sql + openssl + sslyzeTLS 版本、PQC 混合密码套件支持、加密密钥长度
集群上下文ccloud + 用户输入部署模式、环境、合规性、数据敏感度
集群配置ccloud版本、计划、区域

评估工作流

步骤 0:验证前提条件

运行以下检查,确定哪些工具可用。无论检查结果如何,审计都会继续;缺少工具只会降低特定检查的完整性,不会阻止审计。

云集群:

# Verify ccloud authentication
ccloud auth whoami

# Verify cluster access
ccloud cluster list -o json

两种部署模式:

# Verify SQL connectivity
cockroach sql --url "<connection-string>" -e "SELECT current_user();"

# Check openssl version (v3+ recommended for PQC probes)
openssl version

# Check sslyze availability
which sslyze && sslyze --version

继续前报告工具可用情况:

工具状态缺少时的影响
ccloud可用 / 缺失跳过网络、CMEK 和托管备份检查(仅限云端)
cockroach sql可用 / 缺失跳过所有基于 SQL 的检查——审计能力将受到严重限制
openssl (v3+)可用 / 缺失TLS 密码套件和 PQC 探测的完整性降低
sslyze可用 / 缺失无法进行全面的 TLS 枚举;改用 openssl

如果 cockroach sql 不可用,请告知用户审计将仅限于 ccloud 检查,并建议先解决连接问题再继续。对于缺少的可选工具(openssl、sslyze),请说明哪些检查的结果将不完整,然后继续。

步骤 1:收集集群元数据并确认审计背景

云集群:

# List clusters and identify target
ccloud cluster list -o json

# Get cluster details (use cluster name or ID)
ccloud cluster info <cluster-name> -o json

自托管集群:

# Gather metadata via SQL and cockroach CLI
cockroach node status --certs-dir=<certs-dir> --host=<host>
cockroach sql --url "<connection-string>" -e "SELECT version();"

记录:集群 ID、计划类型(Basic/Standard/Advanced 或自托管)、云提供商、区域、CockroachDB 版本。有关 Cloud CLI 语法,请参阅 ccloud commands reference。

确认审计背景: 展示自动检测到的元数据(集群名称、版本、提供商、区域、计划),并请用户确认并提供:

  1. 部署模型: CockroachDB Cloud / 自托管
  2. 环境: 生产 / 预发布 / 开发 / 沙盒
  3. 合规框架: SOC 2、HIPAA、PCI DSS、ISO 27001、GDPR,或无
  4. 数据敏感性: PII/PHI、财务/支付、内部业务、公开/非敏感

默认值(如果用户确认且未做更改):Cloud、生产、无合规要求、内部业务数据。部署模型决定检查项是否适用(见下文)。环境和合规要求用于调整严重性(参见严重性调整)。

按部署模型确定检查项是否适用
检查项Cloud自托管
IP 允许列表(ccloud)是(所有层级)不适用 — 通过防火墙/VPC 在外部管理
Ingress Private Endpoints(ccloud)是(Standard+、Advanced)不适用
Egress Private Endpoints(ccloud)是(Advanced)不适用
HBA 配置(SQL)是是 — 主要网络级身份验证控制
Cloud Console SSO是不适用
SCIM 2.0是不适用
数据库 SSO(OIDC)是是
数据库 SSO(LDAP/AD)是是
用户和角色(SQL)是是
权限(SQL)是是
CMEK(ccloud)是不适用 — 改为检查 Enterprise Encryption
Enterprise Encryption不适用是 — 通过存储配置验证静态加密
TLS始终为 PASS(强制启用)检查 — 验证证书、有效期和配置
TLS 1.3 / PQC / 密钥长度是(INFO)是(INFO)
审计日志(SQL)是是
托管备份(ccloud)是(自动)不适用
自管理备份(SQL)可选(存在托管备份时)是 — 验证备份计划是否存在并正在运行

跳过针对检测到的部署模型不适用的检查项,并在报告中标记为 [N/A],而不是 PASS/FAIL。

步骤 2:评估网络安全

云集群: 根据集群层级检查以下三个层面:

# IP allowlists (all tiers)
ccloud cluster networking allowlist list <cluster-id> -o json

# Ingress private endpoints (Standard+, Advanced) — via Cloud Console or API
# Cloud Console: Networking > Private endpoint tab
# API: GET /api/v1/clusters/{cluster_id}/networking/private-endpoint-connections

# Egress private endpoints (Advanced only) — via Cloud Console or API
# Cloud Console: Networking > Egress tab
# API: GET /api/v1/clusters/{cluster_id}/networking/egress-endpoints
-- HBA configuration (all tiers)
SHOW CLUSTER SETTING server.host_based_authentication.configuration;

评估(Cloud):

  • 如果 IP 允许列表中包含 0.0.0.0/0(允许所有流量),则标记为 FAIL
  • 如果允许列表包含宽泛的 CIDR 范围(例如 /8 或 /16),则标记为 WARN
  • 如果 Advanced 计划未配置私有端点,则标记为 WARN
  • 如果当前层级不支持私有端点,则标记为 INFO
  • 如果允许列表仅包含具体且范围较小的 CIDR,或已配置私有端点,则标记为 PASS

自托管集群: 将 HBA 配置作为主要网络级身份验证控制进行检查:

SHOW CLUSTER SETTING server.host_based_authentication.configuration;

评估(自托管):

  • 如果 HBA 配置为空或为默认配置,则标记为 WARN — 网络安全可能由外部设施(防火墙、安全组、VPC)管理,因此标记为 WARN 而非 FAIL
  • 如果 HBA 规则按 IP、子网或身份验证方法限制连接,则标记为 PASS
第 3 步:检查 SSO 和 SCIM 配置

对于可自托管集群,请跳过 Cloud Console 的 SSO 和 SCIM 检查(不适用)。数据库 SSO 检查仍然适用——检查 OIDC 和/或 LDAP/AD 配置。

Cloud Console SSO(Cloud Console UI > Organization Settings > Authentication — 不通过 ccloud CLI):

  • FAIL:未配置 SSO
  • PASS:已启用并强制实施 SAML 或 OIDC SSO

数据库 SSO(集群 SSO)——OIDC:

-- Check if Cluster SSO is enabled for SQL authentication
SHOW CLUSTER SETTING server.oidc_authentication.enabled;
SHOW CLUSTER SETTING server.oidc_authentication.provider_url;
  • FAIL:server.oidc_authentication.enabled 为 false
  • PASS:已启用,且提供程序 URL 有效

数据库 SSO——LDAP/AD(Cloud 和可自托管):

-- Check if LDAP authentication is configured via HBA
SHOW CLUSTER SETTING server.host_based_authentication.configuration;
-- Look for ldap auth method entries in the HBA configuration
  • PASS:HBA 中包含使用 ldap 身份验证方法的条目
  • INFO:未配置 LDAP(也可以使用 OIDC)

SCIM 2.0(Cloud Console UI > Organization Settings > Authentication > SCIM):

  • FAIL:未启用 SCIM 端点;PASS:已启用且已连接到 IdP

数据库自动用户配置:

-- Check if SQL users are automatically provisioned from SSO identities
SHOW CLUSTER SETTING server.identity_map.configuration;
  • FAIL:未配置身份映射
  • PASS:身份映射可将 IdP 身份路由到 SQL 用户
第 4 步:审计用户和角色
-- List all users and their roles
SELECT
  username,
  options,
  member_of
FROM [SHOW USERS]
ORDER BY username;

请参阅 SQL 查询参考,了解更多角色审计查询。

第 5 步:检查权限
-- Count admin role members
SELECT COUNT(*) AS admin_count
FROM [SHOW GRANTS ON ROLE admin];

-- Check PUBLIC role privileges on the current database
-- Note: SHOW GRANTS FOR public is scoped to the current database.
-- Run this query from each application database to get full coverage.
SELECT
  database_name,
  schema_name,
  object_name,
  object_type,
  privilege_type
FROM [SHOW GRANTS FOR public]
WHERE privilege_type NOT IN ('USAGE')
  AND schema_name = 'public'
ORDER BY database_name, object_name;

重要提示:SHOW GRANTS FOR public 的范围仅限当前数据库。运行 SHOW DATABASES;,并在每个数据库中重复执行此查询,以进行全面检查。

评估标准:

  • FAIL:具有管理员角色的用户超过 5 个
  • FAIL:PUBLIC 对应用程序表拥有 SELECT、INSERT、UPDATE 或 DELETE 权限
  • WARN:管理员数量为 3 至 5 个
  • PASS:管理员数量为 1-2 个,且 PUBLIC 仅拥有最低限度的授权
第 6 步:验证加密

CMEK 状态(Cloud 集群):

# Check CMEK configuration (Advanced plan with Advanced Security Add-on)
ccloud cluster info <cluster-name> -o json
# Look for cmek_config in the output

按计划类型评估(Cloud):

  • **Standard 计划:**INFO —“升级到带有 Advanced Security Add-on 的 Advanced 计划以启用 CMEK”
  • **不带 Advanced Security Add-on 的 Advanced 计划:**INFO —“添加 Advanced Security Add-on 以启用 CMEK”
  • **带有 Advanced Security Add-on、但未启用 CMEK 的 Advanced 计划:**FAIL —计划支持 CMEK,但尚未启用
  • **带有 Advanced Security Add-on、且已启用 CMEK 的 Advanced 计划:**PASS

企业级加密(可自托管——跳过 CMEK,改为检查此项):

静态数据企业级加密通过启动节点时设置 --enterprise-encryption 标志进行配置,不会作为 SQL 集群设置公开。 请通过以下方式确认:

  • 检查节点的启动参数(进程命令行 / systemd 单元 / Kubernetes Pod 规格)中是否包含 --enterprise-encryption=...

  • 检查每个节点的 Prometheus 端点: curl -ks https://<node>:8080/_status/vars | grep '^rocksdb_encryption_'

  • DB Console 中的 Advanced Debug → Stores 视图会报告每个存储的活动加密类型

  • FAIL:未启用加密,且集群存储敏感数据

  • WARN:无法确定加密状态

  • PASS:已启用 AES-256

**TLS(Cloud):**始终为 PASS——所有连接均强制使用 TLS。

**TLS(可自托管):**验证证书是否有效及其到期时间(不会自动判定为 PASS):

cockroach cert list --certs-dir=<certs-dir>
openssl x509 -in <certs-dir>/node.crt -noout -enddate
  • FAIL:任何证书将在 30 天内到期
  • WARN:任何证书将在 90 天内到期
  • PASS:所有证书均有效,且剩余有效期至少为 90 天

修复(可自托管):管理 TLS 证书

加密技术状况(Cloud 和可自托管,均仅供参考):

# Primary: sslyze with STARTTLS postgres (if available)
sslyze <host>:26257 --starttls postgres

# Supplementary: openssl with STARTTLS postgres
openssl s_client -connect <host>:26257 -starttls postgres -showcerts -tlsextdebug 2>&1

# PQC probe: offer ML-KEM hybrid, check if server accepts
openssl s_client -connect <host>:26257 -starttls postgres -groups X25519MLKEM768:x25519 2>&1
  • INFO — TLS 版本(应为 TLS 1.3;如果仅支持 TLS 1.2,请注明)
  • INFO — PQC 混合密码套件支持情况(例如 X25519MLKEM768)——仍在发展中,尚不构成 FAIL 条件
  • INFO — 加密密钥长度(检查是否为 AES-256;如果为 AES-128,请注明)

**注意:**CockroachDB 使用 PostgreSQL wire protocol,因此 openssl s_client 需要 -starttls postgres 才能正确协商 TLS。若不使用此标志,连接将失败。sslyze 同样需要 --starttls postgres。

步骤 7:检查审计日志记录
-- Check audit log configuration
SHOW CLUSTER SETTING sql.log.user_audit;

-- Check admin audit logging
SHOW CLUSTER SETTING sql.log.admin_audit.enabled;

评估:

  • 如果 sql.log.user_audit 为空且 sql.log.admin_audit.enabled 为 false,则为 FAIL
  • 如果仅启用了管理员审计,但未配置用户审计,则为 WARN
  • 如果已配置用户和管理员审计日志记录,则为 PASS
步骤 8:评估备份状态

云集群: 托管备份会自动执行——始终为 PASS。可选检查自管理的计划任务:

ccloud cluster info <cluster-name> -o json  # Look for backup_config
SHOW SCHEDULES;  -- Check for additional self-managed backup schedules

自托管集群: 没有托管备份——请验证自管理的备份计划任务:

SHOW SCHEDULES;
SELECT id, label, schedule_status, next_run, created
FROM [SHOW SCHEDULES]
WHERE label ILIKE '%backup%' OR command @> '{"backup":{}}';
  • 如果不存在备份计划任务,则为 FAIL
  • 如果存在计划任务,但显示错误或近期未运行,则为 WARN
  • 如果计划任务处于活动状态且正在运行,则为 PASS

修复(自托管):

CREATE SCHEDULE 'nightly-full-backup'
  FOR BACKUP INTO 'gs://bucket/backups'
  RECURRING '@daily'
  WITH SCHEDULE OPTIONS first_run = 'now';

PASS/WARN/FAIL 判定标准

检查项PASSWARNFAIL
IP 允许列表仅允许特定 CIDR范围较广(/8、/16)存在 0.0.0.0/0
Cloud Console SSO已启用并强制执行 SSO已启用 SSO,但未强制执行未配置
数据库 SSO已启用集群 SSO—未配置
SCIM 2.0已启用 SCIM 且已连接—未启用
DB 自动用户配置已配置身份映射—未配置
管理员用户1-2 位管理员3-5 位管理员6 位或以上管理员
PUBLIC 权限未授予数据权限仅授予 USAGE 权限SELECT/INSERT/UPDATE/DELETE
CMEK(Standard)不适用——(INFO:升级路径)
CMEK(Advanced + Security Add-on)已启用 CMEK—未启用
企业加密(自托管)已启用 AES-256无法确定未启用(敏感数据)
TLS(自托管)证书有效期为 90 天以上证书将在 30-90 天内过期证书将在 30 天内过期
TLS 1.3 / PQC / 密钥大小———(仅 INFO)
HBA(自托管)规则严格为空/默认值—
审计日志记录已启用用户和管理员审计仅管理员审计已禁用
密码策略最小长度 >= 12密码长度为 8-11密码长度 < 8
备份(云)不适用——(INFO:由托管服务提供)
备份(自托管)计划任务处于活动状态计划任务存在错误不存在计划任务

按环境调整严重级别

默认按生产环境校准严重级别。非生产环境会降低部分问题的严重级别。合规要求优先于降级规则。

检查项生产环境预发布环境开发环境沙盒环境
IP 允许列表中存在 0.0.0.0/0(云)FAILFAILWARNWARN
Advanced 上没有私有端点(云)WARNWARNINFOINFO
HBA 配置为空(自托管)WARNWARNINFOINFO
未配置 SSOFAILFAILINFOINFO
未启用 SCIMFAILFAILINFOINFO
已禁用数据库 SSOFAILFAILINFOINFO
管理员数量为 6 位或以上FAILFAILWARNWARN
未启用 CMEK(云)FAILFAILWARNWARN
未启用企业加密(自托管)FAILFAILWARNWARN
已禁用审计日志记录FAILFAILWARNINFO
没有备份计划任务(自托管)FAILFAILWARNINFO

合规覆盖规则 — 指定合规框架时,这些检查项不可降级(合规要求优先于环境):

框架不可降级的检查项
SOC 2SSO、审计日志记录、管理员用户、密码策略
HIPAASSO、CMEK/企业加密、审计日志记录、加密、密码策略、备份
PCI DSSIP 允许列表/HBA、CMEK/企业加密、审计日志记录、管理员用户、密码策略、备份
ISO 27001SSO、审计日志记录、管理员用户
GDPR审计日志记录、加密

注释: *(已从 FAIL 降级——开发集群)* 或 *(PCI DSS 合规要求——不可降级)*

报告格式

将每份审计报告保存到 reports/security-audit-<cluster-name>-<YYYY-MM-DD>-<sequence>.md(已加入 git 忽略规则,仅保存在本地)。reports/ 目录不会提交到版本控制;它用作本地日志,便于历史对比和跟踪整改。

生成一份符合以下结构的 Markdown 报告:

# Security Audit Report — <Cluster Name>

**Date:** YYYY-MM-DD
**Cluster ID:** <cluster-id>
**Plan:** Standard | Advanced | Self-hosted
**CockroachDB Version:** vXX.X.X
**Regions:** us-east-1, us-west-2
**Deployment:** CockroachDB Cloud | Self-hosted
**Environment:** production | staging | development | sandbox
**Compliance:** SOC 2, PCI DSS | (none specified)
**Data Sensitivity:** PII/PHI | financial | internal | public

## Summary

| Status | Count |
|--------|-------|
| PASS   | X     |
| WARN   | X     |
| FAIL   | X     |
| INFO   | X     |
| N/A    | X     |

## Findings

### Network Security
- [PASS|WARN|FAIL|N/A] IP allowlist: <details>
- [PASS|WARN|INFO|N/A] Private endpoints: <details>
- [PASS|WARN|N/A] HBA configuration: <details>

### Authentication & SSO
- [PASS|FAIL|N/A] Cloud Console SSO: <details>
- [PASS|FAIL] Database SSO (OIDC): <details>
- [PASS|INFO] Database SSO (LDAP/AD): <details>
- [PASS|FAIL|N/A] SCIM 2.0 provisioning: <details>
- [PASS|FAIL] Auto user provisioning: <details>

### Authorization
- [PASS|WARN|FAIL] Admin user count: X users with admin role
- [PASS|FAIL] PUBLIC role privileges: <details>

### Encryption
- [PASS|FAIL|INFO|N/A] CMEK: <details>
- [PASS|FAIL|WARN|N/A] Enterprise Encryption: <details>
- [PASS|FAIL|N/A] TLS: <details>
- [INFO] Cryptographic posture: TLS version, PQC support, key size

### Audit Logging
- [PASS|WARN|FAIL] Audit log configuration: <details>

### Backup & Recovery
- [PASS|INFO|N/A] Managed backups: <details>
- [PASS|WARN|FAIL|N/A] Self-managed backups: <details>

### Cluster Configuration
- [INFO] Version: vXX.X.X
- [INFO] Plan: Standard | Advanced | Self-hosted
- [INFO] Regions: <list>

状态标记: [PASS]、[WARN]、[FAIL]、[INFO]、[N/A]。对于不适用于部署模式的检查,使用 [N/A]。适用时,附加严重性调整注释(参见“严重性调整”)。

整改

对于每项发现,可单独使用相应的整改技能:

发现整改技能
IP 允许列表开放配置 IP 允许列表
未配置 SSO / 未启用 SCIM配置 SSO 和 SCIM
未启用 CMEK启用 CMEK 加密
已禁用审计日志记录配置审计日志记录
管理员权限过多强化用户权限
密码策略较弱强制执行密码策略
TLS/证书问题管理 TLS 证书
未配置私有连接配置私有连接
未配置日志导出配置日志导出
合规性缺口准备合规性文档

对于每项 FAIL 发现,提供:“说明如何修复此问题”(分步指导)或 “现在帮我修复此问题”(交互式整改)。

安全注意事项

  • 所有操作均为只读。 审计期间不会修改任何集群设置、用户、角色或网络配置。
  • SQL 查询仅使用 SHOW 和 SELECT。 不会执行任何 DDL 或 DML 语句。
  • ccloud 命令均为只读。 仅使用 list、info 和 auth 子命令。
  • 不会记录任何机密信息。 报告输出中不包含连接字符串和令牌。
  • 权限检查: 如果执行用户缺少 admin 或 VIEWACTIVITY 权限,审计结果可能不完整。报告会注明权限缺失情况。

参考资料

技能参考:

修复技能:

CockroachDB 官方文档:

评论

支持 Markdown