修复发现的 Security Health Analytics 问题

本页面提供了参考指南和技术,了解如何使用 Security Command Center 修复 Security Health Analytics 的发现结果。

您需要足够的 Identity and Access Management (IAM) 角色来查看或修改发现结果,以及访问或修改 Google Cloud 资源。如果您遇到 在 Google Cloud 控制台,请联系管理员 若想了解角色,请参阅 访问权限控制。 如需解决资源错误,请阅读受影响产品的相关文档。

Security Health Analytics 修复

本部分介绍所有 Security Health Analytics 发现结果的修复说明。

对于映射到 CIS 基准的发现结果类型,补救指南 来自 Center for Internet Security (CIS), (除非另有说明)。如需了解详情,请参阅 检测器和合规性

修复后停用发现结果

修复发现结果中的漏洞或配置错误相关问题后,Security Health Analytics 会在下次扫描该发现结果时自动将其状态设置为 INACTIVE。至于 Security Health Analytics 需要多久才会将修复后的发现结果设置为 INACTIVE 状态,这取决于您修复该发现结果的时间以及系统安排检测到该发现结果的扫描的时间。

如果扫描检测到受发现结果影响的资源被删除,Security Health Analytics 也会将该发现结果的状态设置为 INACTIVE。如果您要移除已删除资源的发现结果 ,同时等待 Security Health Analytics 检测 您可以忽略该发现结果。如需忽略发现结果,请参阅 在 Security Command Center 中忽略发现结果

请勿使用忽略功能隐藏现有资源的修复性发现结果。 如果问题反复出现,并且 Security Health Analytics 恢复了 ACTIVE 发现结果的状态,您可能看不到重新启用的发现结果,因为 系统会将已忽略的发现结果从任何指定 NOT mute="MUTED" 的发现结果查询(例如默认发现结果查询)中排除。

如需了解扫描间隔时间,请参阅 Security Health Analytics 扫描类型

Access Transparency disabled

API 中的类别名称:ACCESS_TRANSPARENCY_DISABLED

Access Transparency 会记录 Google Cloud 员工何时访问您的组织中的项目以提供支持。启用 Access Transparency 以记录 Google Cloud 的哪位员工在什么时候、出于何种原因访问您的信息。如需了解详情,请参阅 Access Transparency

要为某个项目启用 Access Transparency,该项目必须与 结算账号

所需的角色

如需获得执行此任务所需的权限,请让您的管理员在组织级层为您授予 Access Transparency Admin (roles/axt.admin) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限

此预定义角色可提供执行此任务所需的 axt.labels.getaxt.labels.set 权限。您也可以使用自定义角色或其他预定义角色来获取这些权限。

补救步骤

如需修复此发现结果,请完成以下步骤:

  1. 检查您的组织级权限:

    1. 进入 Google Cloud 控制台中的 Identity and Access Management 页面。

      转到 Identity and Access Management

    2. 如果系统提示,请在选择器菜单中选择 Google Cloud 组织。

  2. 使用选择器菜单选择组织内的任何 Google Cloud 项目。

    Access Transparency 是在 Google Cloud 项目页面上配置的,但此功能针对整个组织启用。

  3. 转到 IAM 和管理 > 设置页面。

  4. 点击启用 Access Transparency

了解此发现结果类型的 支持的资源和扫描设置

AlloyDB auto backup disabled

API 中的类别名称:ALLOYDB_AUTO_BACKUP_DISABLED

AlloyDB for PostgreSQL 集群未启用自动备份。

为了帮助防止数据丢失,请为您的集群开启自动备份功能。如需了解详情,请参阅配置其他自动备份

如需修复此发现结果,请完成以下步骤:

  1. 前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。

    转到 AlloyDB for PostgreSQL 集群

  2. 点击 Resource Name 列中的集群。

  3. 点击数据保护

  4. 自动备份政策部分下,点击 自动备份行。

  5. 选中自动备份复选框。

  6. 点击更新

了解此发现结果类型的 支持的资源和扫描设置

AlloyDB backups disabled

API 中的类别名称:ALLOYDB_BACKUPS_DISABLED

AlloyDB for PostgreSQL 集群未启用自动备份或连续备份。

为防止数据丢失,请为以下各项开启自动备份或持续备份: 集群如需了解详情,请参阅配置其他备份

如需修复此发现结果,请完成以下步骤:

  1. 前往 Google Cloud 控制台。

    前往 AlloyDB for PostgreSQL 集群

  2. 资源名称列中,点击需要访问的集群的名称 结果。

  3. 点击数据保护

  4. 设置备份政策。

了解此发现结果类型支持的资产和扫描设置

AlloyDB CMEK disabled

API 中的类别名称:ALLOYDB_CMEK_DISABLED

AlloyDB 集群未使用客户管理的加密密钥 (CMEK)。

借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。如需了解详情,请参阅 CMEK 简介。CMEK 会产生与 Cloud KMS 相关的额外费用。

如需修复此发现结果,请完成以下步骤:

  1. 前往 Google Cloud 控制台。

    前往 AlloyDB for PostgreSQL 集群

  2. 资源名称列中,点击需要访问的集群的名称 结果。

  3. 点击创建备份。设置备用 ID。

  4. 点击创建

  5. 备份/恢复部分下,点击您选择的备份 ID 条目旁边的恢复

  6. 设置新的集群 ID 和网络。

  7. 点击高级加密选项。选择要用于对新集群进行加密的 CMEK。

  8. 点击恢复

了解此发现结果类型的 支持的资源和扫描设置

AlloyDB log min error statement severity

API 中的类别名称:ALLOYDB_LOG_MIN_ERROR_STATEMENT_SEVERITY

AlloyDB for PostgreSQL 实例未将 log_min_error_statement 数据库标志设置为 error 或其他建议的值。

log_min_error_statement 标志可控制导致 错误情况会记录在服务器日志中。指定的 或更高级别的 API。严重级别越高,记录的消息数量就越少。如果设置为过高的严重级别,系统可能不会记录错误消息。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。

    转到 AlloyDB for PostgreSQL 集群

  2. 点击资源名称列中的集群。

  3. 集群中的实例部分下,点击相应实例的修改

  4. 点击高级配置选项

  5. 标志部分下,设置 log_min_error_statement 数据库标志,其中包含以下某一项 建议的值(具体取决于贵组织的日志记录政策)。

    • debug5
    • debug4
    • debug3
    • debug2
    • debug1
    • info
    • notice
    • warning
    • error
  6. 点击更新实例

了解此发现结果类型支持的资产和扫描设置

AlloyDB log min messages

API 中的类别名称:ALLOYDB_LOG_MIN_MESSAGES

AlloyDB for PostgreSQL 实例没有 log_min_messages 数据库标志的值至少为 warning

log_min_messages 标志用于控制记录哪些邮件级别 服务器日志严重级别越高,记录的消息数量就越少。如果阈值设置得过低,可能会导致日志存储大小和长度增加,从而难以找到实际错误。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。

    前往 AlloyDB for PostgreSQL 集群

  2. 点击资源名称列中的集群。

  3. 集群中的实例部分下,点击相应实例的修改

  4. 点击高级配置选项

  5. 标志部分下,根据组织的日志记录政策,将 log_min_messages 数据库标志的值设置为下列建议值之一。

    • debug5
    • debug4
    • debug3
    • debug2
    • debug1
    • info
    • notice
    • warning
  6. 点击更新实例

了解此发现结果类型支持的资产和扫描设置

AlloyDB log error verbosity

API 中的类别名称:ALLOYDB_LOG_ERROR_VERBOSITY

AlloyDB for PostgreSQL 实例未将 log_error_verbosity 数据库标志设置为 default 或其他更宽松的值。

log_error_verbosity 标志用于控制记录的消息的详细程度。详细程度越高,记录的消息就越详细。 建议将此标志设置为 default 或其他更宽松的值。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 前往 Google Cloud 控制台。

    前往 AlloyDB for PostgreSQL 集群

  2. 点击资源名称列中的集群。

  3. 集群中的实例部分下,点击相应实例的修改

  4. 点击高级配置选项

  5. 标志部分下,根据组织的日志记录政策,将 log_error_verbosity 数据库标志的值设置为下列建议值之一。

    • default
    • verbose
  6. 点击更新实例

了解此发现结果类型支持的资产和扫描设置

AlloyDB Public IP

API 中的类别名称:ALLOYDB_PUBLIC_IP

AlloyDB for PostgreSQL 数据库实例具有公共 IP 地址。

为了缩小组织的受攻击面,请使用专用 IP 地址,而不是使用公共 IP 地址。专用 IP 地址可提高网络安全性, 应用的延迟

如需修复此发现结果,请完成以下步骤:

  1. 前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。

    前往 AlloyDB for PostgreSQL 集群

  2. 资源名称列中,点击需要访问的集群的名称 结果。

  3. 集群中的实例部分下,点击相应实例的修改

  4. 连接部分下,取消选中启用公共 IP 对应的复选框。

  5. 点击更新实例

了解此发现结果类型的 支持的资源和扫描设置

AlloyDB SSL not enforced

API 中的类别名称:ALLOYDB_SSL_NOT_ENFORCED

AlloyDB for PostgreSQL 数据库实例不需要所有传入 使用 SSL。

为避免在未加密通信中泄露所传输的敏感数据,连至您的 AlloyDB 数据库实例的所有传入连接都应使用 SSL。详细了解如何 配置 SSL/TLS

如需修复此发现结果,请完成以下步骤:

  1. 前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。

    前往 AlloyDB for PostgreSQL 集群

  2. 资源名称列中,点击需要访问的集群的名称 结果。

  3. 集群中的实例部分下,点击 实例。

  4. 网络安全部分下,点击需要 SSL 加密对应的复选框。

  5. 点击更新实例

了解此发现结果类型支持的资产和扫描设置

Admin service account

API 中的类别名称:ADMIN_SERVICE_ACCOUNT

组织或项目中的服务账号拥有 AdminOwnerEditor 权限。这些角色拥有广泛的权限,不应分配给服务账号。如需了解服务账号及其可用角色,请参阅服务账号

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 IAM 页面。

    转到“IAM 政策”

  2. 对于发现结果中的每个主账号:

    1. 点击主账号旁边的 修改主账号
    2. 如需移除权限,请点击相应角色旁边的 删除角色
    3. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Alpha cluster enabled

API 中的类别名称:ALPHA_CLUSTER_ENABLED

Google Kubernetes Engine (GKE) 集群已启用 Alpha 版集群功能。

Alpha 版集群可让尝鲜者在新功能公开发布之前用工作负载进行相关试验。Alpha 版集群已启用所有 GKE API 功能,但它们不在 GKE 服务等级协议 (SLA) 的涵盖范围内,不会收到安全更新,已停用节点自动升级和节点自动修复功能,并且无法升级。它们还会在 30 天后自动删除。

如需修复此发现结果,请完成以下步骤:

Alpha 版集群无法停用。您必须创建一个停用 Alpha 版功能的新集群。

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 点击创建

  3. 在要创建的集群类型旁边选择配置

  4. 功能标签页下,确保已停用在此集群中启用 Kubernetes Alpha 版功能

  5. 点击创建

  6. 如需将工作负载迁移到新集群,请参阅将工作负载迁移到不同的机器类型

  7. 如需删除原始集群,请参阅删除集群

了解此发现结果类型支持的资产和扫描设置

API key APIs unrestricted

API 中的类别名称:API_KEY_APIS_UNRESTRICTED

有些 API 密钥使用的过于广泛。

不受限制的 API 密钥会带来安全方面的问题,因为用户可以从存储密钥的设备上检索这样的密钥,或者可以公开查看这样的密钥,例如从浏览器中查看。遵循最小权限原则,将 API 密钥配置为仅调用应用需要的 API。如需了解详情,请参阅应用 API 密钥限制

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 API 密钥页面。

    转到“API 密钥”

  2. 对于每个 API 密钥:

    1. API 密钥部分中,在需要限制 API 的每个 API 密钥对应的行中,点击 操作
    2. 操作菜单中,点击修改 API 密钥。此时会打开修改 API 密钥页面。
    3. API 限制部分中,选择限制 API。此时将显示选择 API 下拉菜单。
    4. 选择 API 下拉列表中,选择要允许的 API。
    5. 点击保存。设置最多可能需要五分钟才能生效。

了解此发现结果类型支持的资产和扫描设置

API key apps unrestricted

API 中的类别名称:API_KEY_APPS_UNRESTRICTED

有些 API 密钥可以不受限制地使用,允许任何不受信任的应用使用。

不受限制的 API 密钥会带来安全方面的问题,因为用户可以在存储密钥的设备上检索这样的密钥,或者可以公开查看这样的密钥,例如从浏览器中查看。遵循最小权限原则,将 API 密钥的使用范围限制为受信任的主机、HTTP 引荐来源网址和应用。如需了解详情,请参阅应用 API 密钥限制

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 API 密钥页面。

    转到“API 密钥”

  2. 对于每个 API 密钥:

    1. API 密钥部分中,在需要限制应用的每个 API 密钥对应的行中,点击 操作
    2. 操作菜单中,点击修改 API 密钥。此时会打开修改 API 密钥页面。
    3. 修改 API 密钥页面的应用限制下,选择限制类别。您可以为每个密钥设置一项应用限制。
    4. 在选择限制时显示的添加一项字段中,点击添加一项以根据应用的需要添加限制。
    5. 添加完各项后,点击完成
    6. 点击保存

了解此发现结果类型支持的资产和扫描设置

API key exists

API 中的类别名称:API_KEY_EXISTS

项目使用 API 密钥,而不是标准身份验证。

API 密钥的安全性低于其他身份验证方法,因为它们是简单的加密字符串,容易被他人发现和使用。用户可以在存储密钥的设备上检索这样的密钥,或者可以公开查看这样的密钥,例如从浏览器中查看。此外,API 密钥不会唯一标识发出请求的用户或应用。作为替代方案,您可以将标准身份验证流程与服务账号用户账号搭配使用。

如需修复此发现结果,请完成以下步骤:

  1. 确保为您的应用配置了身份验证替代形式。
  2. 转到 Google Cloud 控制台中的 API 凭据页面。

    打开“API 凭据”

  3. 在要删除的每个 API 密钥所在行的 API 密钥部分中,点击 操作

  4. 操作菜单中,点击删除 API 密钥

了解此发现结果类型的 支持的资源和扫描设置

API key not rotated

API 中的类别名称:API_KEY_NOT_ROTATED

API 密钥已经超过 90 天没有轮替。

API 密钥不会过期,因此,如果密钥被窃取,它可以无限期地使用,除非项目所有者撤消或轮替密钥。通过频繁地重新生成 API 密钥,失窃的 API 密钥可用于访问被盗用账号或已终止账号中的数据的时间会缩短。至少每 90 天轮替一次 API 密钥。如需了解详情,请参阅 管理 API 密钥的最佳实践

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 API 密钥页面。

    转到“API 密钥”

  2. 对于每个 API 密钥:

    1. API 密钥部分中,找到您需要的每个 API 密钥所对应的行 如需进行旋转,请点击 操作
    2. 操作菜单中,点击修改 API 密钥。此时会打开修改 API 密钥页面。
    3. 修改 API 密钥页面上,如果创建日期字段中的日期超过 90 天,请点击 重新生成密钥。系统会生成一个新密钥。
    4. 点击保存
    5. 为确保您的应用继续无中断地运行,请更新应用以使用新的 API 密钥。旧的 API 密钥在 24 小时内继续有效,之后便会永久停用。

了解此发现结果类型支持的资产和扫描设置

Audit config not monitored

API 中的类别名称:AUDIT_CONFIG_NOT_MONITORED

日志指标和提醒未配置为监控审核配置更改。

Cloud Logging 会生成管理员活动与数据访问日志,这些日志能用来进行安全分析、资源更改追踪及合规性审核。通过监控审核配置更改,您可以确保项目中的所有活动随时都可以进行审核。如需了解详情,请参阅基于日志的指标概览

如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

要修复此发现结果,请在必要时创建指标以及提醒政策:

创建指标

  1. 进入 Google Cloud 控制台中的基于日志的指标页面。

    转到“基于日志的指标”

  2. 点击创建指标

  3. 指标类型下,选择计数器

  4. 详情下:

    1. 设置日志指标名称
    2. 添加说明
    3. 单位设为 1
  5. 过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:

      protoPayload.methodName="SetIamPolicy"
      AND protoPayload.serviceData.policyDelta.auditConfigDeltas:*

  6. 点击创建指标。您将看到确认。

创建提醒政策

  1. 在 Google Cloud 控制台中,转到基于日志的指标页面:

    前往基于日志的指标

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 用户定义的指标部分下,选择您在上一部分中创建的指标。
  3. 点击更多 ,然后点击根据指标创建提醒

    系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。

  4. 点击下一步
    1. 查看预先填充的设置。您可能需要修改阈值
    2. 点击条件名称,然后输入条件的名称。
  5. 点击下一步
  6. 如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定

    如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。

  7. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  8. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  9. 点击提醒名称,然后输入提醒政策的名称。
  10. 点击创建政策

了解此发现结果类型支持的资产和扫描设置

Audit logging disabled

API 中的类别名称:AUDIT_LOGGING_DISABLED

此发现结果不适用于项目级激活。

一项或多项 Google Cloud 服务停用了审核日志记录,或者一个或多个主账号不进行数据访问审核日志记录。

为所有服务启用 Cloud Logging,以跟踪所有管理员活动,读取 对用户数据的访问权限以及对用户数据的写入权限。 如果信息量很大,Cloud Logging 的使用费有可能会非常高。为了了解 服务的使用情况及其费用,请参阅 优化费用:云运维

如果任何主账号不进行默认数据访问审核日志记录配置或任何单独服务的日志记录配置的数据访问审核日志记录,请改为要进行数据访问审核日志记录。

如需修复此发现结果,请完成以下步骤:

  1. 转到数据访问审核日志默认配置页面 Google Cloud 控制台。

    恢复默认配置

  2. 日志类型标签页上,激活默认配置中的数据访问审核日志记录:

    1. 选择管理员读取数据读取数据写入
    2. 点击保存
  3. 豁免的主账号标签页上,从默认配置中移除所有豁免的用户:

    1. 点击每个名称旁边的 删除,移除列出的每个主账号。
    2. 点击保存
  4. 转到审核日志页面。

    转到审核日志

  5. 从各项服务的数据访问审核日志配置中移除任何豁免的主账号。

    1. 数据访问审核日志配置下,对于显示豁免的主账号的每项服务,点击相应服务。系统会打开服务的审核日志配置面板。
    2. 豁免主账号标签页上,移除所有豁免主账号 方法是点击每个名称旁边的 删除
    3. 点击保存

了解此发现结果类型支持的资产和扫描设置

Auto backup disabled

API 中的类别名称:AUTO_BACKUP_DISABLED

Cloud SQL 数据库未启用自动备份。

为避免数据丢失,请为 SQL 实例启用自动备份。如需了解详情,请参阅创建和管理按需备份和自动备份

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 SQL 实例备份页面。

    转到“SQL 实例备份”

  2. 点击设置旁边的 修改

  3. 选中自动备份复选框。

  4. 在下拉菜单中,选择数据自动备份的时段。

  5. 点击保存

了解此发现结果类型支持的资产和扫描设置

Auto repair disabled

API 中的类别名称:AUTO_REPAIR_DISABLED

Google Kubernetes Engine (GKE) 集群的自动修复功能已停用,此功能可使节点保持正常运行状态。

启用该功能后,GKE 会定期检查集群中每个节点的运行状况。如果某个节点在较长时间内连续多次无法通过健康检查,则 GKE 会为该节点启动修复流程。如需了解详情,请参阅自动修复节点

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 点击节点标签页。

  3. 对于每个节点池:

    1. 点击节点池的名称转到其详情页面。
    2. 点击 修改
    3. 管理下,选择启用自动修复
    4. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Auto upgrade disabled

API 中的类别名称:AUTO_UPGRADE_DISABLED

GKE 集群的自动升级功能已停用,此功能会保持集群和节点池使用 Kubernetes 的最新稳定版。

如需了解详情,请参阅自动升级节点

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 在集群列表中,点击集群的名称。

  3. 点击节点标签页。

  4. 对于每个节点池:

    1. 点击节点池的名称转到其详情页面。
    2. 点击 修改
    3. 管理下,选择启用自动升级
    4. 点击保存

了解此发现结果类型支持的资产和扫描设置

BigQuery table CMEK disabled

API 中的类别名称:BIGQUERY_TABLE_CMEK_DISABLED

BigQuery 表未配置为使用客户管理的加密密钥 (CMEK)。

借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google Cloud 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。如需了解详情,请参阅使用 Cloud KMS 密钥保护数据

如需修复此发现结果,请完成以下步骤:

  1. 创建受 Cloud Key Management Service 保护的表
  2. 将表复制到启用了 CMEK 的新表
  3. 删除原始表

如需设置用于加密数据集中的所有新表的默认 CMEK 密钥,请参阅设置数据集默认密钥

了解此发现结果类型的 支持的资源和扫描设置

Binary authorization disabled

API 中的类别名称:BINARY_AUTHORIZATION_DISABLED

GKE 集群上已停用 Binary Authorization。

Binary Authorization 包含一项可选功能,只允许将开发过程中由可信授权方签名的容器映像部署到集群中,以此保护供应链安全。通过执行基于签名的部署,您可以确保仅允许部署经过验证的映像,从而对容器环境实施更严格的控制。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. Security 部分,点击 Edit(在 Binary Authorization 行。

    如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。

  3. 在对话框中,选择启用 Binary Authorization

  4. 点击保存更改

  5. 转到 Binary Authorization 设置页面。

    转到 Binary Authorization

  6. 确保已配置需要证明者的政策,并且未将项目默认规则配置为允许所有映像。如需了解详情,请参阅为 GKE 进行设置

    如需确保允许部署违反政策的映像并将违规事件记录到 Cloud Audit Logs 中,您可以启用试运行模式

了解此发现结果类型的 支持的资源和扫描设置

Bucket CMEK disabled

API 中的类别名称:BUCKET_CMEK_DISABLED

存储桶不使用客户管理的加密密钥 (CMEK) 进行加密。

对存储桶设置默认 CMEK 后,您可以更好地控制数据访问权限。如需了解详情。请参阅客户管理的加密密钥

要修复此发现结果,请遵循使用客户管理的加密密钥为存储桶使用 CMEK。CMEK 会产生与 Cloud KMS 相关的额外费用。

了解此发现结果类型支持的资产和扫描设置

Bucket IAM not monitored

API 中的类别名称:BUCKET_IAM_NOT_MONITORED

日志指标和提醒未配置为监控 Cloud Storage IAM 权限更改。

监控 Cloud Storage 存储桶权限的更改可帮助您识别权限过高的用户或可疑活动。如需了解详情,请参阅基于日志的指标概览

如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。如需了解该服务的使用情况及其费用,请参阅优化费用:Cloud Operations

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

创建指标

  1. 进入 Google Cloud 控制台中的基于日志的指标页面。

    转到“基于日志的指标”

  2. 点击创建指标

  3. 指标类型下,选择计数器

  4. 详情下:

    1. 设置日志指标名称
    2. 添加说明
    3. 单位设为 1
  5. 过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:

      resource.type=gcs_bucket
      AND protoPayload.methodName="storage.setIamPermissions"

  6. 点击创建指标。您将看到确认。

创建提醒政策

  1. 在 Google Cloud 控制台中,转到基于日志的指标页面:

    前往基于日志的指标

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 用户定义的指标部分下,选择您在上一部分中创建的指标。
  3. 点击更多 ,然后点击根据指标创建提醒

    系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。

  4. 点击下一步
    1. 查看预先填充的设置。您可能需要修改阈值
    2. 点击条件名称,然后输入条件的名称。
  5. 点击下一步
  6. 如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定

    如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。

  7. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  8. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  9. 点击提醒名称,然后输入提醒政策的名称。
  10. 点击创建政策

了解此发现结果类型支持的资产和扫描设置

Bucket logging disabled

API 中的类别名称:BUCKET_LOGGING_DISABLED

有一个存储桶未启用日志记录。

为了帮助调查安全问题和监控存储空间使用情况,请为 Cloud Storage 存储桶启用访问日志和存储信息。 访问日志提供向指定存储桶发出的所有请求的信息,而存储日志提供该存储桶的存储空间使用情况的信息。

要修复此发现结果,请按使用情况日志和存储日志 指南为 Security Health Analytics 发现结果指示的存储桶设置日志记录。

了解此发现结果类型的 支持的资源和扫描设置

Bucket policy only disabled

API 中的类别名称:BUCKET_POLICY_ONLY_DISABLED

未配置统一存储桶级访问权限(以前称为“仅限存储桶政策”)。

统一存储桶级访问权限通过停用对象级权限 (ACL) 来简化存储桶访问权限控制。启用后,只有存储桶级 IAM 权限会授予对存储桶及其包含的对象的访问权限。如需了解详情,请参阅统一存储桶级访问权限

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 Cloud Storage 浏览器页面。

    转到 Cloud Storage 浏览器

  2. 在存储桶列表中,点击所需存储桶的名称。

  3. 点击配置标签页。

  4. 权限下方的访问权限控制行中,点击 修改访问权限控制模型

  5. 在对话框中,选择统一

  6. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Cloud Asset API disabled

API 中的类别名称:CLOUD_ASSET_API_DISABLED

项目未启用 Cloud Asset Inventory 服务。

如需修复此发现结果,请完成以下步骤:

  1. 进入 Google Cloud 控制台中的 API 库页面。

    转到 API 库

  2. 搜索 Cloud Asset Inventory

  3. 选择 Cloud Asset API 服务的结果。

  4. 确保显示了 API 已启用

Cluster logging disabled

API 中的类别名称:CLUSTER_LOGGING_DISABLED

没有为 GKE 群集启用日志记录功能。

为帮助调查安全问题和监控使用情况,请在集群上启用 Cloud Logging

如果信息量很大,Cloud Logging 的使用费有可能会非常高。如需了解服务的使用情况及其费用,请参阅优化费用:Cloud Operations

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 Kubernetes 集群

  2. 选择 Security Health Analytics 发现结果中列出的集群。

  3. 点击 修改

    如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。

  4. 在旧版 Stackdriver LoggingStackdriver Kubernetes Engine Monitoring 下拉列表中,选择 启用

    这些选项不兼容。确保您仅使用 Stackdriver Kubernetes Engine Monitoring,或将旧版 Stackdriver Logging旧版 Stackdriver Monitoring 结合使用。

  5. 点击保存

了解此发现结果类型支持的资产和扫描设置

Cluster monitoring disabled

API 中的类别名称:CLUSTER_MONITORING_DISABLED

GKE 集群上已停用 Monitoring。

为帮助调查安全问题和监控使用情况,请在集群上启用 Cloud Monitoring

如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 Kubernetes 集群

  2. 选择 Security Health Analytics 发现结果中列出的集群。

  3. 点击 修改

    如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。

  4. 在旧版 Stackdriver MonitoringStackdriver Kubernetes Engine Monitoring 下拉列表中,选择 启用

    这些选项不兼容。确保您仅使用 Stackdriver Kubernetes Engine Monitoring 或将旧版 Stackdriver Monitoring旧版 Stackdriver Logging 结合使用。

  5. 点击保存

了解此发现结果类型支持的资产和扫描设置

Cluster private Google access disabled

API 中的类别名称:CLUSTER_PRIVATE_GOOGLE_ACCESS_DISABLED

集群主机未配置为仅使用内部专用 IP 地址来访问 Google API。

专用 Google 访问通道使只具有专用内部 IP 地址的虚拟机实例可以访问 Google API 和服务的公共 IP 地址。如需了解详情,请参阅配置 Google 专用访问通道

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 Virtual Private Cloud 网络页面。

    转到 VPC 网络

  2. 在网络列表中,点击所需网络的名称。

  3. VPC 网络详情页面上,点击子网标签页。

  4. 在子网列表中,点击与发现结果中的 Kubernetes 集群关联的子网的名称。

  5. 子网详情页面上,点击 修改

  6. 专用 Google 访问通道下,选择开启

  7. 点击保存

  8. 要从其外部流量仅流向 Google API 的虚拟机实例移除公共(外部)IP 地址,请参阅取消分配静态外部 IP 地址

了解此发现结果类型支持的资产和扫描设置

Cluster secrets encryption disabled

API 中的类别名称:CLUSTER_SECRETS_ENCRYPTION_DISABLED

GKE 集群上已停用应用层 Secret 加密。

应用层 Secret 加密可确保 GKE Secret 使用 Cloud KMS 密钥进行加密。此功能为敏感数据提供了一层额外的安全防护,例如用户定义的 Secret 和集群操作所需的 Secret(如服务账号密钥),此类 Secret 均存储在 etcd 中。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud KMS 密钥页面。

    转到“Cloud KMS 密钥”

  2. 审核您的应用密钥或创建数据库加密密钥 (DEK)。如需了解详情,请参阅创建 Cloud KMS 密钥

  3. 转到 Kubernetes 集群页面

    打开 KUBERNETES 集群

  4. 选择发现结果中的集群。

  5. 安全下的应用层 Secret 加密字段中,点击 修改应用层 Secret 加密

  6. 选中启用应用层 Secret 加密复选框,然后选择您创建的 DEK。

  7. 点击保存更改

了解此发现结果类型支持的资产和扫描设置

Cluster shielded nodes disabled

API 中的类别名称:CLUSTER_SHIELDED_NODES_DISABLED

集群未启用安全强化型 GKE 节点。

在没有安全强化型 GKE 节点的情况下,攻击者可能会利用 Pod 中的漏洞来泄露引导凭据,并模拟集群中的节点。此漏洞可向攻击者授予对集群密钥的访问权限。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 选择发现结果中的集群。

  3. 安全下的安全强化型 GKE 节点字段中,点击 修改安全强化型 GKE 节点

  4. 选中启用安全强化型 GKE 节点复选框。

  5. 点击保存更改

了解此发现结果类型支持的资产和扫描设置

Compute project wide SSH keys allowed

API 中的类别名称:COMPUTE_PROJECT_WIDE_SSH_KEYS_ALLOWED

使用项目范围的 SSH 密钥,允许登录项目中的所有实例。

使用项目范围的 SSH 密钥可简化 SSH 密钥管理,但如果遭破解,就会构成安全风险,导致项目中的所有实例受影响。您应该使用实例专用 SSH 密钥,这样在 SSH 密钥被破解时可以减小攻击面。如需了解详情,请参阅管理元数据中的 SSH 密钥

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到“虚拟机实例”

  2. 在实例列表中,点击发现结果中的实例的名称。

  3. 虚拟机实例详情页面上,点击 修改

  4. SSH 密钥下,选择屏蔽项目范围的 SSH 密钥

  5. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Compute Secure Boot disabled

API 中的类别名称:COMPUTE_SECURE_BOOT_DISABLED

安全强化型虚拟机未启用安全启动。

使用安全启动功能可以保护虚拟机免受 rootkit 和 bootkit 攻击。默认情况下,Compute Engine 不会启用安全启动,因为某些未签名的驱动程序和低级别软件不兼容。如果您的虚拟机未使用不兼容的软件,并且在启动时启用了安全启动功能,那么 Google 建议您使用该功能。如果您将第三方模块与 Nvidia 驱动程序搭配使用,在启用安全启动之前,请确保它们与安全启动功能兼容。

如需了解详情,请参阅安全启动

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到“虚拟机实例”

  2. 在实例列表中,点击发现结果中的实例的名称。

  3. 虚拟机实例详情页面上,点击 停止

  4. 实例停止后,点击 修改

  5. 安全强化型虚拟机下,选择开启安全启动

  6. 点击保存

  7. 点击 启动以启动实例。

了解此发现结果类型的 支持的资源和扫描设置

Compute serial ports enabled

API 中的类别名称:COMPUTE_SERIAL_PORTS_ENABLED

为实例启用了串行端口,允许连接到实例的串行控制台。

如果您针对实例启用交互式串行控制台,客户端可以尝试从任何 IP 地址连接该实例。因此,应停用交互式串行控制台支持。如需了解详情,请参阅针对项目启用访问权限

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到“虚拟机实例”

  2. 在实例列表中,点击发现结果中的实例的名称。

  3. 虚拟机实例详情页面上,点击 修改

  4. 远程访问下,取消选中允许连接到串行端口

  5. 点击保存

了解此发现结果类型支持的资产和扫描设置

Confidential Computing disabled

API 中的类别名称:CONFIDENTIAL_COMPUTING_DISABLED

Compute Engine 实例未启用机密计算。

机密计算可通过加密使用中的数据,在端到端加密案例中增添“第三大支柱”。借助机密计算和 AMD 安全加密虚拟化 (SEV) 提供的机密执行环境,Google Cloud 会确保在处理期间,对内存中的敏感代码和其他数据进行加密。

机密计算仅在创建实例时启用。因此,您必须删除当前实例并创建一个新实例。

如需了解详情,请参阅机密虚拟机和 Compute Engine

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到“虚拟机实例”

  2. 在实例列表中,点击发现结果中的实例的名称。

  3. 虚拟机实例详情页面上,点击 删除

  4. 使用 Google Cloud 控制台创建机密虚拟机

了解此发现结果类型的 支持的资源和扫描设置

COS not used

API 中的类别名称:COS_NOT_USED

Compute Engine 虚拟机未使用 Container-Optimized OS,该操作系统旨在安全地在 Google Cloud 上运行 Docker 容器。

Google 推荐使用 Container-Optimized OS 在 Google Cloud 上托管和运行容器。这是一个精简型操作系统,可最大程度地减少安全漏洞,并且其自动更新功能能够及时修补安全漏洞。如需了解详情,请参阅 Container-Optimized OS 概览

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 在集群列表中,点击发现结果中的集群的名称。

  3. 点击节点标签页。

  4. 对于每个节点池:

    1. 点击节点池的名称转到其详情页面。
    2. 点击 修改
    3. 节点 -> 映像类型下,点击更改
    4. 选择 Container-Optimized OS,然后点击更改
    5. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Custom role not monitored

API 中的类别名称:CUSTOM_ROLE_NOT_MONITORED

日志指标和提醒未配置为监控自定义角色更改。

IAM 提供预定义角色和自定义角色,可授予对特定 Google Cloud 资源的访问权限。通过监控角色创建、删除和更新活动,您可以在早期阶段确定特权过高的角色。如需了解详情,请参阅基于日志的指标概览

如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。如需了解该服务的使用情况及其费用,请参阅优化费用:Cloud Operations

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

创建指标

  1. 进入 Google Cloud 控制台中的基于日志的指标页面。

    转到“基于日志的指标”

  2. 点击创建指标

  3. 指标类型下,选择计数器

  4. 详情下:

    1. 设置日志指标名称
    2. 添加说明
    3. 单位设为 1
  5. 过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:

      resource.type="iam_role"
      AND (protoPayload.methodName="google.iam.admin.v1.CreateRole"
      OR protoPayload.methodName="google.iam.admin.v1.DeleteRole"
      OR protoPayload.methodName="google.iam.admin.v1.UpdateRole")

  6. 点击创建指标。您将看到确认。

创建提醒政策

  1. 在 Google Cloud 控制台中,转到基于日志的指标页面:

    前往基于日志的指标

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 用户定义的指标部分下,选择您在上一部分中创建的指标。
  3. 点击更多 ,然后点击根据指标创建提醒

    系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。

  4. 点击下一步
    1. 查看预先填充的设置。您可能需要修改阈值
    2. 点击条件名称,然后输入条件的名称。
  5. 点击下一步
  6. 如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定

    如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。

  7. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  8. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  9. 点击提醒名称,然后输入提醒政策的名称。
  10. 点击创建政策

了解此发现结果类型的 支持的资源和扫描设置

Dataproc CMEK disabled

API 中的类别名称:DATAPROC_CMEK_DISABLED

创建的 Dataproc 集群未经加密 配置 CMEK借助 CMEK,您在 Cloud Key Management Service 中创建和管理的密钥会封装 Google Cloud 用于加密数据的密钥,从而使您能够更好地控制对数据的访问。

如需修复此发现结果,请完成以下步骤:

  1. 进入 Google Cloud 控制台中的 Dataproc 集群页面。

    转到 Dataproc 集群

  2. 选择您的项目,然后点击创建集群

  3. 管理安全设置部分中,点击加密,然后选择客户管理的密钥

  4. 从列表中选择客户管理的密钥。

    如果您没有客户管理的密钥,则需要创建一个供使用。如需了解详情,请参阅客户管理的加密密钥

  5. 确保所选的 KMS 密钥将 Cloud KMS CryptoKey Encrypter/Decrypter 角色分配给 Dataproc 集群服务账号(“serviceAccount:service-project_number@compute-system.iam.gserviceaccount.com”)。

  6. 创建集群后,将所有工作负载从较旧的集群迁移到新集群。

  7. 前往“Dataproc 集群”,然后选择您的项目。

  8. 选择旧集群,然后点击 删除集群。

  9. 对所选项目中可用的其他 Dataproc 集群重复执行上述步骤。

了解此发现结果类型支持的资产和扫描设置

Dataproc image outdated

API 中的类别名称:DATAPROC_IMAGE_OUTDATED

创建 Dataproc 集群时使用了受 Apache Log4j 2 实用程序(CVE-2021-44228CVE-2021-45046)中的安全漏洞影响的 Dataproc 映像版本。

此检测器可通过检查 Clusterconfig 属性中的 softwareConfig.imageVersion 字段是否包含以下任一受影响的版本来查找漏洞:

  • 低于 1.3.95 的映像版本。
  • 低于 1.4.77、1.5.53 和 2.0.27 的次要映像版本。

您可以手动替换自定义 Dataproc 映像的版本号。以下面几种情况为例:

  • 用户可以修改受影响的自定义映像的版本,使其看起来不受影响。在这种情况下,此检测器不会发出发现结果。
  • 用户可以将已知未受影响的自定义映像版本替换为已知存在漏洞的映像。在这种情况下,此检测器会发出假正例发现结果。如需抑制这些假正例发现结果,您可以忽略它们。

如需修复此发现结果,请重新创建并更新受影响的集群

了解此发现结果类型的 支持的资源和扫描设置

Dataset CMEK disabled

API 中的类别名称:DATASET_CMEK_DISABLED

BigQuery 数据集未配置为使用默认的客户管理的加密密钥 (CMEK)。

借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google Cloud 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。如需了解详情,请参阅使用 Cloud KMS 密钥保护数据

如需修复此发现结果,请完成以下步骤:

您无法在默认加密和 CMEK 加密之间就地切换表。如需设置用于加密数据集中的所有新表的默认 CMEK 密钥,请按照设置数据集默认密钥的说明操作。

设置默认密钥不会使用新密钥对当前位于数据集中的表进行追溯性的重新加密。如需将 CMEK 用于现有数据,请执行以下操作:

  1. 创建新数据集
  2. 在您创建的数据集上设置默认 CMEK 密钥
  3. 如需将表复制到启用了 CMEK 的数据集,请按照复制表中的说明操作。
  4. 成功复制数据后,删除原始数据集

了解此发现结果类型支持的资产和扫描设置

Default network

API 中的类别名称:DEFAULT_NETWORK

项目中存在默认网络。

默认网络已自动创建可能不安全的防火墙规则和网络配置。如需了解详情,请参阅默认网络

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. 在网络列表中,点击默认网络的名称。

  3. VPC 网络详情页面中,点击 删除 VPC 网络

  4. 如需使用自定义防火墙规则创建新网络,请参阅创建网络

了解此发现结果类型的 支持的资源和扫描设置

Default service account used

API 中的类别名称:DEFAULT_SERVICE_ACCOUNT_USED

Compute Engine 实例配置为使用默认服务账号。

默认的 Compute Engine 服务账号具有项目的 Editor 角色,可以对大多数 Google Cloud 服务进行读写操作。如需防范提升权限和未经授权的访问,请勿使用默认的 Compute Engine 服务账号。请创建新的服务账号,并仅分配实例需要的权限。如需了解角色和权限,请参阅访问权限控制

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到虚拟机实例

  2. 选择与 Security Health Analytics 发现结果相关的实例。

  3. 在加载的实例详情页面上,点击 停止

  4. 实例停止后,点击 修改

  5. 服务账号部分下,选择默认 Compute Engine 服务账号以外的服务账号。您可能需要先创建新的服务账号。如需了解 IAM 角色和权限,请参阅访问权限控制

  6. 点击保存。新配置会显示在实例详情页面上。

了解此发现结果类型支持的资产和扫描设置

Disk CMEK disabled

API 中的类别名称:DISK_CMEK_DISABLED

此虚拟机上的磁盘未使用客户管理的加密密钥 (CMEK) 进行加密。

借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google Cloud 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。如需了解详情,请参阅使用 Cloud KMS 密钥保护资源

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Compute Engine 磁盘页面。

    转到“Compute Engine 磁盘”

  2. 在磁盘列表中,点击发现结果中指明的磁盘的名称。

  3. 管理磁盘页面上,点击 删除

  4. 如需创建启用 CMEK 的新磁盘,请参阅使用您自己的密钥加密新的永久性磁盘。CMEK 会产生与 Cloud KMS 相关的额外费用。

了解此发现结果类型支持的资产和扫描设置

Disk CSEK disabled

API 中的类别名称:DISK_CSEK_DISABLED

此虚拟机上的磁盘未使用客户提供的加密密钥 (CSEK) 进行加密。关键虚拟机的磁盘应使用 CSEK 进行加密。

如果您提供自己的加密密钥,Compute Engine 会使用您的密钥来保护 Google 生成的用于加密和解密数据的密钥。如需了解详情,请参阅客户提供的加密密钥。CSEK 会产生与 Cloud KMS 相关的额外费用。

如需修复此发现结果,请完成以下步骤:

删除和创建磁盘

您只能使用自己的密钥加密新的永久性磁盘。您无法使用自己的密钥加密现有的永久性磁盘。

  1. 转到 Google Cloud 控制台中的 Compute Engine 磁盘页面。

    转到“Compute Engine 磁盘”

  2. 在磁盘列表中,点击发现结果中指明的磁盘的名称。

  3. 管理磁盘页面上,点击 删除

  4. 如需创建启用 CSEK 的新磁盘,请参阅使用客户提供的加密密钥加密磁盘

  5. 完成剩余步骤以启用检测器。

启用检测器

  1. 转到 Google Cloud 控制台中的 Security Command Center 资产页面。

    打开“资产”

  2. 快速过滤条件面板的资源类型部分中,选择 compute.Disk

    如果您没有看到 compute.Disk,请点击查看更多,在搜索字段中输入 Disk,然后点击应用

    结果面板会更新,仅显示 compute.Disk 资源类型的实例。

  3. 显示名称列中,选中要与 CSEK 结合使用的磁盘名称旁边的复选框,然后点击设置安全标记

  4. 在对话框中,点击添加标记

  5. 字段中,输入 enforce_customer_supplied_disk_encryption_keys;在字段中输入 true

  6. 点击保存

了解此发现结果类型支持的资产和扫描设置

DNS logging disabled

API 中的类别名称:DNS_LOGGING_DISABLED

监控 Cloud DNS 日志可让您了解 VPC 网络中客户端请求的 DNS 名称。您可以监控这些日志以查看是否存在异常域名,并针对威胁情报进行评估。我们建议为 VPC 网络启用 DNS 日志记录。

如果信息量很大,Cloud DNS日志记录的使用费有可能会非常高。如需了解服务使用情况及其费用,请参阅 Google Cloud Observability 价格:Cloud Logging

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. 在网络列表中,点击 VPC 网络的名称。

  3. 创建新的服务器政策(如果不存在),或修改现有政策:

    • 如果网络没有 DNS 服务器政策,请完成以下步骤:

      1. 点击 修改
      2. DNS 服务器政策字段中,点击创建新的服务器政策
      3. 为新服务器政策输入名称。
      4. 日志设置为开启
      5. 点击保存
    • 如果网络具有 DNS 服务器政策,请完成以下步骤:

      1. DNS 服务器政策字段中,点击 DNS 政策的名称。
      2. 点击 修改政策
      3. 日志设置为开启
      4. 点击保存

了解此发现结果类型支持的资产和扫描设置

DNSSEC disabled

API 中的类别名称:DNSSEC_DISABLED

停用了 Cloud DNS 区域的域名系统安全扩展 (DNSSEC)。

DNSSEC 可通过加密签名 DNS 记录来验证 DNS 响应并缓解 DNS 黑客攻击和中间人攻击等风险。您应启用 DNSSEC。如需了解详情,请参阅 DNS 安全扩展 (DNSSEC) 概览

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 Cloud DNS 页面。

    转到“Cloud DNS 网络”

  2. 找到发现结果中指明的 DNS 区域所在的行。

  3. 点击该行中的 DNSSEC 设置,然后在 DNSSEC 下,选择开启

  4. 阅读显示的对话框。如果满意,请点击启用

了解此发现结果类型支持的资产和扫描设置

Egress deny rule not set

API 中的类别名称:EGRESS_DENY_RULE_NOT_SET

防火墙上未设置出站流量拒绝规则。

拒绝所有出站网络流量的防火墙会阻止任何不需要的出站网络连接,其他防火墙明确授权的连接除外。如需了解详情,请参阅出站情景

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到防火墙

  2. 点击创建防火墙规则

  3. 为防火墙命名,并视需要添加说明。

  4. 流量方向选择出站

  5. 对匹配项执行的操作下,选择拒绝

  6. 目标下拉菜单中,选择网络中的所有实例

  7. 目标过滤条件下拉菜单中,选择 IP 范围,然后在目标 IP 地址范围框中输入 0.0.0.0/0

  8. 协议和端口下,选择全部拒绝

  9. 点击停用规则,然后在强制执行下选择已启用

  10. 点击创建

了解此发现结果类型的 支持的资源和扫描设置

Essential contacts not configured

API 中的类别名称:ESSENTIAL_CONTACTS_NOT_CONFIGURED

您的组织尚未指定个人或群组来接收来自 Google Cloud 有关 Google Cloud 组织中重要事件(例如攻击、漏洞和数据突发事件)的通知。我们建议您将公司组织中的一个或多个人或群组指定为重要联系人。

如需修复此发现结果,请完成以下步骤:

  1. 进入 Google Cloud 控制台中的重要联系人页面。

    进入“重要联系人”

  2. 确保组织显示在页面顶部的资源选择器中。资源选择器会显示您当前为哪个项目、文件夹或组织管理联系人。

  3. 点击 + 添加联系人系统随即会打开添加联系人面板。

  4. 电子邮件确认电子邮件字段中,输入联系人的电子邮件地址。

  5. 通知类别部分中,选择您希望联系人接收相关信息的通知类别。确保为以下各个通知类别配置相应的电子邮件地址:

    1. Legal
    2. 安全
    3. 暂停
    4. 技术
  6. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Firewall not monitored

API 中的类别名称:FIREWALL_NOT_MONITORED

日志指标和提醒未配置为监控 VPC 网络防火墙规则更改。

通过监控防火墙规则创建和更新事件,您可以深入了解网络访问权限更改情况,并且可以帮助您快速检测可疑活动。如需了解详情,请参阅基于日志的指标概览

如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

创建指标

  1. 进入 Google Cloud 控制台中的基于日志的指标页面。

    转到“基于日志的指标”

  2. 点击创建指标

  3. 指标类型下,选择计数器

  4. 详情下:

    1. 设置日志指标名称
    2. 添加说明
    3. 单位设为 1
  5. 过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:

      resource.type="gce_firewall_rule"
      AND (protoPayload.methodName:"compute.firewalls.insert"
      OR protoPayload.methodName:"compute.firewalls.patch"
      OR protoPayload.methodName:"compute.firewalls.delete")

  6. 点击创建指标。您将看到确认。

创建提醒政策

  1. 在 Google Cloud 控制台中,转到基于日志的指标页面:

    前往基于日志的指标

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 用户定义的指标部分下,选择您在上一部分中创建的指标。
  3. 点击更多 ,然后点击根据指标创建提醒

    系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。

  4. 点击下一步
    1. 查看预先填充的设置。您可能需要修改阈值
    2. 点击条件名称,然后输入条件的名称。
  5. 点击下一步
  6. 如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定

    如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。

  7. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  8. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  9. 点击提醒名称,然后输入提醒政策的名称。
  10. 点击创建政策

了解此发现结果类型的 支持的资源和扫描设置

Firewall rule logging disabled

API 中的类别名称:FIREWALL_RULE_LOGGING_DISABLED

防火墙规则日志记录已停用。

通过防火墙规则日志记录,您可以审核、验证和分析防火墙规则所带来的影响。这对于审核网络访问或提供未经批准的网络使用方式的早期警告非常有用。日志的使用费有可能会非常高。如需详细了解防火墙规则日志记录及其费用,请参阅使用防火墙规则日志记录

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击所需防火墙规则的名称。

  3. 点击 修改

  4. 日志下,选择开启

  5. 点击保存

了解此发现结果类型支持的资产和扫描设置

Flow logs disabled

API 中的类别名称:FLOW_LOGS_DISABLED

有一个 VPC 子网已停用流日志。

VPC 流日志记录了虚拟机实例发送和接收的网络流样本。这些日志可用于网络监控、取证、实时安全分析和费用优化。如需详细了解流日志及其费用,请参阅使用 VPC 流日志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. 在网络列表中,点击所需网络的名称。

  3. VPC 网络详情页面上,点击子网标签页。

  4. 在子网列表中,点击发现结果中指明的子网的名称。

  5. 子网详情页面上,点击 修改

  6. 流日志下,选择开启

了解此发现结果类型的 支持的资源和扫描设置

API 中的类别名称:VPC_FLOW_LOGS_SETTINGS_NOT_RECOMMENDED

在 VPC 网络的子网配置中,VPC 流日志服务已关闭,或者未根据 CIS 基准 1.3 建议进行配置。 VPC 流日志记录了虚拟机实例发送和接收的网络流样本,可用于检测威胁。

如需详细了解 VPC 流日志及其费用,请参阅使用 VPC 流日志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. 在网络列表中,点击网络的名称。

  3. VPC 网络详情页面上,点击子网标签页。

  4. 在子网列表中,点击发现结果中指明的子网的名称。

  5. 子网详情页面上,点击 修改

  6. 流日志下,选择开启

    1. (可选)点击配置日志按钮以展开标签页,然后修改日志配置。CIS 基准建议采用以下设置:
      1. 汇总间隔时间设置为 5 秒
      2. 其他字段复选框中,选择包括元数据选项。
      3. 采样率设置为 100%
      4. 点击保存按钮。

了解此发现结果类型支持的资产和扫描设置

Full API access

API 中的类别名称:FULL_API_ACCESS

Compute Engine 实例配置为使用具有所有 Google Cloud API 的完整访问权限的默认服务账号。

配置了默认服务账号和 API 访问权限的实例 将范围设为允许所有 Cloud API 的全面访问权限可能会允许用户 执行他们没有 IAM 的操作或 API 调用 权限。如需了解详情,请参阅 Compute Engine 默认服务账号

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到“虚拟机实例”

  2. 在实例列表中,点击发现结果中的实例的名称。

  3. 如果实例正在运行,请点击 Stop(停止)。

  4. 实例停止后,点击 修改

  5. 安全和访问权限部分的服务账号下, 选择 Compute Engine 默认服务账号

  6. 访问权限范围下,选择允许默认访问针对每个 API 设置访问权限。这限制了任何进程 或工作负载。

  7. 如果您选择了针对每个 API 设置访问权限,请执行以下操作:

    • Cloud Platform 设置为 None 以停用。
    • 启用默认虚拟机服务账号所需的特定 API 访问权限。
  8. 点击保存

  9. 点击 Start(启动)以启动实例。

了解此发现结果类型的 支持的资源和扫描设置

HTTP load balancer

API 中的类别名称:HTTP_LOAD_BALANCER

Compute Engine 实例使用配置为使用目标 HTTP 代理(而非目标 HTTPS 代理)的负载均衡器。

为了保护数据的完整性并防止入侵者篡改通信,请将 HTTP(S) 负载均衡器配置为仅允许 HTTPS 流量。如需了解详情,请参阅外部 HTTP(S) 负载均衡概览

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的目标代理页面。

    转到“目标代理”

  2. 在目标代理列表中,点击发现结果中的目标代理的名称。

  3. 点击网址映射下的链接。

  4. 点击 修改

  5. 点击前端配置

  6. 删除所有允许 HTTP 流量的前端 IP 和端口配置,并创建允许 HTTPS 流量的新配置。

了解此发现结果类型的 支持的资源和扫描设置

Instance OS login disabled

API 中的类别名称:INSTANCE_OS_LOGIN_DISABLED

此 Compute Engine 实例上已停用 OS Login。

OS Login 通过 IAM 实现集中式 SSH 密钥管理,并对项目中的所有实例停用基于元数据的 SSH 密钥配置。了解如何设置和配置 OS Login

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到“虚拟机实例”

  2. 在实例列表中,点击发现结果中的实例的名称。

  3. 在加载的实例详情页面上,点击 停止

  4. 实例停止后,点击 修改

  5. 自定义元数据部分,确保键为 enable-oslogin 的项的值为 TRUE

  6. 点击保存

  7. 点击 启动以启动实例。

了解此发现结果类型支持的资产和扫描设置

Integrity monitoring disabled

API 中的类别名称:INTEGRITY_MONITORING_DISABLED

GKE 集群上已停用完整性监控。

借助完整性监控功能,您可以使用 Monitoring 来监控和验证安全强化型节点的运行时启动完整性。这样,您就可以响应完整性验证失败并防止遭入侵的节点部署到集群中。

如需修复此发现结果,请完成以下步骤:

预配节点后,将无法对其进行更新以启用完整性监控。您必须创建启用完整性监控的新节点池。

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 点击发现结果中的集群的名称。

  3. 点击添加节点池

  4. 安全性标签页下,确保已启用启用完整性监控

  5. 点击创建

  6. 如需将工作负载从现有的不符合要求的节点池迁移到新节点池,请参阅将工作负载迁移到不同的机器类型

  7. 迁移工作负载后,删除原有的不符合要求的节点池。

    1. Kubernetes 集群页面的节点池菜单中,点击要删除的节点池的名称。
    2. 点击移除节点池

了解此发现结果类型的 支持的资源和扫描设置

Intranode visibility disabled

API 中的类别名称:INTRANODE_VISIBILITY_DISABLED

GKE 集群已停用节点内可见性。

如果启用节点内可见性,系统将向网络架构显示节点内的 pod 到 pod 流量。借助此功能,您可以使用 VPC 流日志记录或其他 VPC 功能来监控或控制节点内流量。如需获取日志,您需在所选的子网中启用 VPC 流日志。如需了解详情,请参阅使用 VPC 流日志

如需修复此发现结果,请完成以下步骤:

预配节点后,将无法对其进行更新以启用完整性监控。您必须创建启用完整性监控的新节点池。

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 网络部分中,点击 修改 节点内可见性行中的节点内可见性

    如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。

  3. 在对话框中,选中启用节点内可见性

  4. 点击保存更改

了解此发现结果类型的 支持的资源和扫描设置

IP alias disabled

API 中的类别名称:IP_ALIAS_DISABLED

创建 GKE 集群时停用了别名 IP 范围。

启用别名 IP 范围时,GKE 集群会分配来自已知 CIDR 块的 IP 地址,因此您的集群可以伸缩并更好地与 Google Cloud 产品和实体进行交互。如需了解详情,请参阅别名 IP 范围概览

如需修复此发现结果,请完成以下步骤:

您无法通过迁移现有集群来使用别名 IP。如需创建启用别名 IP 的新集群,请执行以下操作:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 点击创建

  3. 在导航窗格的集群下,点击网络

  4. 高级网络选项下,选择启用 VPC 原生流量路由(使用别名 IP)

  5. 点击创建

了解此发现结果类型的 支持的资源和扫描设置

IP forwarding enabled

API 中的类别名称:IP_FORWARDING_ENABLED

Compute Engine 实例上启用了 IP 转发。

请为虚拟机停用数据包的 IP 转发,以防止数据丢失或信息泄露。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到“虚拟机实例”

  2. 在实例列表中,选中发现结果中的实例名称旁边的复选框。

  3. 点击 删除

  4. 选择创建实例以创建一个新实例来替换您删除的实例。

  5. 为确保停用 IP 转发,请点击管理、磁盘、网络、SSH 密钥,然后点击网络

  6. 网络接口下,点击 修改

  7. IP 转发下的下拉菜单中,确保选中关闭

  8. 指定任何其他实例参数,然后点击创建。如需了解详情,请参阅创建和启动虚拟机实例

了解此发现结果类型的 支持的资源和扫描设置

KMS key not rotated

API 中的类别名称:KMS_KEY_NOT_ROTATED

没有在 Cloud KMS 加密密钥上配置轮替。

定期轮替加密密钥可提供保护,以防密钥泄露,并且可以限制可用于对特定密钥版本进行加密分析的加密消息数量。如需了解详情,请参阅密钥轮替

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud KMS 密钥页面。

    转到“Cloud KMS 密钥”

  2. 点击发现结果中指明的密钥环的名称。

  3. 点击发现结果中指明的密钥的名称。

  4. 点击修改轮替周期

  5. 将轮替周期设置为最长 90 天。

  6. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

KMS project has owner

API 中的类别名称:KMS_PROJECT_HAS_OWNER

用户对具有加密密钥的项目具有 roles/Owner 权限。如需了解详情,请参阅权限和角色

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM 页面

  2. 如有必要,选择发现结果中的项目。

  3. 对于每个分配了 Owner 角色的主账号:

    1. 点击 修改
    2. 修改权限面板中,点击 Owner 角色旁边的 删除
    3. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

KMS public key

API 中的类别名称:KMS_PUBLIC_KEY

Cloud KMS CryptoKey 或 Cloud KMS 密钥环是公开的,互联网上的任何用户都可以访问。如需了解详情,请参阅将 IAM 与 Cloud KMS 搭配使用

如果此发现结果与 KMS CryptoKey 相关,则执行以下步骤来进行修复:

  1. 转到 Google Cloud 控制台中的“加密密钥”页面

    加密密钥

  2. 名称下,选择包含与 Security Health Analytics 发现结果相关的加密密钥的密钥环。

  3. 在加载的密钥环详细信息页面上,选中加密密钥旁边的复选框。

  4. 如果未显示信息面板,请点击显示信息面板按钮。

  5. 使用角色/主账号前面的过滤条件框搜索 allUsersallAuthenticatedUsers 的主账号,然后点击 删除 即可移除这些主账号的访问权限。

如果此发现结果与 KMS 密钥环相关,则执行以下步骤来进行修复:

  1. 转到 Google Cloud 控制台中的“加密密钥”页面

    加密密钥

  2. 找到发现结果中的密钥环所在的行,然后选中复选框。

  3. 如果未显示信息面板,请点击显示信息面板按钮。

  4. 使用角色 / 主账号前面的过滤条件框搜索主账号 allUsersallAuthenticatedUsers,然后点击 删除以移除这些主账号的访问权限。

了解此发现结果类型支持的资产和扫描设置

KMS role separation

API 中的类别名称:KMS_ROLE_SEPARATION

此发现结果不适用于项目级激活。

一个或多个主账号已分配有多项 Cloud KMS 权限。建议不要为任何账号同时授予 Cloud KMS Admin 和其他 Cloud KMS 权限。如需了解详情,请参阅权限和角色

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM

  2. 对于发现结果中列出的每个主账号,执行以下操作:

    1. 查看继承列,检查角色是否继承自文件夹或组织资源。如果该列包含父资源的链接,请点击链接以转到父资源的 IAM 页面。
    2. 点击主账号旁边的 修改
    3. 如需移除权限,请点击 Cloud KMS Admin 旁边的 删除。如果您要移除 主账号,点击所有其他权限旁边的删除
  3. 点击保存

了解此发现结果类型支持的资产和扫描设置

Legacy authorization enabled

API 中的类别名称:LEGACY_AUTHORIZATION_ENABLED

在 GKE 集群上启用了旧版授权。

在 Kubernetes 中,借助基于角色的访问权限控制 (RBAC),您可以使用包含一组权限的规则定义角色,并在集群和命名空间级别授予权限。这样可确保用户仅拥有特定资源的访问权限,从而提高了安全性。请考虑停用旧版基于特性的访问权限控制 (ABAC)

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 Kubernetes 集群

  2. 选择 Security Health Analytics 发现结果中列出的集群。

  3. 点击 修改

    如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。

  4. 旧版授权下拉列表中,选择已停用

  5. 点击保存

了解此发现结果类型支持的资产和扫描设置

Legacy metadata enabled

API 中的类别名称:LEGACY_METADATA_ENABLED

在 GKE 集群上启用了旧版元数据。

Compute Engine 的实例元数据服务器提供旧版 /0.1//v1beta1/ 端点,这些端点不会强制执行元数据查询标头。这是 /v1/ API 中的一项功能,使得潜在的攻击者难以检索实例元数据。除非有要求,否则我们建议停用这些旧版 /0.1//v1beta1/ API。

如需了解详情,请参阅停用旧版元数据 API 并从其转换到新版

如需修复此发现结果,请完成以下步骤:

您只能在创建新集群或在向现有集群添加新节点池时停用旧版元数据 API。如需更新现有集群和停用旧版元数据 API,请参阅将工作负载迁移到不同的机器类型

了解此发现结果类型的 支持的资源和扫描设置

Legacy network

API 中的类别名称:LEGACY_NETWORK

项目中存在旧版网络。

许多新的 Google Cloud 安全功能在旧版网络中不受支持,因此我们不建议您使用旧版网络。请改用 VPC 网络。如需了解详情,请参阅旧版网络

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. 如需创建新的非旧版网络,请点击创建网络

  3. 返回到 VPC 网络页面。

  4. 在网络列表中,点击 legacy_network

  5. VPC 网络详情页面中,点击 删除 VPC 网络

了解此发现结果类型支持的资产和扫描设置

Load balancer logging disabled

API 中的类别名称:LOAD_BALANCER_LOGGING_DISABLED

已为负载均衡器中的后端服务停用日志记录功能。

为负载均衡器启用日志记录功能后,您就可以查看 Web 应用的 HTTP(S) 网络流量。如需了解详情,请参阅负载均衡器

如需修复此发现结果,请完成以下步骤:

  1. 打开 Google Cloud 控制台中的 Cloud Load Balancing 页面。

    打开 Cloud Load Balancing

  2. 点击您的负载均衡器的名称。

  3. 点击 修改

  4. 点击后端配置

  5. 后端配置页面中,点击 修改

  6. 日志记录部分,选择启用日志记录,然后为您的项目选择最佳采样率。

  7. 如需完成后端服务的修改,请点击更新

  8. 如需完成负载均衡器修改,请点击更新

了解此发现结果类型支持的资产和扫描设置

Locked retention policy not set

API 中的类别名称:LOCKED_RETENTION_POLICY_NOT_SET

没有为日志设置锁定的保留政策。

锁定的保留政策会防止覆盖日志和删除日志存储桶。有关详情,请参阅存储分区 锁定

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的存储空间浏览器页面。

    转到存储空间浏览器

  2. 选择 Security Health Analytics 发现结果中列出的存储桶。

  3. 存储桶详情页面上,点击保留标签页。

  4. 如果尚未设置保留政策,请点击设置保留政策

  5. 输入保留期限。

  6. 点击保存。保留政策显示在保留标签页中。

  7. 点击锁定以确保保留期限不会缩短或移除。

了解此发现结果类型支持的资产和扫描设置

Log not exported

API 中的类别名称:LOG_NOT_EXPORTED

资源没有配置适当的日志接收器。

Cloud Logging 可帮助您迅速找出系统和应用问题的根本原因。不过,大多数日志在默认情况下只保留 30 天。 导出所有日志条目的副本以延长存储期。如需了解详情,请参阅日志导出概览

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的日志路由器页面。

    转到“日志路由器”

  2. 点击创建接收器

  3. 为确保导出所有日志,请将包含过滤器和排除过滤器留空。

  4. 点击创建接收器

了解此发现结果类型支持的资产和扫描设置

Master authorized networks disabled

API 中的类别名称:MASTER_AUTHORIZED_NETWORKS_DISABLED

未在 GKE 集群上启用控制层面授权网络。

控制平面授权网络通过阻止指定的 IP 地址访问集群的控制平面来提高容器集群的安全性。如需了解详情,请参阅添加授权网络以实现控制层面访问

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 Kubernetes 集群

  2. 选择 Security Health Analytics 发现结果中列出的集群。

  3. 点击 修改

    如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。

  4. 控制平面授权网络下拉列表中,选择已启用

  5. 点击添加已获授权的网络

  6. 指定您要使用的授权网络。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

MFA not enforced

API 中的类别名称:MFA_NOT_ENFORCED

此发现结果不适用于项目级激活。

为您的组织中的部分用户停用了多重身份验证(具体而言是两步验证 (2SV))。

多重身份验证可用于保护账号免遭未经授权的访问,是保护您的组织免遭登录凭据被盗的最重要工具。如需了解详情,请参阅通过两步验证来保护您的企业

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的管理控制台页面。

    转至管理控制台

  2. 为所有单位部门强制执行两步验证。

禁止此类发现结果

如需禁止此类型的发现结果,请定义忽略规则以自动忽略此类型的未来发现结果。如需了解详情,请参阅在 Security Command Center 中忽略发现结果

虽然这不是推荐用来禁止发现结果的方法,但您也可以向资产添加专用安全标记,这样 Security Health Analytics 检测器就不会为这些资产创建安全发现结果。

  • 为防止再次激活此发现结果,请向资源添加值为 true 的安全标记 allow_mfa_not_enforced
  • 如需忽略特定单位部门的潜在违规行为,请在字段中使用以英文逗号分隔的单位部门路径向资源添加 excluded_orgunits 安全标记。例如 excluded_orgunits:/people/vendors/vendorA,/people/contractors/contractorA

了解此发现结果类型支持的资产和扫描设置

Network not monitored

API 中的类别名称:NETWORK_NOT_MONITORED

日志指标和提醒未配置为监控 VPC 网络更改。

如需检测网络设置的不正确更改或未经授权的更改,请监控 VPC 网络更改。如需了解详情,请参阅基于日志的指标概览

如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

创建指标

  1. 进入 Google Cloud 控制台中的基于日志的指标页面。

    转到“基于日志的指标”

  2. 点击创建指标

  3. 指标类型下,选择计数器

  4. 详情下:

    1. 设置日志指标名称
    2. 添加说明
    3. 单位设为 1
  5. 过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:

      resource.type="gce_network"
      AND (protoPayload.methodName:"compute.networks.insert"
      OR protoPayload.methodName:"compute.networks.patch"
      OR protoPayload.methodName:"compute.networks.delete"
      OR protoPayload.methodName:"compute.networks.removePeering"
      OR protoPayload.methodName:"compute.networks.addPeering")

  6. 点击创建指标。您将看到确认。

创建提醒政策

  1. 在 Google Cloud 控制台中,转到基于日志的指标页面:

    前往基于日志的指标

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 用户定义的指标部分下,选择您在上一部分中创建的指标。
  3. 点击更多 ,然后点击根据指标创建提醒

    系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。

  4. 点击下一步
    1. 查看预先填充的设置。您可能需要修改阈值
    2. 点击条件名称,然后输入条件的名称。
  5. 点击下一步
  6. 如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定

    如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。

  7. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  8. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  9. 点击提醒名称,然后输入提醒政策的名称。
  10. 点击创建政策

了解此发现结果类型的 支持的资源和扫描设置

Network policy disabled

API 中的类别名称:NETWORK_POLICY_DISABLED

已在 GKE 集群上停用网络政策。

默认情况下,pod 到 pod 的通信处于开放状态。开放的通信使 pod 能够直接跨节点连接,无论是否使用网络地址转换。NetworkPolicy 资源类似于 pod 层面的防火墙,会限制 pod 之间的连接,除非 NetworkPolicy 资源明确允许连接。了解如何定义网络政策

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 Kubernetes 集群

  2. 点击 Security Health Analytics 发现结果中列出的集群的名称。

  3. 网络下的 Calico Kubernetes 网络政策行中,点击 修改

    如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。

  4. 在对话框中,选择为控制平面启用 Calico Kubernetes 网络政策,然后 为节点启用 Calico Kubernetes 网络政策

  5. 点击保存更改

了解此发现结果类型的 支持的资源和扫描设置

Nodepool boot CMEK disabled

API 中的类别名称:NODEPOOL_BOOT_CMEK_DISABLED

此节点池中的启动磁盘未使用客户管理的加密密钥 (CMEK) 进行加密。CMEK 允许用户为节点池中的启动磁盘配置默认加密密钥。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 在集群列表中,点击发现结果中的集群的名称。

  3. 点击节点标签页。

  4. 对于每个 default-pool 节点池,点击 删除

  5. 当系统提示您确认时,点击删除

  6. 如需使用 CMEK 创建新的节点池,请参阅使用客户管理的加密密钥 (CMEK)。CMEK 会产生与 Cloud KMS 相关的额外费用。

了解此发现结果类型的 支持的资源和扫描设置

Nodepool secure boot disabled

API 中的类别名称:NODEPOOL_SECURE_BOOT_DISABLED

GKE 集群已停用安全启动。

为安全强化型 GKE 节点启用安全启动,以验证节点启动组件的数字签名。如需了解详情,请参阅安全启动

如需修复此发现结果,请完成以下步骤:

预配节点池后,将无法对其进行更新以启用安全启动。您必须创建启用安全启动的新节点池。

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 点击发现结果中的集群的名称。

  3. 点击添加节点池

  4. 节点池菜单中,执行以下操作:

    1. 点击新节点池的名称以展开相应标签页。
    2. 选择安全,然后在安全强化选项下选中启用安全启动
    3. 点击创建
    4. 如需将工作负载从现有的不符合要求的节点池迁移到新节点池,请参阅将工作负载迁移到不同的机器类型
    5. 迁移工作负载后,删除原有的不符合要求的节点池。

了解此发现结果类型的 支持的资源和扫描设置

Non org IAM member

API 中的类别名称:NON_ORG_IAM_MEMBER

组织之外的用户拥有项目或组织的 IAM 权限。详细了解 IAM 权限

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM

  2. 选中组织或项目外用户旁边的复选框。

  3. 点击移除

了解此发现结果类型支持的资产和扫描设置

Object versioning disabled

API 中的类别名称:OBJECT_VERSIONING_DISABLED

配置了接收器的存储桶上未启用对象版本控制。

为了支持检索已删除或覆盖的对象,Cloud Storage 提供了对象版本控制功能。启用对象版本控制可防止 Cloud Storage 的数据被覆盖或意外删除。了解如何 启用对象版本控制

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请在--versioning gcloud storage buckets update 命令:

    gcloud storage buckets update gs://finding.assetDisplayName --versioning

finding.assetDisplayName 替换为相关存储桶的名称。

了解此发现结果类型支持的资产和扫描设置

Open Cassandra port

API 中的类别名称:OPEN_CASSANDRA_PORT

允许任何 IP 地址连接到 Cassandra 端口的防火墙规则可能会将您的 Cassandra 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

Cassandra 服务端口包括:

  • TCP - 7000, 7001, 7199, 8888, 9042, 9160, 61620, 61621

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Open ciscosecure websm port

API 中的类别名称:OPEN_CISCOSECURE_WEBSM_PORT

允许任何 IP 地址连接到 CiscoSecure/WebSM 端口的防火墙规则可能会将您的 CiscoSecure/WebSM 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

CiscoSecure/WebSM 服务端口包括:

  • TCP - 9090

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Open directory services port

API 中的类别名称:OPEN_DIRECTORY_SERVICES_PORT

允许任何 IP 地址连接到 Directory 端口的防火墙规则可能会将您的 Directory 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

Directory 服务端口包括:

  • TCP - 445
  • UDP - 445

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open DNS port

API 中的类别名称:OPEN_DNS_PORT

允许任何 IP 地址连接到 DNS 端口的防火墙规则可能会将您的 DNS 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

DNS 服务端口包括:

  • TCP - 53
  • UDP - 53

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Open Elasticsearch port

API 中的类别名称:OPEN_ELASTICSEARCH_PORT

允许任何 IP 地址连接到 Elasticsearch 端口的防火墙规则可能会将您的 Elasticsearch 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

Elasticsearch 服务端口包括:

  • TCP - 9200, 9300

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open firewall

API 中的类别名称:OPEN_FIREWALL

若防火墙规则允许来自所有 IP 地址(例如 0.0.0.0/0)或所有端口的连接,可能会使资源不必要地暴露在非预期来源的攻击之下。应移除这些规则,或将范围明确限定为预期的来源 IP 地址范围或端口。例如,在打算公开的应用中,请考虑将允许的端口限制为应用所需的端口,如 80 和 443。如果您的应用需要允许来自所有 IP 地址或端口的连接,请考虑将资源添加到许可名单。详细了解如何更新防火墙规则

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙规则页面。

    转到“防火墙规则”

  2. 点击 Security Health Analytics 发现结果中列出的防火墙规则,然后点击 修改

  3. 来源 IP 地址范围下,修改 IP 值以限制允许的 IP 范围。

  4. 协议和端口下,选择指定的协议和端口,再选择允许的协议,并输入允许的端口。

  5. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open FTP port

API 中的类别名称:OPEN_FTP_PORT

允许任何 IP 地址连接到 FTP 端口的防火墙规则可能会将您的 FTP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

FTP 服务端口包括:

  • TCP - 21

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Open group IAM member

API 中的类别名称:OPEN_GROUP_IAM_MEMBER

有权访问组织、项目或文件夹的一个或多个主账号是无需批准即可加入的 Google 群组账号。

Google Cloud 客户可以使用 Google 群组管理其组织成员的角色和权限,或对一系列用户应用访问权限政策。管理员可以直接向成员授予角色和权限,然后将成员添加到特定群组,而不是直接向成员授予角色。群组成员会继承群组的所有角色和权限,使成员可以访问特定资源和服务。

如果在 IAM 绑定中将打开的 Google 群组账号用作主账号,则任何人都可以直接或间接加入群组(通过子群组),以继承关联的角色。我们建议您撤消开放群组的角色或限制对这些群组的访问权限。

要修复此发现结果,请执行以下步骤之一。

从 IAM 政策中移除群组

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    Go IAM

  2. 如有必要,请在发现结果中选择项目、文件夹或组织。

  3. 撤消发现结果中确定的每个开放群组的角色

限制对开放群组的访问权限

  1. 登录 Google 群组
  2. 更新每个未结群组及其子群组的设置,以指定谁可以加入群组以及谁可以批准他们。

了解此发现结果类型支持的资产和扫描设置

Open HTTP port

API 中的类别名称:OPEN_HTTP_PORT

允许任何 IP 地址连接到 HTTP 端口的防火墙规则可能会将您的 HTTP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

HTTP 服务端口包括:

  • TCP - 80

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open LDAP port

API 中的类别名称:OPEN_LDAP_PORT

允许任何 IP 地址连接到 LDAP 端口的防火墙规则可能会将您的 LDAP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

LDAP 服务端口包括:

  • TCP - 389, 636
  • UDP - 389

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Open Memcached port

API 中的类别名称:OPEN_MEMCACHED_PORT

允许任何 IP 地址连接到 Memcached 端口的防火墙规则可能会将您的 Memcached 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

Memcached 服务端口包括:

  • TCP - 11211, 11214, 11215
  • UDP - 11211, 11214, 11215

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open MongoDB port

API 中的类别名称:OPEN_MONGODB_PORT

允许任何 IP 地址连接到 MongoDB 端口的防火墙规则可能会将您的 MongoDB 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

MongoDB 服务端口包括:

  • TCP - 27017, 27018, 27019

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open MySQL port

API 中的类别名称:OPEN_MYSQL_PORT

允许任何 IP 地址连接到 MySQL 端口的防火墙规则可能会将您的 MySQL 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

MySQL 服务端口包括:

  • TCP - 3306

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Open NetBIOS port

API 中的类别名称:“OPEN_NETBIOS_PORT”

允许任何 IP 地址连接到 NetBIOS 端口的防火墙规则可能会将您的 NetBIOS 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

NetBIOS 服务端口包括:

  • TCP - 137, 138, 139
  • UDP - 137, 138, 139

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open OracleDB port

API 中的类别名称:OPEN_ORACLEDB_PORT

允许任何 IP 地址连接到 OracleDB 端口的防火墙规则可能会将您的 OracleDB 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

OracleDB 服务端口包括:

  • TCP - 1521, 2483, 2484
  • UDP - 2483, 2484

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Open POP3 port

API 中的类别名称:OPEN_POP3_PORT

允许任何 IP 地址连接到 POP3 端口的防火墙规则可能会将您的 POP3 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

POP3 服务端口包括:

  • TCP - 110

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open PostgreSQL port

API 中的类别名称:OPEN_POSTGRESQL_PORT

允许任何 IP 地址连接到 PostgreSQL 端口的防火墙规则可能会将您的 PostgreSQL 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

PostgreSQL 服务端口包括:

  • TCP - 5432
  • UDP - 5432

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Open RDP port

API 中的类别名称:OPEN_RDP_PORT

允许任何 IP 地址连接到 RDP 端口的防火墙规则可能会将您的 RDP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

RDP 服务端口包括:

  • TCP - 3389
  • UDP - 3389

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open Redis port

API 中的类别名称:OPEN_REDIS_PORT

允许任何 IP 地址连接到 Redis 端口的防火墙规则可能会将您的 Redis 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

Redis 服务端口包括:

  • TCP - 6379

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Open SMTP port

API 中的类别名称:OPEN_SMTP_PORT

允许任何 IP 地址连接到 SMTP 端口的防火墙规则可能会将您的 SMTP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

SMTP 服务端口包括:

  • TCP - 25

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open SSH port

API 中的类别名称:OPEN_SSH_PORT

允许任何 IP 地址连接到 SSH 端口的防火墙规则可能会将您的 SSH 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

SSH 服务端口包括:

  • SCTP - 22
  • TCP - 22

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Open Telnet port

API 中的类别名称:OPEN_TELNET_PORT

允许任何 IP 地址连接到 Telnet 端口的防火墙规则可能会将您的 Telnet 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览

Telnet 服务端口包括:

  • TCP - 23

此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的防火墙页面。

    转到“防火墙”

  2. 在防火墙规则列表中,点击发现结果中的防火墙规则的名称。

  3. 点击 修改

  4. 来源 IP 地址范围下,删除 0.0.0.0/0

  5. 添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。

  6. 添加您要在实例上打开的特定协议和端口。

  7. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Org policy Confidential VM policy

API 中的类别名称:ORG_POLICY_CONFIDENTIAL_VM_POLICY

Compute Engine 资源未遵守 constraints/compute.restrictNonConfidentialComputing 组织政策。如需详细了解此组织政策限制条件,请参阅实施组织政策限制条件

您的组织要求此虚拟机启用机密虚拟机服务。未启用此服务的虚拟机不会使用运行时内存加密,这会使其面临运行时内存攻击。

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到“虚拟机实例”

  2. 在实例列表中,点击发现结果中的实例的名称。

  3. 如果虚拟机不需要机密虚拟机服务,请将其移到新文件夹或项目。

  4. 如果虚拟机需要机密虚拟机,请点击 删除

  5. 如需创建启用机密虚拟机的新实例,请参阅快速入门:创建机密虚拟机实例

了解此发现结果类型支持的资产和扫描设置

Org policy location restriction

API 中的类别名称:ORG_POLICY_LOCATION_RESTRICTION

通过组织政策 gcp.resourceLocations 限制条件,您可以新资源的创建限制在您选择的 Cloud 区域内。如需了解详情,请参阅限制资源位置

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

ORG_POLICY_LOCATION_RESTRICTION 检测器涵盖许多资源类型,且每种资源的修复说明不同。解决位置违规行为的一般方法包括:

  1. 将区域外的资源或其数据复制、移动或备份到区域内的资源。如需获取有关如何移动资源的说明,请参阅各项服务的文档。
  2. 删除原始区域外的资源或其数据。

此方法不适用于所有资源类型。如需获取相关指导,请参阅发现结果中提供的自定义建议。

其他注意事项

修复此发现结果时,请考虑以下事项。

代管资源

资源的生命周期有时可能会被其他资源管理和控制。例如,代管式 Compute Engine 实例组会根据实例组的自动扩缩政策创建和销毁 Compute Engine 实例。如果代管资源和管理资源在位置强制执行范围内,则这两种资源都可能会被标记为违反组织政策。应在管理资源上修复代管资源的发现结果,以确保操作稳定性。

使用中的资源

某些资源会被其他资源使用。例如,挂接到正在运行的 Compute Engine 实例的 Compute Engine 磁盘被视为正被实例使用。如果使用中的资源违反了位置组织政策,则您需要确保在解决位置违规行为之前,该资源未被使用。

了解此发现结果类型支持的资产和扫描设置

OS login disabled

API 中的类别名称:OS_LOGIN_DISABLED

此 Compute Engine 实例上已停用 OS Login。

OS Login 通过 IAM 实现集中式 SSH 密钥管理,并对项目中的所有实例停用基于元数据的 SSH 密钥配置。了解如何设置和配置 OS Login

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的元数据页面。

    转到元数据

  2. 点击修改,然后点击添加一项

  3. 添加键为 enable-oslogin 值为 TRUE 的一项。

了解此发现结果类型支持的资产和扫描设置

Over privileged account

API 中的类别名称:OVER_PRIVILEGED_ACCOUNT

GKE 节点使用 Compute Engine 默认服务节点,默认具有广泛的访问权限,对于运行 GKE 集群来说可能权限过高。

如需修复此发现结果,请完成以下步骤:

按照说明使用最小权限 Google 服务账号

了解此发现结果类型支持的资产和扫描设置

Over privileged scopes

API 中的类别名称:OVER_PRIVILEGED_SCOPES

节点服务账号具有广泛的访问权限范围。

访问权限范围是为实例指定权限的传统方法。 为了降低攻击过程中提升权限的可能性,请创建并使用具有最小权限的服务账号来运行 GKE 集群。

要修复此发现结果,请按照使用最小权限 Google 服务账号中的说明操作。

了解此发现结果类型的 支持的资源和扫描设置

Over privileged service account user

API 中的类别名称:OVER_PRIVILEGED_SERVICE_ACCOUNT_USER

用户在项目、文件夹或组织级层(而不是特定服务账号)拥有 iam.serviceAccountUseriam.serviceAccountTokenCreator 角色。

如果将项目、文件夹或组织的这些角色授予某个用户,该用户将有权访问该项目中所有现有和未来的服务账号。这种情况可能会导致权限意外升级。如需了解详情,请参阅服务账号权限

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM 页面

  2. 如有必要,请在发现结果中选择项目、文件夹或组织。

  3. 对于每个分配有 roles/iam.serviceAccountUserroles/iam.serviceAccountTokenCreator 的主账号,请执行以下操作:

    1. 点击 修改
    2. 修改权限面板中,点击相应角色旁边的 删除
    3. 点击保存
  4. 请按照本指南授予各个用户模拟单个服务账号的权限。对于您希望允许所选用户模拟的每个服务账号,您需要遵循相应的指南。

了解此发现结果类型支持的资产和扫描设置

Owner not monitored

API 中的类别名称:OWNER_NOT_MONITORED

日志指标和提醒未配置为监控项目所有权分配或更改。

IAM Owner 角色拥有项目的最高级别权限。如需保障资源安全,您可以设置提醒,以在添加新的所有者或移除所有者时收到通知。如需了解详情,请参阅基于日志的指标概览

如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

创建指标

  1. 进入 Google Cloud 控制台中的基于日志的指标页面。

    转到“基于日志的指标”

  2. 点击创建指标

  3. 指标类型下,选择计数器

  4. 详情下:

    1. 设置日志指标名称
    2. 添加说明
    3. 单位设为 1
  5. 过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:

      (protoPayload.serviceName="cloudresourcemanager.googleapis.com")
      AND (ProjectOwnership OR projectOwnerInvitee)
      OR (protoPayload.serviceData.policyDelta.bindingDeltas.action="REMOVE"
      AND protoPayload.serviceData.policyDelta.bindingDeltas.role="roles/owner")
      OR (protoPayload.serviceData.policyDelta.bindingDeltas.action="ADD"
      AND protoPayload.serviceData.policyDelta.bindingDeltas.role="roles/owner")

  6. 点击创建指标。您将看到确认。

创建提醒政策

  1. 在 Google Cloud 控制台中,转到基于日志的指标页面:

    前往基于日志的指标

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 用户定义的指标部分下,选择您在上一部分中创建的指标。
  3. 点击更多 ,然后点击根据指标创建提醒

    系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。

  4. 点击下一步
    1. 查看预先填充的设置。您可能需要修改阈值
    2. 点击条件名称,然后输入条件的名称。
  5. 点击下一步
  6. 如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定

    如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。

  7. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  8. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  9. 点击提醒名称,然后输入提醒政策的名称。
  10. 点击创建政策

了解此发现结果类型支持的资产和扫描设置

Pod security policy disabled

API 中的类别名称:POD_SECURITY_POLICY_DISABLED

GKE 集群上停用了 PodSecurityPolicy

PodSecurityPolicy 是一种准入控制器资源,用于验证在集群上创建和更新 Pods 的请求。集群不会接受不符合 PodSecurityPolicy 中所定义条件的 pod。

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

要修复此发现结果,请定义并授权 PodSecurityPolicies,然后启用 PodSecurityPolicy 控制器。如需查看相关说明,请参阅使用 PodSecurityPolicies

了解此发现结果类型支持的资产和扫描设置

Primitive roles used

API 中的类别名称:PRIMITIVE_ROLES_USED

用户具有以下 IAM 基本角色之一:roles/ownerroles/editorroles/viewer。这些角色权限过于宽松,不应使用。应该按项目分配这些角色。

如需了解详情,请参阅了解角色

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 IAM 页面。

    转到“IAM 政策”

  2. 对于分配有原初角色的每个用户,请考虑改用更精细的角色。

了解此发现结果类型支持的资产和扫描设置

Private cluster disabled

API 中的类别名称:PRIVATE_CLUSTER_DISABLED

GKE 集群停用了专用集群。

专用集群仅允许节点具有专用 IP 地址。此功能限制节点的出站互联网访问权限。如果集群节点没有公共 IP 地址,就不会在公共互联网上被检测到,也不会被公开。您仍可以使用内部负载均衡器将流量路由到这些节点。如需了解详情,请参阅专用集群

您无法将现有集群设置为专用。要修复此发现结果,请创建新的专用集群:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 Kubernetes 集群

  2. 点击创建集群

  3. 在导航菜单的集群下,选择网络

  4. 选择专用集群单选按钮。

  5. 高级网络选项下,选中启用 VPC 原生流量路由(使用别名 IP)复选框。

  6. 点击创建

了解此发现结果类型的 支持的资源和扫描设置

Private Google access disabled

API 中的类别名称:PRIVATE_GOOGLE_ACCESS_DISABLED

有一些专用子网无权访问 Google 公共 API。

专用 Google 访问通道支持仅具有内部(专用)IP 地址的虚拟机实例访问 Google API 和服务的公共 IP 地址。

如需了解详情,请参阅配置 Google 专用访问通道

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 VPC 网络页面。

    转到 VPC 网络页面

  2. 在网络列表中,点击所需网络的名称。

  3. VPC 网络详情页面上,点击子网标签页。

  4. 在子网列表中,点击与发现结果中的 Kubernetes 集群关联的子网的名称。

  5. 子网详情页面上,点击 修改

  6. 专用 Google 访问通道下,选择开启

  7. 点击保存

  8. 要从其外部流量仅流向 Google API 的虚拟机实例移除公共(外部)IP 地址,请参阅取消分配静态外部 IP 地址

了解此发现结果类型的 支持的资源和扫描设置

Public bucket ACL

API 中的类别名称:PUBLIC_BUCKET_ACL

存储桶是公开的,互联网上的任何用户都可以访问。

如需了解详情,请参阅访问权限控制概览

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的存储空间浏览器页面。

    转到存储空间浏览器

  2. 选择 Security Health Analytics 发现结果中列出的存储桶。

  3. 存储桶详情页面上,点击权限标签。

  4. 查看方式旁边,点击角色

  5. 过滤条件框中,搜索 allUsersallAuthenticatedUsers

  6. 点击 Delete(删除)以移除授予 allUsersallAuthenticatedUsers 的所有 IAM 权限。

了解此发现结果类型的 支持的资源和扫描设置

Public Compute image

API 中的类别名称:PUBLIC_COMPUTE_IMAGE

Compute Engine 映像是公开的,互联网上的任何用户都可以访问。allUsers 表示互联网上的任何用户,allAuthenticatedUsers 表示使用 Google 账号进行了身份验证的任何用户。两者都不局限于组织内的用户。

Compute Engine 映像可能包含加密密钥或许可软件等敏感信息。此类敏感信息不应允许公开访问。如果您打算将此 Compute Engine 映像设为公开,请确保其不包含任何敏感信息。

如需了解详情,请参阅访问权限控制概览

如需修复此发现结果,请完成以下步骤:

  1. 转到 Cloud 控制台中的 Compute Engine 映像页面。

    转到“Compute Engine 映像”

  2. 选中 public-image 映像旁边的复选框,然后点击显示信息面板

  3. 过滤条件框中,搜索 allUsersallAuthenticatedUsers 的主账号。

  4. 展开您要移除用户的角色。

  5. 点击 删除以从该角色中移除用户。

了解此发现结果类型的 支持的资源和扫描设置

Public dataset

API 中的类别名称:PUBLIC_DATASET

BigQuery 数据集是公开的,互联网上的任何用户都可以访问。IAM 主账号 allUsers 表示互联网上的任何用户,allAuthenticatedUsers 表示登录了 Google 服务的任何用户。两者都不局限于组织内的用户。

如需了解详情,请参阅控制对数据集的访问

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中转到 BigQuery 数据集页面。

    进入“BigQuery 数据集”

  2. 在数据集列表中,点击发现结果中标识的数据集的名称。此时会打开数据集信息面板。

  3. 数据集信息面板顶部附近,点击共享

  4. 在下拉菜单中,点击权限

  5. 数据集权限面板中,输入 allUsersallAuthenticatedUsers,并移除这些主账号的访问权限。

了解此发现结果类型支持的资产和扫描设置

Public IP address

API 中的类别名称:PUBLIC_IP_ADDRESS

Compute Engine 实例具有公共 IP 地址。

为了缩小组织的受攻击面,请避免向虚拟机分配公共 IP 地址。已停止的实例可能仍会被标记为“公共 IP 发现结果”,例如,网络接口被配置为在启动时分配临时公共 IP 时就是如此。请确保已停止的实例的网络配置不包含外部访问权限。

如需了解详情,请参阅安全连接到虚拟机实例

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到虚拟机实例

  2. 在实例列表中,选中发现结果中的实例名称旁边的复选框。

  3. 点击 修改

  4. 对于网络接口下的每个接口,点击 修改并将外部 IP 设置为

  5. 点击完成,然后点击保存

了解此发现结果类型支持的资产和扫描设置

Public log bucket

API 中的类别名称:PUBLIC_LOG_BUCKET

此发现结果不适用于项目级激活。

存储桶是公开的,并用作日志接收器,这意味着互联网上的任何用户都可以访问此存储桶中存储的日志。allUsers 表示互联网上的任何用户,allAuthenticatedUsers 表示已登录 Google 服务的任何用户。两者都不局限于组织内的用户。

如需了解详情,请参阅访问权限控制概览

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 Cloud Storage 浏览器页面。

    转到 Cloud Storage 浏览器

  2. 在存储桶列表中,点击发现结果中指明的存储桶的名称。

  3. 点击权限标签页。

  4. 从主账号列表中移除 allUsersallAuthenticatedUsers

了解此发现结果类型支持的资产和扫描设置

Public SQL instance

API 中的类别名称:PUBLIC_SQL_INSTANCE

您的 SQL 实例使用 0.0.0.0/0 作为允许的网络。这意味着任何 IPv4 客户端(包括您不打算允许的客户端)都可以穿过网络防火墙并尝试登录您的实例。客户端仍需要提供有效凭据才能成功登录您的实例。

如需了解详情,请参阅使用授权网络进行授权

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 在导航面板中,点击连接

  5. 已获授权的网络下,删除 0.0.0.0/0 并添加您希望允许连接实例的特定 IP 地址或 IP 范围。

  6. 点击完成,然后点击保存

了解此发现结果类型支持的资产和扫描设置

Pubsub CMEK disabled

API 中的类别名称:PUBSUB_CMEK_DISABLED

Pub/Sub 主题未使用客户管理的加密密钥 (CMEK) 进行加密。

借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。

如需修复此发现结果,请删除现有主题并创建一个新主题:

  1. 转到 Google Cloud 控制台中的 Pub/Sub 的主题页面。

    转到主题

  2. 如有必要,请选择包含 Pub/Sub 主题的项目。

  3. 选中发现结果中列出的主题旁边的复选框,然后点击 删除

  4. 如需在启用 CMEK 的情况下创建新的 Pub/Sub 主题,请参阅使用客户管理的加密密钥。CMEK 会产生与 Cloud KMS 相关的额外费用。

  5. 将发现结果或其他数据发布到启用了 CMEK 的 Pub/Sub 主题。

了解此发现结果类型的 支持的资源和扫描设置

Route not monitored

API 中的类别名称:ROUTE_NOT_MONITORED

日志指标和提醒未配置为监控 VPC 网络路由更改。

Google Cloud 路由是目的地和跃点,用于定义网络流量从虚拟机实例流向目的地 IP 所经过的路径。通过监控路由表的更改,您可以帮助确保所有 VPC 流量均经过预期的路径。

如需了解详情,请参阅基于日志的指标概览

如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

创建指标

  1. 进入 Google Cloud 控制台中的基于日志的指标页面。

    转到“基于日志的指标”

  2. 点击创建指标

  3. 指标类型下,选择计数器

  4. 详情下:

    1. 设置日志指标名称
    2. 添加说明
    3. 单位设为 1
  5. 过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:

      resource.type="gce_route"
      AND (protoPayload.methodName:"compute.routes.delete"
      OR protoPayload.methodName:"compute.routes.insert")

  6. 点击创建指标。您将看到确认。

创建提醒政策

  1. 在 Google Cloud 控制台中,转到基于日志的指标页面:

    前往基于日志的指标

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 用户定义的指标部分下,选择您在上一部分中创建的指标。
  3. 点击更多 ,然后点击根据指标创建提醒

    系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。

  4. 点击下一步
    1. 查看预先填充的设置。您可能需要修改阈值
    2. 点击条件名称,然后输入条件的名称。
  5. 点击下一步
  6. 如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定

    如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。

  7. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  8. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  9. 点击提醒名称,然后输入提醒政策的名称。
  10. 点击创建政策

了解此发现结果类型支持的资产和扫描设置

Redis role used on org

API 中的类别名称:REDIS_ROLE_USED_ON_ORG

此发现结果不适用于项目级激活。

Redis IAM 角色在组织或文件夹级层分配。

以下 Redis IAM 角色应仅按项目(而不是在组织或文件夹级层)分配:

  • roles/redis.admin
  • roles/redis.viewer
  • roles/redis.editor

如需了解详情,请参阅访问权限控制和权限

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 IAM 页面。

    转到“IAM 政策”

  2. 移除发现结果中指明的 Redis IAM 角色,改为分别在每个项目上添加它们。

了解此发现结果类型的 支持的资源和扫描设置

Release channel disabled

API 中的类别名称:RELEASE_CHANNEL_DISABLED

GKE 集群未订阅发布渠道。

订阅发布渠道以自动管理 GKE 集群的版本升级。这些功能还可以将版本管理的复杂性降低到所需的功能数量和稳定性级别。如需了解详情,请参阅发布渠道

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 KUBERNETES 集群

  2. 集群基本信息部分,点击 升级集群 发布版本行中的“主版本”

    如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。

  3. 在对话框中,选择发布渠道,然后选择您要订阅的发布渠道。

    如果集群的控制层面版本无法升级到发布渠道,则该渠道可能会作为选项停用。

  4. 点击保存更改

了解此发现结果类型支持的资产和扫描设置

RSASHA1 for signing

API 中的类别名称:RSASHA1_FOR_SIGNING

RSASHA1 用于 Cloud DNS 区域中的密钥登录。用于密钥签名的算法不应该是安全系数较低的算法。

要修复此发现结果,请根据使用高级签名选项指南将算法替换为建议的算法。

了解此发现结果类型支持的资产和扫描设置

Service account key not rotated

API 中的类别名称:SERVICE_ACCOUNT_KEY_NOT_ROTATED

此发现结果不适用于项目级激活。

用户管理的服务账号密钥超过 90 天未轮替。

通常,用户管理的服务账号密钥应至少每 90 天轮替一次,以确保可能已丢失、遭破解或被盗用的旧密钥无法用于访问数据。如需了解详情,请参阅轮替服务账号密钥以降低密钥泄露造成的安全风险

如果您自行生成公钥/私钥对,将私钥存储在硬件安全模块 (HSM) 中,并且将公钥上传到 Google,那么您可能就不需要每 90 天轮替一次密钥。另外,如果您认为密钥可能已被破解,您也可以轮替密钥。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的服务账号页面。

    转到“服务账号”

  2. 如有必要,选择发现结果中指明的项目。

  3. 在服务账号列表中,找到 找到并点击 删除。在继续操作之前,请考虑删除服务账号可能对生产资源产生的影响。

  4. 创建新的服务账号密钥以替换旧服务账号密钥。如需了解详情,请参阅创建服务账号密钥

了解此发现结果类型支持的资产和扫描设置

Service account role separation

API 中的类别名称:SERVICE_ACCOUNT_ROLE_SEPARATION

此发现结果不适用于项目级激活。

您的组织中的一个或多个主账号分配有多项服务账号权限。任何账号都不应同时拥有 Service Account Admin 和其他服务账号权限。如需了解服务账号及其可用角色,请参阅服务账号

如需修复此发现结果,请完成以下步骤:

  1. 在 Google Cloud 控制台中,转到 IAM 页面。

    转到 IAM

  2. 对于发现结果中列出的每个主账号,执行以下操作:

    1. 查看继承列,检查角色是否继承自文件夹或组织资源。如果该列包含父资源的链接,请点击链接以转到父资源的 IAM 页面。
    2. 点击主账号旁边的 修改
    3. 要移除权限,请点击旁边的 删除 Service Account Admin。如果您要移除所有服务账号 请点击所有其他权限旁边的删除
  3. 点击保存

了解此发现结果类型支持的资产和扫描设置

Shielded VM disabled

API 中的类别名称:SHIELDED_VM_DISABLED

此 Compute Engine 实例上停用了安全强化型虚拟机。

安全强化型虚拟机是一种经过安全控制措施强化的 Google Cloud 虚拟机,可更好地抵御 rootkit 和 bootkit 攻击。安全强化型虚拟机有助于确保对启动加载程序和固件进行签名和验证。详细了解安全强化型虚拟机

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的虚拟机实例页面。

    转到虚拟机实例

  2. 选择与 Security Health Analytics 发现结果相关的实例。

  3. 在加载的实例详情页面上,点击 停止

  4. 实例停止后,点击 修改

  5. 安全强化型虚拟机部分,切换开启 vTPM开启完整性监控,以启用安全强化型虚拟机。

  6. 或者,如果您不使用任何自定义或未签名的驱动程序,则还启用安全启动

  7. 点击保存。新配置会显示在实例详情页面上。

  8. 点击 Start(启动)以启动实例。

了解此发现结果类型的 支持的资源和扫描设置

SQL CMEK disabled

API 中的类别名称:SQL_CMEK_DISABLED

SQL 数据库实例未使用客户管理的加密密钥 (CMEK)。

借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。如需了解详情,请参阅您产品的 CMEK 概览:Cloud SQL for MySQLCloud SQL for PostgreSQLCloud SQL for SQL Server。CMEK 会产生与 Cloud KMS 相关的额外费用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 删除

  4. 如需创建启用 CMEK 的新实例,请按照相应说明为产品配置 CMEK:

    1. Cloud SQL for MySQL
    2. Cloud SQL for PostgreSQL
    3. Cloud SQL for SQL Server

了解此发现结果类型的 支持的资源和扫描设置

SQL contained database authentication

API 中的类别名称:SQL_CONTAINED_DATABASE_AUTHENTICATION

Cloud SQL for SQL Server 数据库实例没有将包含的数据库身份验证数据库标志设置为关闭

包含的数据库身份验证标志用于控制是否可以创建包含的数据库或将包含的数据库关联到数据库引擎。包含的数据库包含定义数据库所需的所有数据库设置和元数据,并且对安装数据库的数据库引擎实例没有配置依赖项。

不建议启用此标志,原因如下:

  • 用户可以在数据库引擎级别连接到数据库,而无需身份验证。
  • 通过将数据库与数据库引擎隔离,您可以将数据库移至其他 SQL Server 实例。

包含的数据库面临独特的威胁,SQL Server 数据库引擎管理员应该了解并缓解此类威胁。大多数威胁都源于 USER WITH PASSWORD 身份验证流程,这会将身份验证边界从数据库引擎级别移至数据库级别。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将包含的数据库身份验证数据库标志的值设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL cross DB ownership chaining

API 中的类别名称:SQL_CROSS_DB_OWNERSHIP_CHAINING

Cloud SQL for SQL Server 数据库实例没有将 cross db ownership chainin 数据库标志设置为关闭

cross db ownership chaining 标志使您能够在数据库级控制跨数据库所有权链,也能够对所有数据库语句允许跨数据库所有权链。

除非 SQL Server 实例托管的所有数据库都参与跨数据库所有权链,并且您了解此设置的安全影响,否则建议不要启用此标志。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 cross db ownership chaining 数据库标志的值设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL external scripts enabled

API 中的类别名称:SQL_EXTERNAL_SCRIPTS_ENABLED

Cloud SQL for SQL Server 数据库实例未将 external scripts enabled 数据库标志设置为关闭

启用此设置后,您将能够通过特定的远程语言扩展程序执行脚本。由于此功能会对系统的安全性产生负面影响,因此建议将其停用。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分中,将 external scripts enabled 数据库标志的值设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL instance not monitored

API 中的类别名称:SQL_INSTANCE_NOT_MONITORED

此发现结果不适用于项目级激活。

日志指标和提醒未配置为监控 Cloud SQL实例配置更改。

SQL 实例选项配置错误可能会导致安全风险。停用自动备份和高可用性选项可能会影响业务连续性,不限制授权网络可能会增加遭到不受信任网络侵扰的风险。监控 SQL 实例配置的更改可帮助缩短检测和纠正配置错误的时间。

如需了解详情,请参阅基于日志的指标概览

如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

创建指标

  1. 进入 Google Cloud 控制台中的基于日志的指标页面。

    转到“基于日志的指标”

  2. 点击创建指标

  3. 指标类型下,选择计数器

  4. 详情下:

    1. 设置日志指标名称
    2. 添加说明
    3. 单位设为 1
  5. 过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:

      protoPayload.methodName="cloudsql.instances.update"
      OR protoPayload.methodName="cloudsql.instances.create"
      OR protoPayload.methodName="cloudsql.instances.delete"

  6. 点击创建指标。您将看到确认。

创建提醒政策

  1. 在 Google Cloud 控制台中,转到基于日志的指标页面:

    前往基于日志的指标

    如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。

  2. 用户定义的指标部分下,选择您在上一部分中创建的指标。
  3. 点击更多 ,然后点击根据指标创建提醒

    系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。

  4. 点击下一步
    1. 查看预先填充的设置。您可能需要修改阈值
    2. 点击条件名称,然后输入条件的名称。
  5. 点击下一步
  6. 如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定

    如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。

  7. 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
  8. 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
  9. 点击提醒名称,然后输入提醒政策的名称。
  10. 点击创建政策

了解此发现结果类型的 支持的资源和扫描设置

SQL local infile

API 中的类别名称:SQL_LOCAL_INFILE

Cloud SQL for MySQL 数据库实例没有将 local_infile 数据库标志设置为关闭。由于存在与 local_infile 标志相关的安全问题,因此应停用该标志。如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 local_infile 数据库标志的值设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log checkpoints disabled

API 中的类别名称:SQL_LOG_CHECKPOINTS_DISABLED

Cloud SQL for PostgreSQL 数据库实例没有将 log_checkpoints 数据库标志设置为开启

启用 log_checkpoints 会在服务器日志中记录检查点和重启点。某些统计信息包含在日志消息中,包括写入的缓冲区数量和写入缓冲区所用的时间。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_checkpoints 数据库标志的值设置为开启

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log connections disabled

API 中的类别名称:SQL_LOG_CONNECTIONS_DISABLED

Cloud SQL for PostgreSQL 数据库实例没有将 log_connections 数据库标志设置为开启

启用 log_connections 设置会记录尝试与服务器的连接,并且成功完成客户端身份验证。这些日志在排查问题以及确认尝试与服务器的异常连接方面非常有用。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_connections 数据库标志的值设置为开启

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL log disconnections disabled

API 中的类别名称:SQL_LOG_DISCONNECTIONS_DISABLED

Cloud SQL for PostgreSQL 数据库实例没有将 log_disconnections 数据库标志设置为开启

启用 log_disconnections 设置后,系统会在每个会话结束时创建日志条目。这些日志可用于排查问题,并确认一段时间内的异常活动。如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_disconnections 数据库标志的值设置为开启

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL log duration disabled

API 中的类别名称:SQL_LOG_DURATION_DISABLED

Cloud SQL for PostgreSQL 数据库实例未将 log_duration 数据库标志设置为开启

启用 log_duration 后,系统会记录每个已完成的语句的执行时间和时长。如需找出速度较慢的查询并排查数据库问题,对执行查询所花费的时间进行监控至关重要。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_duration 数据库标志设置为开启

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL log error verbosity

API 中的类别名称:SQL_LOG_ERROR_VERBOSITY

Cloud SQL for PostgreSQL 数据库实例未将 log_error_verbosity 数据库标志设置为 defaultverbose

log_error_verbosity 标志用于控制记录的消息的详细程度。 详细程度越高,记录的消息就越详细。 建议将此标志设置为 defaultverbose

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分中,将 log_error_verbosity 数据库标志设置为 defaultverbose

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log lock waits disabled

API 中的类别名称:SQL_LOG_LOCK_WAITS_DISABLED

Cloud SQL for PostgreSQL 数据库实例没有将 log_lock_waits 数据库标志设置为开启

启用 log_lock_waits 设置后,如果会话获取锁的等待时间超过 deadlock_timeout 中的设置,系统就会创建日志条目。日志可用于确定锁等待时间是否会导致性能不佳。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_lock_waits 数据库标志的值设置为开启

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log min duration statement enabled

API 中的类别名称:SQL_LOG_MIN_DURATION_STATEMENT_ENABLED

Cloud SQL for PostgreSQL 数据库实例没有将 log_min_duration_statement 数据库标志设置为 -1

log_min_duration_statement 标志会导致系统记录运行时间超过指定时间的 SQL 语句。请考虑停用此设置,因为 SQL 语句可能包含不应记录的敏感信息。如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_min_duration_statement 数据库标志的值设置为 -1

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log min error statement

API 中的类别名称:SQL_LOG_MIN_ERROR_STATEMENT

Cloud SQL for PostgreSQL 数据库实例未正确设置 log_min_error_statement 数据库标志。

log_min_error_statement 标志用于控制是否在服务器日志中记录会导致错误状况的 SQL 语句。系统会记录具有指定严重级别或更高严重级别的 SQL 语句以及针对错误语句返回的消息。严重级别越高,记录的消息数量就越少。

如果 log_min_error_statement 未设置为正确的值,系统可能不会将相应消息归类为错误消息。如果将严重级别设置得过低,会导致消息数量增加,并让人难以找到实际错误。如果将严重级别设置得过高,可能会导致实际错误的相关消息得不到记录。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,根据组织的日志记录政策,将 log_min_error_statement 数据库标志的值设置为下列建议值之一。

    • debug5
    • debug4
    • debug3
    • debug2
    • debug1
    • info
    • notice
    • warning
    • error
  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL log min error statement severity

API 中的类别名称:SQL_LOG_MIN_ERROR_STATEMENT_SEVERITY

Cloud SQL for PostgreSQL 数据库实例未正确设置 log_min_error_statement 数据库标志。

log_min_error_statement 标志用于控制是否在服务器日志中记录会导致错误状况的 SQL 语句。系统会记录具有指定严重级别或更严格级别的 SQL 语句以及针对错误语句返回的消息。严重级别越严格,记录的消息数量就越少。

如果 log_min_error_statement 未设置为正确的值,系统可能不会将相应消息归类为错误消息。如果将严重级别设置得过低,会导致消息数量增加,使人难以找到实际错误。如果将严重级别设置得过高(过于严格),可能会导致系统无法记录实际错误的相关消息。

建议将此标志设置为 error 或更严格的值。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分中,根据组织的日志记录政策,将 log_min_error_statement 数据库标志的值设置为下列建议值之一。

    • error
    • log
    • fatal
    • panic
  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log min messages

API 中的类别名称:SQL_LOG_MIN_MESSAGES

Cloud SQL for PostgreSQL 数据库实例未将 log_min_messages 数据库标志至少设置为 warning

log_min_messages 标志用于控制哪些消息级别记录在服务器日志中。严重级别越高,记录的消息数量就越少。如果阈值设置得过低,可能会导致日志存储大小和长度增加,从而难以找到实际错误。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,根据组织的日志记录政策,将 log_min_messages 数据库标志的值设置为下列建议值之一。

    • debug5
    • debug4
    • debug3
    • debug2
    • debug1
    • info
    • notice
    • warning
  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log executor stats enabled

API 中的类别名称:SQL_LOG_EXECUTOR_STATS_ENABLED

Cloud SQL for PostgreSQL 数据库实例未将 log_executor_stats 数据库标志设置为关闭

log_executor_stats 标志激活后,执行器性能 PostgreSQL 日志中包含每个查询的统计信息。此设置对于问题排查非常有用,但可能会大大增加日志数量和性能开销。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_executor_stats 数据库标志设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log hostname enabled

API 中的类别名称:“SQL_LOG_HOSTNAME_ENABLED”

Cloud SQL for PostgreSQL 数据库实例未将 log_hostname 数据库标志设置为关闭

启用 log_hostname 标志后,系统会记录连接主机的主机名。默认情况下,连接日志消息仅显示 IP 地址。此设置对于问题排查很有用。但是,它可能会给服务器性能带来开销,因为对于记录的每个语句,DNS 解析都需要将 IP 地址转换为主机名。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_hostname 数据库标志设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log parser stats enabled

API 中的类别名称:SQL_LOG_PARSER_STATS_ENABLED

Cloud SQL for PostgreSQL 数据库实例未将 log_parser_stats 数据库标志设置为关闭

启用 log_parser_stats 标志后,解析器性能统计信息会添加到每个查询的 PostgreSQL 日志中。这对于问题排查非常有用,但可能会大大增加日志数量和性能开销。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_parser_stats 数据库标志设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL log planner stats enabled

API 中的类别名称:SQL_LOG_PLANNER_STATS_ENABLED

Cloud SQL for PostgreSQL 数据库实例未将 log_planner_stats 数据库标志设置为关闭

启用 log_planner_stats 标志后,系统会使用一个粗略的性能分析方法来记录 PostgreSQL 规划工具性能统计信息。这对于问题排查非常有用,但可能会大大增加日志数量和性能开销。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_planner_stats 数据库标志设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL log statement

API 中的类别名称:SQL_LOG_STATEMENT

Cloud SQL for PostgreSQL 数据库实例未将 log_statement 数据库标志设置为 ddl

此标志的值用于控制要记录哪些 SQL 语句。借助日志记录,您可以排查操作问题,并执行取证分析。如果此标志设置为不正确的值,相关信息可能会被跳过,或者隐藏在太多消息中。除非组织的日志记录政策另有指示,否则建议使用值 ddl(所有数据定义语句)。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_statement 数据库标志设置为 ddl

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL log statement stats enabled

API 中的类别名称:SQL_LOG_STATEMENT_STATS_ENABLED

Cloud SQL for PostgreSQL 数据库实例未将 log_statement_stats 数据库标志设置为关闭

启用 log_statement_stats 标志后,端到端性能统计信息会添加到每个查询的 PostgreSQL 日志中。此设置对于问题排查非常有用,但可能会大大增加日志数量和性能开销。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_statement_stats 数据库标志设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL log temp files

API 中的类别名称:SQL_LOG_TEMP_FILES

Cloud SQL for PostgreSQL 数据库实例没有将 log_temp_files 数据库标志设置为 0

您可以针对排序、哈希和临时查询结果创建临时文件。 将 log_temp_files 标志设置为 0 即可记录所有临时文件信息。记录所有临时文件有助于识别潜在的性能问题。如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分下,将 log_temp_files 数据库标志的值设为 0

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL no root password

API 中的类别名称:SQL_NO_ROOT_PASSWORD

MySQL 数据库实例没有为根账号设置密码。您应该为 MySQL 数据库实例添加密码。如需了解详情,请参阅 MySQL 用户

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 在加载的实例详情页面上,选择用户标签页。

  4. 点击 root 用户旁边的更多 ,然后选择更改密码

  5. 输入安全系数高的新密码,然后点击确定

了解此发现结果类型支持的资产和扫描设置

SQL public IP

API 中的类别名称:SQL_PUBLIC_IP

Cloud SQL 数据库具有公共 IP 地址。

为了减小组织的受攻击面,Cloud SQL 数据库不应具有公共 IP。专用 IP 地址可为您的应用提高网络安全性并缩短延迟时间。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 在左侧菜单中,点击连接

  4. 点击网络标签页,然后取消选中公共 IP 复选框。

  5. 如果实例尚未配置为使用专用 IP,请参阅为现有实例配置专用 IP

  6. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

SQL remote access enabled

API 中的类别名称:SQL_REMOTE_ACCESS_ENABLED

Cloud SQL for SQL Server 数据库实例未将远程访问数据库标志设置为关闭

激活后,此设置会授予从远程服务器运行本地存储过程或从本地服务器运行远程存储过程的权限。攻击者可能会滥用此功能,将查询处理任务分流到目标,从而针对远程服务器发起拒绝服务攻击 (DoS)。为了防止滥用,我们建议停用此设置。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 标志部分,将远程访问设置为关闭

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL skip show database disabled

API 中的类别名称:SQL_SKIP_SHOW_DATABASE_DISABLED

Cloud SQL for MySQL 数据库实例未将 skip_ show_database 数据库标志设置为开启

开启后,如果用户没有 SHOW DATABASES 权限,此标志会阻止用户使用 SHOW DATABASES 语句。通过此设置,未经明确许可,用户将无法看到属于其他用户的数据库。我们建议启用此标志。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 标志部分中,将 skip_show_database 设置为开启

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL trace flag 3625

API 中的类别名称:SQL_TRACE_FLAG_3625

Cloud SQL for SQL Server 数据库实例未将 3625(跟踪记录标志)数据库标志设置为开启

此标志通过使用星号 (******) 遮盖某些错误消息的参数,限制向未获得系统管理员固定服务器角色的用户返回的信息量。为防止敏感信息泄露,建议您启用该标志。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分中,将 3625 设置为开启

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL user connections configured

API 中的类别名称:SQL_USER_CONNECTIONS_CONFIGURED

Cloud SQL for SQL Server 数据库实例配置了用户连接数据库标志。

用户连接选项指定 SQL Server 实例上允许的并发用户连接数上限。由于它是一个动态(自行配置)选项,因此 SQL Server 会根据需要自动调整用户连接数上限,直至达到允许的最大值。默认值为 0,表示最多允许 32767 个用户连接。因此,建议不要配置用户连接数据库标志。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分中,点击用户连接旁边的 删除

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型的 支持的资源和扫描设置

SQL user options configured

API 中的类别名称:SQL_USER_OPTIONS_CONFIGURED

Cloud SQL for SQL Server 数据库实例配置了用户选项数据库标志。

这项设置会覆盖所有用户的 SET 选项的全局默认值。由于用户和应用可能会假设系统使用的是默认数据库 SET 选项,因此设置用户选项可能会造成意外结果。因此,建议不要配置用户选项数据库标志。

如需了解详情,请参阅配置数据库标志

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 点击 修改

  4. 数据库标志部分中,点击用户选项旁边的 删除

  5. 点击保存。新配置会显示在实例概览页面上。

了解此发现结果类型支持的资产和扫描设置

SQL weak root password

API 中的类别名称:SQL_WEAK_ROOT_PASSWORD

MySQL 数据库实例为根账号设置了安全系数低的密码。应为实例设置安全系数高的密码。如需了解详情,请参阅 MySQL 用户

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 在加载的实例详情页面上,选择用户标签页。

  4. 点击 root 用户旁边的更多 ,然后选择更改密码

  5. 输入安全系数高的新密码,然后点击确定

了解此发现结果类型支持的资产和扫描设置

SSL not enforced

API 中的类别名称:SSL_NOT_ENFORCED

Cloud SQL 数据库实例不要求所有传入连接使用 SSL。

为避免在未加密通信中泄露所传输的敏感数据,连至您的 SQL 数据库实例的所有传入连接都应使用 SSL。详细了解如何 配置 SSL/TLS

要修复此发现结果,请仅允许 SSL 连接您的 SQL 实例:

  1. 转到 Google Cloud 控制台中的 Cloud SQL 实例页面。

    转到“Cloud SQL 实例”

  2. 选择 Security Health Analytics 发现结果中列出的实例。

  3. 连接标签页上,点击只允许 SSL 连接需要受信任的客户端证书。如需了解详情,请参阅强制执行 SSL/TLS 加密

  4. 如果您选择需要受信任的客户端证书,请创建一个新客户端 证书。如需了解详情,请参阅创建新的客户端证书

了解此发现结果类型的 支持的资源和扫描设置

Too many KMS users

API 中的类别名称:TOO_MANY_KMS_USERS

将可使用加密密钥的主用户的数量限制为三个。以下预定义角色可以授予使用加密密钥对数据进行加密、解密或签名所需的权限:

  • roles/owner
  • roles/cloudkms.cryptoKeyEncrypterDecrypter
  • roles/cloudkms.cryptoKeyEncrypter
  • roles/cloudkms.cryptoKeyDecrypter
  • roles/cloudkms.signer
  • roles/cloudkms.signerVerifier

如需了解详情,请参阅权限和角色

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的 Cloud KMS 密钥页面。

    转到 Cloud KMS 密钥

  2. 点击发现结果中指明的密钥环的名称。

  3. 点击发现结果中指明的密钥的名称。

  4. 选中主要版本旁边的复选框,然后点击显示信息面板

  5. 将有权对数据进行加密、解密或签名的主用户的数量减少到三个或更少。如需撤消权限,请点击每个主账号旁边的 Delete(删除)。

了解此发现结果类型支持的资产和扫描设置

Unconfirmed AppArmor profile

API 中的类别名称:GKE_APP_ARMOR

容器可以明确配置为不受 AppArmor 限制。这会确保没有任何 AppArmor 配置文件应用于该容器,从而让该容器不受其限制。停用这项预防性安全控件会增加 以及容器逃逸的风险

如需修复此发现结果,请对受影响的工作负载执行以下步骤:

  1. 打开每个受影响工作负载的清单。
  2. 将以下受限字段设置为任一允许的值。

受限字段

  • metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"]

允许使用的值

  • false

User managed service account key

API 中的类别名称:USER_MANAGED_SERVICE_ACCOUNT_KEY

用户管理服务账号密钥。 如果服务账号密钥未正确管理,则会带来安全风险。您应该尽可能选择更安全的服务账号密钥替代方案。如果必须使用服务账号密钥进行身份验证,您将负责私钥的安全性以及管理服务账号密钥的最佳实践中所述的其他操作。如果系统阻止您创建服务账号密钥,您的组织可能会停用服务账号密钥创建功能。如需了解详情,请参阅管理默认安全的组织资源

如需修复此发现结果,请完成以下步骤:

  1. 转到 Google Cloud 控制台中的服务账号页面。

    转到“服务账号”

  2. 如有必要,选择发现结果中指明的项目。

  3. 删除发现结果中指明的用户管理的服务账号密钥(如果它们未被任何应用使用)。

了解此发现结果类型支持的资产和扫描设置

Weak SSL policy

API 中的类别名称:WEAK_SSL_POLICY

Compute Engine 实例具有弱 SSL 政策,或者使用 TLS 版本低于 1.2 的 Google Cloud 默认 SSL 政策。

HTTPS 和 SSL 代理负载均衡器使用 SSL 政策来确定在用户和互联网之间建立的 TLS 连接中使用的协议和加密套件。这些连接会对敏感数据进行加密,以防止恶意窃听者访问敏感数据。弱 SSL 政策允许使用过时 TLS 版本的客户端通过安全性较低的加密套件或协议进行连接。如需查看推荐的和过时的加密套件列表,请访问 iana.org TLS 参数页面

对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

针对此发现结果的修复步骤会有所不同,具体取决于此发现结果是由使用默认 Google Cloud SSL 政策触发的,还是由允许使用弱加密套件或低于 1.2 的最低 TLS 版本的 SSL 政策触发的。请按照与相应问题触发器对应的以下步骤操作。

默认 Google Cloud SSL 政策修复

  1. 转到 Google Cloud 控制台中的目标代理页面。

    转到“目标代理”

  2. 找到发现结果中指明的目标代理并记下使用者列中的转发规则。

  3. 如需创建新的 SSL 政策,请参阅使用 SSL 政策。政策的最低 TLS 版本应为 1.2,并且应使用新型或受限配置文件

  4. 如需使用自定义配置文件,请确保停用以下加密套件:

    • TLS_RSA_WITH_AES_128_GCM_SHA256
    • TLS_RSA_WITH_AES_256_GCM_SHA384
    • TLS_RSA_WITH_AES_128_CBC_SHA
    • TLS_RSA_WITH_AES_256_CBC_SHA
    • TLS_RSA_WITH_3DES_EDE_CBC_SHA
  5. 将 SSL 政策应用于您之前记下的每个转发规则。

弱加密套件或较低级别的 TLS 版本允许修复

  1. 在 Google Cloud 控制台中,进入 SSL 政策页面。

    转到“SSL 政策”页面

  2. 找到使用者列中指明的负载均衡器。

  3. 点击政策名称下方。

  4. 点击 修改

  5. 更改 将最低 TLS 版本更新为 TLS 1.2,并将配置文件更新为 Modern 或 Restricted。

  6. 如需使用自定义配置文件,请确保停用以下加密套件:

    • TLS_RSA_WITH_AES_128_GCM_SHA256
    • TLS_RSA_WITH_AES_256_GCM_SHA384
    • TLS_RSA_WITH_AES_128_CBC_SHA
    • TLS_RSA_WITH_AES_256_CBC_SHA
    • TLS_RSA_WITH_3DES_EDE_CBC_SHA
  7. 点击保存

了解此发现结果类型支持的资产和扫描设置

Web UI enabled

API 中的类别名称:WEB_UI_ENABLED

GKE 网页界面(信息中心)已启用。

高度特权的 Kubernetes 服务账号支持 Kubernetes 网页界面。如果泄露,则该服务账号可能会被滥用。如果您已经在使用 Google Cloud 控制台,则 Kubernetes 网页界面会不必要地扩展您的攻击面。了解如何停用 Kubernetes 网页界面

要修复此发现结果,请停用 Kubernetes 网页界面:

  1. 转到 Google Cloud 控制台中的 Kubernetes 集群页面。

    转到 Kubernetes 集群

  2. 点击 Security Health Analytics 发现结果中列出的集群的名称。

  3. 点击 修改

    如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。

  4. 点击插件。此部分将展开,显示可用的插件。

  5. Kubernetes 信息中心下拉列表中,请选择停用

  6. 点击保存

了解此发现结果类型的 支持的资源和扫描设置

Workload Identity disabled

API 中的类别名称:WORKLOAD_IDENTITY_DISABLED

在 GKE 集群上停用了 Workload Identity。

由于 Workload Identity 具有增强的安全属性和可管理性,因此它是在 GKE 中访问 Google Cloud 服务的推荐方法。启用 Workload Identity 可保护一些潜在的敏感系统元数据,确保集群上运行的用户工作负载无法对其进行不当访问。了解元数据隐藏

要修复此发现结果,请按照在集群上启用 Workload Identity 指南操作。

了解此发现结果类型的 支持的资源和扫描设置

修复 AWS 配置错误

AWS Cloud Shell Full Access Restricted

API 中的类别名称:ACCESS_AWSCLOUDSHELLFULLACCESS_RESTRICTED

AWS CloudShell 是对 AWS 服务运行 CLI 命令的便捷方式;代管式 IAM 政策(“AWSCloudShellFullAccess”)提供对 CloudShell 的完整访问权限,这使得在用户的本地系统和 CloudShell 环境之间提供文件上传和下载功能。在 CloudShell 环境中,用户拥有 sudo 权限,并可以访问互联网。因此,您可以安装文件传输软件(例如),并将数据从 CloudShell 迁移到外部互联网服务器。

建议:确保限制对 AWSCloudShellFullAccess 的访问

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
  2. 在左侧窗格中,选择“政策”
  3. 搜索并选择 AWSCloudShellFullAccess
  4. 在“关联的实体”标签页中,选中每项对应的复选框,然后选择“分离”

了解此发现结果类型支持的资产和扫描设置

Access Keys Rotated Every 90 Days or Less

API 中的类别名称:ACCESS_KEYS_ROTATED_90_DAYS_LESS

访问密钥由访问密钥 ID 和私有访问密钥组成,用于对您发往 AWS 的程序化请求进行签名。AWS 用户需要使用自己的访问密钥,才能通过 AWS 命令行界面 (AWS CLI)、适用于 Windows PowerShell 的工具、AWS SDK 或使用各个 AWS 服务的 API 进行直接 HTTP 调用,以程序化方式调用 AWS。建议定期轮替所有访问密钥。

建议:确保访问密钥每 90 天(或更短周期)轮替一次

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 转到管理控制台 (https://console.aws.amazon.com/iam)
  2. 点击“Users
  3. 点击 Security Credentials
  4. 作为管理员
    - 针对 90 天内未轮替的密钥点击“Make Inactive
  5. 作为 IAM 用户
    - 对于 90 天内未轮替或使用的密钥,点击 Make InactiveDelete
  6. 点击“Create Access Key
  7. 使用新的访问密钥凭据更新程序化调用

AWS CLI

  1. 在第一个访问密钥仍处于有效状态时,创建第二个访问密钥,该密钥默认处于有效状态。运行以下命令:
aws iam create-access-key

此时,用户有两个有效的访问密钥。

  1. 更新所有应用和工具以使用新访问密钥。
  2. 使用以下命令确定第一个访问密钥是否仍在使用:
aws iam get-access-key-last-used
  1. 一种方法是等待几天,然后检查旧的访问密钥是否有任何用途,然后再继续操作。

即使第 3 步指示未使用旧密钥,我们也建议您不要立即删除第一个访问密钥。请改用以下命令将第一个访问密钥的状态更改为“Inactive”(无效):

aws iam update-access-key
  1. 请仅使用新的访问密钥来确认您的应用是否正常运行。仍在使用原始访问密钥的任何应用和工具都将此时停止运行,因为它们无法再访问 AWS 资源。如果您发现此类应用或工具,可以将其状态切换回“有效”,以便重新启用第一个访问密钥。然后,返回第 2 步,并更新此应用以使用新密钥。

  2. 等待一段时间以确保所有应用和工具都已更新后,您可以使用以下命令删除第一个访问密钥:

aws iam delete-access-key

了解此发现结果类型的 支持的资源和扫描设置

All Expired Ssl Tls Certificates Stored Aws Iam Removed

API 中的类别名称:ALL_EXPIRED_SSL_TLS_CERTIFICATES_STORED_AWS_IAM_REMOVED

如需启用到 AWS 中网站或应用的 HTTPS 连接,您需要 SSL/TLS 服务器证书。您可以使用 ACM 或 IAM 来存储和部署服务器证书。
仅当您必须在 ACM 不支持的区域支持 HTTPS 连接时,才应将 IAM 用作证书管理器。IAM 会安全地对您的私钥进行加密,并将加密版本存储在 IAM SSL 证书存储区中。IAM 支持在所有区域部署服务器证书,但您必须从外部提供方获取证书才能在 AWS 中使用。您无法将 ACM 证书上传到 IAM。此外,您无法通过 IAM 控制台管理证书。

建议:确保移除 AWS IAM 中存储的所有过期的 SSL/TLS 证书

如需修复此发现结果,请完成以下步骤:

AWS 控制台

目前不支持通过 AWS 管理控制台移除过期的证书。如需通过 AWS API 删除存储在 IAM 中的 SSL/TLS 证书,请使用命令行界面 (CLI)。

AWS CLI

如需删除已过期的证书,请将 CERTIFICATE_NAME 替换为要删除的证书的名称,运行以下命令:

aws iam delete-server-certificate --server-certificate-name <CERTIFICATE_NAME>

上述命令成功执行后,不会返回任何输出。

了解此发现结果类型的 支持的资源和扫描设置

Autoscaling Group Elb Healthcheck Required

API 中的类别名称:AUTOSCALING_GROUP_ELB_HEALTHCHECK_REQUIRED

此报告会检查与负载均衡器关联的自动扩缩组是否使用 Elastic Load Balancing 健康检查。

这可确保该组可以根据负载均衡器提供的额外测试来确定实例的健康状况。使用弹性负载均衡器健康检查有助于支持使用 EC2 自动扩缩组的应用的可用性。

建议:检查与负载均衡器相关的所有自动扩缩组是否使用健康检查

如需修复此发现结果,请完成以下步骤:

AWS 控制台

启用 Elastic Load Balancing 健康检查

  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台。
  2. 在导航窗格的“自动扩缩”下,选择“自动扩缩组”。
  3. 选中您的组对应的复选框。
  4. 选择“修改”。
  5. 在“健康检查”下,选择“健康检查类型”为 ELB。
  6. 对于健康检查宽限期,请输入 300。
  7. 在页面底部,选择“更新”。

如需详细了解如何将负载均衡器与自动扩缩组搭配使用,请参阅 AWS 自动扩缩用户指南

了解此发现结果类型支持的资产和扫描设置

Auto Minor Version Upgrade Feature Enabled Rds Instances

API 中的类别名称:AUTO_MINOR_VERSION_UPGRADE_FEATURE_ENABLED_RDS_INSTANCES

确保 RDS 数据库实例已启用“自动次要版本升级”标志,以便在指定的维护时间段内自动接收次要引擎升级。因此,RDS 实例可以获取其数据库引擎的新功能、bug 修复和安全补丁。

建议:确保已针对 RDS 实例启用次要版本自动升级功能

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/rds/ 前往 RDS 信息中心。
  2. 在左侧导航面板中,点击 Databases
  3. 选择要更新的 RDS 实例。
  4. 点击右上角的 Modify 按钮。
  5. Modify DB Instance: <instance identifier> 页面的 Maintenance 部分中,选择 Auto minor version upgrade,然后点击 Yes 单选按钮。
  6. 点击页面底部的 Continue,选中“立即应用”以立即应用更改,或选择 Apply during the next scheduled maintenance window 以避免任何停机时间。
  7. 检查所做的更改,然后点击 Modify DB Instance。实例状态应从“可用”更改为“修改”,然后再更改为“可用”。启用该功能后,Auto Minor Version Upgrade 状态应会更改为 Yes

AWS CLI

  1. 运行 describe-db-instances 命令以列出所选 AWS 区域中可用的所有 RDS 数据库实例名称:
aws rds describe-db-instances --region <regionName> --query 'DBInstances[*].DBInstanceIdentifier'
  1. 命令输出应返回每个数据库实例标识符。
  2. 运行 modify-db-instance 命令以修改所选的 RDS 实例配置,此命令将立即应用更改,移除 --apply-immediately 以在下一个计划维护窗口内应用更改,并避免任何停机:
aws rds modify-db-instance --region <regionName> --db-instance-identifier <dbInstanceIdentifier> --auto-minor-version-upgrade --apply-immediately
  1. 命令输出应该会显示 RDS 实例的新配置元数据并检查 AutoMinorVersionUpgrade 参数值。
  2. 运行 describe-db-instances 命令,检查是否已成功启用次要版本自动升级功能:
aws rds describe-db-instances --region <regionName> --db-instance-identifier <dbInstanceIdentifier> --query 'DBInstances[*].AutoMinorVersionUpgrade'
  1. 命令输出应返回功能当前状态设为 true、功能为 enabled,并且次要引擎升级将应用于所选的 RDS 实例。

了解此发现结果类型支持的资产和扫描设置

Aws Config Enabled All Regions

API 中的类别名称:AWS_CONFIG_ENABLED_ALL_REGIONS

AWS Config 是一项 Web 服务,可对您账号中的受支持 AWS 资源执行配置管理,并向您传送日志文件。记录的信息包括配置项 (AWS 资源)、配置项 (AWS 资源) 之间的关系,以及资源之间的任何配置更改。建议在所有区域中启用 AWS Config。

建议:确保在所有区域中启用 AWS Config

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 在控制台右上角选择您要重点关注的区域
  2. 点击“服务”
  3. 点击“配置”
  4. 如果此区域中启用了 Config Recorder,您应该从左侧导航菜单导航到“Settings”页面。如果此区域中尚未启用 Config recorder,则应选择“Get Started”(开始)。
  5. 选择“记录此区域中支持的所有资源”
  6. 选择包含全球资源(IAM 资源)
  7. 指定同一账号或其他受管 AWS 账号中的 S3 存储桶
  8. 通过同一 AWS 账号或其他托管式 AWS 账号创建 SNS 主题

AWS CLI

  1. 根据 AWS Config Service 前提条件,确保具有适当的 S3 存储桶、SNS 主题和 IAM 角色。
  2. 运行以下命令以创建新的配置记录器:
aws configservice put-configuration-recorder --configuration-recorder name=default,roleARN=arn:aws:iam::012345678912:role/myConfigRole --recording-group allSupported=true,includeGlobalResourceTypes=true
  1. 在本地创建一个分发渠道配置文件,该文件会指定渠道属性(根据之前设置的前提条件进行填充):
{
 "name": "default",
 "s3BucketName": "my-config-bucket",
 "snsTopicARN": "arn:aws:sns:us-east-1:012345678912:my-config-notice",
 "configSnapshotDeliveryProperties": {
 "deliveryFrequency": "Twelve_Hours"
 }
}
  1. 运行以下命令,创建新的提交渠道,并引用在上一步中创建的 JSON 配置文件:
aws configservice put-delivery-channel --delivery-channel file://deliveryChannel.json
  1. 通过运行以下命令启动配置记录器:
aws configservice start-configuration-recorder --configuration-recorder-name default

了解此发现结果类型的 支持的资源和扫描设置

Aws Security Hub Enabled

API 中的类别名称:AWS_SECURITY_HUB_ENABLED

Security Hub 会收集来自各个 AWS 账号、服务和受支持的第三方合作伙伴产品的安全数据,并帮助您分析安全趋势并确定优先级最高的安全问题。启用 Security Hub 后,它将开始使用、汇总、整理已启用的 AWS 服务(例如 Amazon GuardDuty、Amazon Inspector 和 Amazon Macie)中的发现结果,并确定其优先级。您还可以启用与 AWS 合作伙伴安全产品的集成。

建议:确保已启用 AWS Security Hub

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 使用 IAM 身份的凭据登录安全中心控制台。
  2. 首次打开 Security Hub 控制台时,请选择“启用 AWS Security Hub”。
  3. 在欢迎页面上,“安全标准”列出了 Security Hub 支持的安全标准。
  4. 选择“启用安全中心”。

AWS CLI

  1. 运行 enable-security-hub 命令。如需启用默认标准,请添加 --enable-default-standards
aws securityhub enable-security-hub --enable-default-standards
  1. 如需在不使用默认标准的情况下启用安全中心,请添加 --no-enable-default-standards
aws securityhub enable-security-hub --no-enable-default-standards

了解此发现结果类型支持的资产和扫描设置

Cloudtrail Logs Encrypted Rest Using Kms Cmks

API 中的类别名称:CLOUDTRAIL_LOGS_ENCRYPTED_REST_USING_KMS_CMKS

AWS CloudTrail 是一项 Web 服务,用于记录账号的 AWS API 调用,并根据 IAM 政策将这些日志提供给用户和资源。AWS Key Management Service (KMS) 是一项托管服务,可帮助创建和控制用于加密账号数据的加密密钥,并使用硬件安全模块 (HSM) 来保护加密密钥的安全性。CloudTrail 日志可配置为利用服务器端加密 (SSE) 和 KMS 客户创建的主密钥 (CMK) 来进一步保护 CloudTrail 日志。建议将 CloudTrail 配置为使用 SSE-KMS。

建议:确保使用 KMS CMK 对 CloudTrail 日志进行静态加密

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台,然后打开 CloudTrail 控制台:https://console.aws.amazon.com/cloudtrail
  2. 在左侧导航窗格中,选择 Trails
  3. 点击路线
  4. S3 部分下,点击“修改”按钮(铅笔图标)
  5. 点击 Advanced
  6. KMS key Id 下拉菜单中选择一个现有 CMK
    - 注意:确保 CMK 位于与 S3 存储桶相同的区域
    - 注意:您需要对所选的 CMK 应用 KMS 密钥政策,以便 CloudTrail 作为服务使用所提供的 CMK 加密和解密日志文件。点击此处可查看修改所选 CMK 密钥政策的步骤
  7. 点击 Save
  8. 您将看到一条通知消息,指出您需要拥有指定 KMS 密钥的解密权限,才能解密日志文件。
  9. 点击 Yes

AWS CLI

aws cloudtrail update-trail --name <trail_name> --kms-id <cloudtrail_kms_key>
aws kms put-key-policy --key-id <cloudtrail_kms_key> --policy <cloudtrail_kms_key_policy>

了解此发现结果类型的 支持的资源和扫描设置

Cloudtrail Log File Validation Enabled

API 中的类别名称:CLOUDTRAIL_LOG_FILE_VALIDATION_ENABLED

CloudTrail 日志文件验证会创建一个经过数字签名的摘要文件,其中包含 CloudTrail 写入 S3 的每个日志的哈希值。这些摘要文件可用于确定日志文件在 CloudTrail 传送日志后是否发生了更改、是否已被删除,或者是否保持不变。建议对所有 CloudTrails 启用文件验证。

建议:确保已启用 CloudTrail 日志文件验证

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台并在 https://console.aws.amazon.com/cloudtrail 上打开 IAM 控制台
  2. 点击左侧导航窗格中的 Trails
  3. 点击目标步道
  4. General details 部分中,点击 edit
  5. Advanced settings 部分下
  6. 勾选 Log file validation 下的启用复选框
  7. 点击 Save changes

AWS CLI

aws cloudtrail update-trail --name <trail_name> --enable-log-file-validation

请注意,您可以通过运行以下命令,使用这些摘要定期验证日志:

aws cloudtrail validate-logs --trail-arn <trail_arn> --start-time <start_time> --end-time <end_time>

了解此发现结果类型支持的资产和扫描设置

Cloudtrail Trails Integrated Cloudwatch Logs

API 中的类别名称:CLOUDTRAIL_TRAILS_INTEGRATED_CLOUDWATCH_LOGS

AWS CloudTrail 是一项 Web 服务,用于记录在给定 AWS 账号中进行的 AWS API 调用。记录的信息包括 API 调用方的身份、API 调用的时间、API 调用方的来源 IP 地址、请求参数以及 AWS 服务返回的响应元素。CloudTrail 使用 Amazon S3 存储和传送日志文件,因此日志文件会永久存储。除了在指定的 S3 存储桶中捕获 CloudTrail 日志以进行长期分析之外,您还可以通过将 CloudTrail 配置为将日志发送到 CloudWatch 日志来执行实时分析。对于在账号的所有区域中启用的跟踪记录,CloudTrail 会将所有这些区域的日志文件发送到 CloudWatch Logs 日志组。建议将 CloudTrail 日志发送到 CloudWatch 日志。

注意:此建议旨在确保捕获、监控和适当提醒 AWS 账号活动。CloudWatch Logs 是使用 AWS 服务实现此目的的原生方式,但并不排除使用其他解决方案。

建议:确保 CloudTrail 跟踪记录与 CloudWatch Logs 集成

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 https://console.aws.amazon.com/cloudtrail/ 中的 CloudTrail 控制台
  2. 选择需要更新的 Trail
  3. 向下滚动至 CloudWatch Logs
  4. 点击 Edit
  5. CloudWatch Logs 下,点击方框 Enabled
  6. Log Group 下,选择“新建”或选择现有日志组
  7. 修改 Log group name 以匹配 CloudTrail 或选择现有的 CloudWatch Group。
  8. IAM Role 下,选择“新建”或选择现有项目。
  9. 修改 Role name 以匹配 CloudTrail,或选择现有 IAM 角色。
  10. 点击“保存更改”。

AWS CLI

aws cloudtrail update-trail --name <trail_name> --cloudwatch-logs-log-group-arn <cloudtrail_log_group_arn> --cloudwatch-logs-role-arn <cloudtrail_cloudwatchLogs_role_arn>

了解此发现结果类型的 支持的资源和扫描设置

Cloudwatch Alarm Action Check

API 中的类别名称:CLOUDWATCH_ALARM_ACTION_CHECK

这将检查 Amazon Cloudwatch 是否定义了当警报在“正常”“闹钟”状态之间转换时的操作和“INSUFFICIENT_DATA”。

在 Amazon CloudWatch 警报中为 ALARM 状态配置操作非常重要,这样才能在监控的指标超出阈值时触发即时响应。
它可确保快速解决问题、缩短停机时间,实现自动修复、维护系统运行状况并防止服务中断。

警报至少包含一项操作。
当闹钟转换为“INSUFFICIENT_DATA”时,闹钟至少有一项操作从任何其他状态区分开来
(可选)当警报从任何其他状态转换为“OK”状态时,警报至少具有一项操作。

建议:检查 CloudWatch 警报是否至少已启用一项警报操作、一项 INSUFFICIENT_DATA 操作或一项 OK 操作。

如需修复此发现结果,请完成以下步骤:

AWS 控制台

如需为您的 Amazon CloudWatch 闹钟配置闹钟操作,请执行以下操作。

  1. 打开 Amazon CloudWatch 控制台 (https://console.aws.amazon.com/cloudwatch/)。
  2. 在导航窗格中的“闹钟”下,选择“所有闹钟”。
  3. 选择您要修改的 Amazon CloudWatch 闹钟,然后选择“操作”然后选择“修改”
  4. 在左侧,选择“第 2 步 - 可选的配置操作”
  5. 对于“闹钟状态触发器”选择“在闹钟中”设置基于闹钟的操作的选项。
  6. 如需向新创建的 SNS 主题发送通知,请选择“创建新主题”。
  7. 在“创建新主题...”框中,指定一个唯一的 SNS 主题名称。
  8. 在“将接收通知的电子邮件端点…”框中,指定一个或多个电子邮件地址。
  9. 然后,选择“创建主题”以创建所需的 Amazon SNS 主题。
  10. 选择右下角的“下一步”和“下一步”然后选择“更新闹钟”以应用所做的更改。
  11. 打开电子邮件客户端,然后在 AWS Notifications 发送的电子邮件中,点击相应链接以确认您已订阅相关 SNS 主题。
  12. 重复第 4 步到第 11 步,并在第 5 步中为“闹钟状态触发器”选择“OK”和“数据不足”,以便为这两种状态设置操作。
  13. 对同一 AWS 区域内的所有其他 CloudWatch 警报重复此过程。
  14. 对所有其他 AWS 区域中的所有其他 CloudWatch 警报重复此过程。

了解此发现结果类型的 支持的资源和扫描设置

Cloudwatch Log Group Encrypted

API 中的类别名称:CLOUDWATCH_LOG_GROUP_ENCRYPTED

此检查可确保 CloudWatch 日志已配置 KMS。

日志组数据在 CloudWatch Logs 中始终会加密。默认情况下,CloudWatch 日志会对静态日志数据使用服务器端加密。或者,您也可以使用 AWS Key Management Service 进行此类加密。如果您选择启用,系统会使用 AWS KMS 密钥进行加密。通过将 KMS 密钥与日志组相关联,可在日志组级别启用使用 AWS KMS 进行加密的功能(在创建日志组时或创建日志组后启用)。

建议:检查是否使用 KMS 对 Amazon CloudWatch Logs 中的所有日志组进行了加密

如需了解详情,请参阅 Amazon CloudWatch 用户指南中的使用 AWS Key Management Service 加密 CloudWatch Logs 中的日志数据

了解此发现结果类型的 支持的资源和扫描设置

CloudTrail CloudWatch Logs Enabled

API 中的类别名称:CLOUD_TRAIL_CLOUD_WATCH_LOGS_ENABLED

此控件会检查 CloudTrail 跟踪记录是否配置为向 CloudWatch Logs 发送日志。如果跟踪记录的 CloudWatchLogsLogGroupArn 属性为空,该控件就会失败。

CloudTrail 会记录在给定账号中进行的 AWS API 调用。记录的信息包括:

  • API 调用方的身份
  • API 调用的时间
  • API 调用方的来源 IP 地址
  • 请求参数
  • AWS 服务返回的响应元素

CloudTrail 使用 Amazon S3 来存储和传送日志文件。您可以在指定的 S3 存储桶中捕获 CloudTrail 日志以进行长期分析。如需执行实时分析,您可以将 CloudTrail 配置为将日志发送到 CloudWatch 日志。

对于在账号的所有区域中启用的跟踪记录,CloudTrail 会将来自所有这些区域的日志文件发送到 CloudWatch Logs 日志组。

安全中心建议您将 CloudTrail 日志发送到 CloudWatch Logs。请注意,此建议旨在确保捕获、监测并适当提醒账号活动。您可以使用 CloudWatch Logs 对您的 AWS 服务进行这项设置。此建议并不排除使用其他解决方案。

将 CloudTrail 日志发送到 CloudWatch Logs 有助于根据用户、API、资源和 IP 地址记录实时和历史活动。您可以采用此方法,针对异常或敏感的账号活动设置警报和通知。

建议:检查是否已将所有 CloudTrail 跟踪记录配置为向 AWS CloudWatch 发送日志

如需将 CloudTrail 与 CloudWatch 日志集成,请参阅 AWS CloudTrail 用户指南中的将事件发送到 CloudWatch 日志

了解此发现结果类型支持的资产和扫描设置

No AWS Credentials in CodeBuild Project Environment Variables

API 中的类别名称:CODEBUILD_PROJECT_ENVVAR_AWSCRED_CHECK

此命令会检查项目是否包含环境变量 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY

身份验证凭据 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 绝不应以明文形式存储,因为这可能会导致意外的数据泄露和未经授权的访问。

建议:确保所有项目中的环境变量 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY 都未采用明文格式

如需从 CodeBuild 项目中移除环境变量,请参阅 AWS CodeBuild 用户指南中的在 AWS CodeBuild 中更改构建项目的设置。确保没有为环境变量选择任何内容。

您可以将具有敏感值的环境变量存储在 AWS Systems Manager 参数存储区或 AWS Secrets Manager 中,然后从构建规范中检索它们。有关说明,请参阅 AWS CodeBuild 用户指南中“环境”部分中的重要事项框。

了解此发现结果类型的 支持的资源和扫描设置

Codebuild Project Source Repo Url Check

API 中的类别名称:CODEBUILD_PROJECT_SOURCE_REPO_URL_CHECK

此命令会检查 AWS CodeBuild 项目的 Bitbucket 源代码库网址是否包含个人访问令牌或用户名和密码。如果 Bitbucket 源代码库网址包含个人访问令牌或用户名和密码,则控件将失败。

登录凭据不应以明文形式存储或传输,也不得显示在源代码库网址中。您应在 CodeBuild 中访问源代码提供方,而不是使用个人访问令牌或登录凭据,并将源代码库网址更改为仅包含 Bitbucket 代码库位置的路径。使用个人访问令牌或登录凭据可能会导致意外的数据泄露或未经授权的访问。

建议:检查使用 GitHub 或 Bitbucket 作为源代码库的所有项目是否都使用了 OAuth

您可以更新 CodeBuild 项目以使用 OAuth。

从 CodeBuild 项目源代码中移除基本身份验证 / (GitHub) 个人访问令牌

  1. 通过 https://console.aws.amazon.com/codebuild/ 打开 CodeBuild 控制台。
  2. 选择包含个人访问令牌或用户名和密码的 build 项目。
  3. 在“修改”中,选择“来源”。
  4. 选择“解除与 GitHub/Bitbucket 的关联”。
  5. 选择“使用 OAuth 连接”,然后选择“连接到 GitHub/Bitbucket”。
  6. 当系统提示时,根据需要选择授权。
  7. 根据需要重新配置代码库网址和其他配置设置。
  8. 选择“更新来源”。

如需了解详情,请参阅 AWS CodeBuild 用户指南中基于 CodeBuild 用例的示例

了解此发现结果类型的 支持的资源和扫描设置

Credentials Unused 45 Days Greater Disabled

API 中的类别名称:CREDENTIALS_UNUSED_45_DAYS_GREATER_DISABLED

AWS IAM 用户可以使用不同类型的凭据(如密码或访问密钥)访问 AWS 资源。建议停用或移除 45 天或更长时间未使用的所有凭据。

建议:确保已停用 45 天或更长时间未使用的凭据

如需修复此发现结果,请完成以下步骤:

AWS 控制台

执行以下操作来管理未使用的密码(IAM 用户控制台访问权限)

  1. 登录 AWS 管理控制台:
  2. 点击 Services
  3. 点击 IAM
  4. 点击 Users
  5. 点击 Security Credentials
  6. 选择Console last sign-in超过 45 天的用户
  7. 点击 Security credentials
  8. Sign-in credentials 部分,Console password点击 Manage
  9. 在“控制台访问权限”下,选择 Disable
    10. 点击 Apply

执行以下操作以停用访问密钥:

  1. 登录 AWS 管理控制台:
  2. 点击 Services
  3. 点击 IAM
  4. 点击 Users
  5. 点击 Security Credentials
  6. 选择任何使用时间超过 45 天且使用过的访问密钥
    - 点击 Make Inactive
  7. 选择任何存在时间超过 45 天且从未使用过的访问密钥,
    - 点击 X 可Delete

了解此发现结果类型的 支持的资源和扫描设置

Default Security Group Vpc Restricts All Traffic

API 中的类别名称:DEFAULT_SECURITY_GROUP_VPC_RESTRICTS_ALL_TRAFFIC

VPC 附带一个默认安全群组,其初始设置会拒绝所有入站流量、允许所有出站流量,并允许分配给该安全群组的实例之间的所有流量。如果您在启动实例时未指定安全组,则系统会自动将该实例分配给此默认安全组。安全群组可对进入/出站 AWS 资源的网络流量进行有状态过滤。建议默认安全群组对所有流量进行限制。

应更新每个区域中的默认 VPC 的默认安全组以符合规定。任何新创建的 VPC 都将自动包含一个默认安全组,该组需要根据此建议进行修复。

注意:在实现此建议时,VPC 流量日志记录对于确定系统正常运行所需的最小特权端口访问权限非常有用,因为它可以记录当前安全群组下发生的所有数据包接受和拒绝情况。这大大减少了最小权限工程面临的主要障碍,即发现环境中的系统所需的最小端口。即使此基准中的 VPC 流日志记录建议未作为永久性安全措施,也应该在权限最低的安全组发现和工程的任何阶段使用。

建议:确保每个 VPC 的默认安全群组对所有流量进行限制

安全群组成员

如需实现规定的状态,请执行以下操作:

  1. 识别默认安全组中存在的 AWS 资源
  2. 为这些资源创建一组最小权限安全群组
  3. 将资源放入这些安全群组
  4. 从默认安全群组中移除第 1 条中提及的资源

安全群组状态

  1. 访问 https://console.aws.amazon.com/vpc/home 以登录 AWS 管理控制台
  2. 对所有 VPC(包括每个 AWS 区域中的默认 VPC)重复以下步骤:
  3. 在左侧窗格中,点击 Security Groups
  4. 对于每个默认安全群组,请执行以下操作:
  5. 选择 default 安全群组
  6. 点击 Inbound Rules 标签页
  7. 移除所有入站规则
  8. 点击 Outbound Rules 标签页
  9. 移除所有出站规则

推荐:

对于 IAM 组,您可以修改“name”字段。为所有区域中的所有 VPC 修复默认组规则后,请修改此字段,添加类似“请勿使用。DO NOT ADD RULES"

了解此发现结果类型的 支持的资源和扫描设置

Dms Replication Not Public

API 中的类别名称:DMS_REPLICATION_NOT_PUBLIC

检查 AWS DMS 复制实例是否可公开访问。为此,它会检查 PubliclyAccessible 字段的值。

专用复制实例具有专用 IP 地址,您无法在复制网络之外访问该地址。当源数据库和目标数据库位于同一网络中时,复制实例应具有专用 IP 地址。该网络还必须使用 VPN、AWS Direct Connect 或 VPC 对等互连连接到复制实例的 VPC。如需详细了解公共和专用复制实例,请参阅 AWS Database Migration Service 用户指南中的公共和专用复制实例

您还应确保只有获得授权的用户才能访问您的 AWS DMS 实例配置。为此,请限制用户的 IAM 权限,以便他们无法修改 AWS DMS 设置和资源。

建议:检查 AWS Database Migration Service 复制实例是否可公开访问

DMS 复制实例创建后,您将无法更改其公共访问权限设置。如需更改公共访问权限设置,请删除当前实例,然后重新创建实例。请勿选择“可公开访问”选项。

了解此发现结果类型的 支持的资源和扫描设置

Do Setup Access Keys During Initial User Setup All Iam Users Console

API 中的类别名称:DO_SETUP_ACCESS_KEYS_DURING_INITIAL_USER_SETUP_ALL_IAM_USERS_CONSOLE

AWS 控制台在创建新的 IAM 用户时默认不选中任何复选框。创建 IAM 用户凭据时,您必须确定它们需要哪种类型的访问权限。

编程访问:IAM 用户可能需要进行 API 调用、使用 AWS CLI 或使用 Tools for Windows PowerShell。在这种情况下,请为该用户创建访问密钥(访问密钥 ID 和私有访问密钥)。

AWS 管理控制台访问权限:如果用户需要访问 AWS 管理控制台,请为用户创建密码。

建议:请勿在初始用户设置期间为所有具有控制台密码的 IAM 用户设置访问密钥

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台:
  2. 点击 Services
  3. 点击 IAM
  4. 点击 Users
  5. 点击“Security Credentials
  6. 作为管理员
    - 点击与用户个人资料同时创建但未使用的密钥旁边的 X 图标 (Delete)
  7. 作为 IAM 用户
    - 对于与用户个人资料同时创建但尚未使用的密钥,点击 X (Delete)

AWS CLI

aws iam delete-access-key --access-key-id <access-key-id-listed> --user-name <users-name>

了解此发现结果类型的 支持的资源和扫描设置

Dynamodb Autoscaling Enabled

API 中的类别名称:DYNAMODB_AUTOSCALING_ENABLED

这会检查 Amazon DynamoDB 表能否根据需要扩缩其读写容量。如果表使用按需容量模式或已配置自动扩缩的预配模式,则此控件会通过。根据需求扩缩容量可避免限制异常,这有助于保持应用的可用性。

采用按需容量模式的 DynamoDB 表仅受 DynamoDB 吞吐量默认表配额的限制。如需提高这些配额,您可以通过 AWS 支持团队提交支持服务工单。

具有自动伸缩功能的预配模式下的 DynamoDB 表会根据流量模式动态调整预配的吞吐量容量。有关 DynamoDB 请求限制的更多信息,请参阅“Amazon DynamoDB 开发者指南”中的“请求限制和爆发容量”。

建议:DynamoDB 表应根据需求自动扩缩容量

如需详细了解如何在容量模式下为现有表启用 DynamoDB 自动扩缩,请参阅 Amazon DynamoDB 开发者指南中的为现有表启用 DynamoDB 自动扩缩

了解此发现结果类型的 支持的资源和扫描设置

Dynamodb In Backup Plan

API 中的类别名称:DYNAMODB_IN_BACKUP_PLAN

此控件可评估备份方案是否涵盖 DynamoDB 表。如果 DynamoDB 表不在备份方案的涵盖范围内,则此控件将失败。此控件仅评估处于 ACTIVE 状态的 DynamoDB 表。

备份可帮助您更快地从安全事件中恢复。它们还可以增强系统的弹性。在备份方案中添加 DynamoDB 表有助于保护您的数据免遭意外丢失或删除。

建议:DynamoDB 表应纳入备份方案中

如需将 DynamoDB 表添加到 AWS 备份备份方案,请参阅 AWS 备份开发者指南中的将资源分配到备份方案

了解此发现结果类型支持的资产和扫描设置

Dynamodb Pitr Enabled

API 中的类别名称:DYNAMODB_PITR_ENABLED

时间点恢复 (PITR) 是可用于备份 DynamoDB 表的机制之一。

某个时间点的备份会保留 35 天。如果您需要更长的保留期限,请参阅 AWS 文档中的使用 AWS Backup 为 Amazon DynamoDB 设置定期备份

建议:检查是否对所有 AWS DynamoDB 表启用了时间点恢复 (PITR)

如需修复此发现结果,请完成以下步骤:

Terraform

如需为 DynamoDB 表设置 PITR,请设置 point_in_time_recovery 块:

resource "aws_dynamodb_table" "example" {
  # ... other configuration ...
  point_in_time_recovery {
    enabled = true
  }
}

AWS 控制台

为现有表启用 DynamoDB 时间点恢复

  1. 通过 https://console.aws.amazon.com/dynamodb/ 打开 DynamoDB 控制台。
  2. 选择您要使用的表,然后选择“备份”。
  3. 在“时间点恢复”部分的“状态”下,选择“启用”。
  4. 再次选择“启用”以确认更改。

AWS CLI

aws dynamodb update-continuous-backups \
  --table-name "GameScoresOnDemand" \
  --point-in-time-recovery-specification "PointInTimeRecoveryEnabled=true"

了解此发现结果类型支持的资产和扫描设置

Dynamodb Table Encrypted Kms

API 中的类别名称:DYNAMODB_TABLE_ENCRYPTED_KMS

检查是否使用客户管理的 KMS 密钥(非默认密钥)对所有 DynamoDB 表进行了加密。

建议:检查是否使用 AWS Key Management Service (KMS) 对所有 DynamoDB 表进行了加密

如需修复此发现结果,请完成以下步骤:

Terraform

要修复此控制措施,请创建一个 AWS KMS 密钥并使用它加密违规的 DynamoDB 资源。

resource "aws_kms_key" "dynamodb_encryption" {
  description         = "Used for DynamoDB encryption configuration"
  enable_key_rotation = true
}

resource "aws_dynamodb_table" "example" {
  # ... other configuration ...
  server_side_encryption {
    enabled     = true
    kms_key_arn = aws_kms_key.dynamodb_encryption.arn
  }
}

AWS 控制台

假设有一个可用于加密 DynamoDB 的表单中现有的 AWS KMS 密钥。

将 DynamoDB 表加密更改为客户管理和拥有的 KMS 密钥。

  1. 通过 https://console.aws.amazon.com/dynamodb/ 打开 DynamoDB 控制台。
  2. 选择您要使用的表格,然后选择“其他设置”。
  3. 在“加密”下,选择“管理加密”。
  4. 对于“静态加密”,请选择“存储在您的账号中,并由您拥有和管理”。
  5. 选择要使用的 AWS 密钥。保存更改。

AWS CLI

aws dynamodb update-table \
  --table-name <value> \
  --sse-specification "Enabled=true,SSEType=KMS,KMSMasterKeyId=<kms_key_arn>"

了解此发现结果类型支持的资产和扫描设置

Ebs Optimized Instance

API 中的类别名称:EBS_OPTIMIZED_INSTANCE

检查是否为可进行 EBS 优化的 EC2 实例启用了 EBS 优化

建议:检查是否为支持 EBS 优化的所有实例启用了 EBS 优化

如需配置 EBS 优化实例设置,请参阅 Amazon EC2 用户指南中的 Amazon EBS 优化实例

了解此发现结果类型支持的资产和扫描设置

Ebs Snapshot Public Restorable Check

API 中的类别名称:EBS_SNAPSHOT_PUBLIC_RESTORABLE_CHECK

检查 Amazon Elastic Block Store 快照是否不公开。如果任何人都可以恢复 Amazon EBS 快照,则此控制将失败。

EBS 快照用于在特定时间点将 EBS 卷中的数据备份到 Amazon S3。您可以使用快照恢复 EBS 卷的先前状态。公开分享快照的情况很少见。通常,公开共享快照的决定是错误的,或者没有完全了解影响。这项检查有助于确保所有此类分享都是有计划的、有意识的。

建议:Amazon EBS 快照不应是可公开恢复的

如需修复此发现结果,请完成以下步骤:

AWS 控制台

如需解决此问题,请更新您的 EBS 快照,将其设为不公开而非公开。

如需将公开 EBS 快照设为不公开,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台。
  2. 在导航窗格中,选择“弹性块存储区”下的“快照”菜单,然后选择您的公共快照。
  3. 从“操作”中,选择“修改权限”。
  4. 选择“不公开”。
  5. (可选)添加要与其共享快照的授权账号的 AWS 账号,然后选择“添加权限”。
  6. 选择“保存”。

了解此发现结果类型的 支持的资源和扫描设置

Ebs Volume Encryption Enabled All Regions

API 中的类别名称:EBS_VOLUME_ENCRYPTION_ENABLED_ALL_REGIONS

Elastic Compute Cloud (EC2) 在使用 Elastic Block Store (EBS) 服务时支持静态加密。虽然默认处于停用状态,但支持在创建 EBS 卷时强制加密。

建议:确保在所有区域中启用 EBS 卷加密

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台,然后使用 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台
  2. Account attributes 下,点击 EBS encryption
  3. 点击 Manage
  4. 点击 Enable 复选框。
  5. 点击 Update EBS encryption
  6. 对需要更改的每个区域重复此操作。

注意:EBS 卷加密是按区域配置的。

AWS CLI

  1. 运行
aws --region <region> ec2 enable-ebs-encryption-by-default
  1. 验证 "EbsEncryptionByDefault": true 是否显示。
  2. 重复每个需要更改的区域。

注意:EBS 卷加密是按区域配置的。

了解此发现结果类型的 支持的资源和扫描设置

Ec2 Instances In Vpc

API 中的类别名称:EC2_INSTANCES_IN_VPC

与 EC2 Classic 相比,Amazon VPC 提供更多安全功能。建议所有节点都属于 Amazon VPC。

建议:确保所有实例都属于 VPC

如需修复此发现结果,请完成以下步骤:

Terraform

如果您在 Terraform 中定义了 EC2 传统版实例,则可以将资源修改为 VPC 的一部分。此迁移将依赖于最适合您需求的架构。以下是一个简单的 Terraform 示例,展示了在 VPC 中公开公开的 EC2。

  resource "aws_vpc" "example_vpc" {
    cidr_block = "10.0.0.0/16"
  }

  resource "aws_subnet" "example_public_subnet" {
    vpc_id            = aws_vpc.example_vpc.id
    cidr_block        = "10.0.1.0/24"
    availability_zone = "1a"
  }

  resource "aws_internet_gateway" "example_igw" {
    vpc_id = aws_vpc.example_vpc.id
  }

  resource "aws_key_pair" "example_key" {
    key_name   = "web-instance-key"
    public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 email@example.com"
  }

  resource "aws_security_group" "web_sg" {
    name   = "http and ssh"
    vpc_id = aws_vpc.some_custom_vpc.id

    ingress {
      from_port   = 80
      to_port     = 80
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
    }

    ingress {
      from_port   = 22
      to_port     = 22
      protocol    = "tcp"
      cidr_blocks = ["0.0.0.0/0"]
    }

    egress {
      from_port   = 0
      to_port     = 0
      protocol    = -1
      cidr_blocks = ["0.0.0.0/0"]
    }
  }

  resource "aws_instance" "web" {
    ami                    = <ami_id>
    instance_type          = <instance_flavor>
    key_name               = aws_key_pair.example_key.name
    monitoring             = true
    subnet_id              = aws_subnet.example_public_subnet.id
    vpc_security_group_ids = [aws_security_group.web_sg.id]
    metadata_options {
      http_tokens = "required"
    }
  }

AWS 控制台

如需将 EC2 Classic 迁移到 VPC,请参阅从 EC2-Classic 迁移到 VPC

AWS CLI

此 AWS CLI 示例展示了使用 Terraform 定义的相同基础架构。这是 VPC 中公开公开的 EC2 实例的简单示例

创建 VPC

  aws ec2 create-vpc \
  --cidr-block 10.0.0.0/16

创建公共子网

  aws ec2 create-subnet \
  --availability-zone 1a \
  --cidr-block 10.0.1.0/24 \
  --vpc-id <id_from_create-vpc_command>

创建互联网网关

  aws ec2 create-internet-gateway

将互联网网关连接到 VPC

  aws ec2 attach-internet-gateway \
  --internet-gateway-id <id_from_create-internet-gateway_command> \
  --vpc-id <id_from_create-vpc_command>

创建密钥对 - 这会将您的私钥保存在 /.ssh/web-instance-key.pem

  aws ec2 create-key-pair \
  --key-name web-instance-key \
  --query "KeyMaterial" \
  --output text > ~/.ssh/web-instance-key.pem && \
  chmod 400 ~/.ssh/web-instance-key.pem

创建安全群组

  aws ec2 create-security-group \
  --group-name "http and ssh" \
  --vpc-id <id_from_create-vpc_command>

创建安全群组规则 - 如需更严格的访问权限,请为端口 22 上的 SSH 定义更严格的 CIDR

  aws ec2 authorize-security-group-ingress \
  --group-id <id_from_create-security-group_command>
  --protocol tcp \
  --port 80 \
  --cidr 0.0.0.0/0

  aws ec2 authorize-security-group-ingress \
  --group-id <id_from_create-security-group_command>
  --protocol tcp \
  --port 22 \
  --cidr 0.0.0.0/0

  aws ec2 authorize-security-group-egress \
  --group-id <id_from_create-security-group_command>
  --protocol -1 \
  --port 0 \
  --cidr 0.0.0.0/0

创建 EC2 实例

  aws ec2 run-instances \
  --image-id <ami_id> \
  --instance-type <instance_flavor> \
  --metadata-options "HttpEndpoint=enabled,HttpTokens=required" \
  --monitoring true \
  --key-name web-instance-key \
  --subnet-id <id_from_create-subnet_command> \
  --security-group-ids <id_from_create-security-group_command>

了解此发现结果类型的 支持的资源和扫描设置

Ec2 Instance No Public Ip

API 中的类别名称:EC2_INSTANCE_NO_PUBLIC_IP

具有公共 IP 地址的 EC2 实例遭到入侵的风险更高。建议不要为 EC2 实例配置公共 IP 地址。

建议:确保没有实例拥有公共 IP

如需修复此发现结果,请完成以下步骤:

Terraform

associate_public_ip_address = false 参数与 aws_instance 资源搭配使用,以确保预配的 EC2 实例没有公共 IP 地址

resource "aws_instance" "no_public_ip" {
  ...
  associate_public_ip_address = false
}

AWS 控制台

默认情况下,非默认子网的 IPv4 公共寻址属性设为 false,默认子网的此属性设为 true。由 Amazon EC2 启动实例向导创建的非默认子网例外 - 向导会将该属性设置为 true。您可以使用 Amazon VPC 控制台修改此属性。

修改子网的公共 IPv4 寻址行为

  1. 访问 https://console.aws.amazon.com/vpc/,打开 Amazon VPC 控制台。
  2. 在导航窗格中,选择子网
  3. 选择您的子网,然后依次选择操作 > 修改子网设置
  4. 如果您选中启用自动分配公共 IPv4 地址复选框,系统会为启动到所选子网中的所有实例请求公共 IPv4 地址。根据需要选中或取消选中该复选框,然后选择保存

AWS CLI

以下命令在默认子网中运行 EC2 实例,但不将公共 IP 地址与其相关联。

aws ec2 run-instances \
--image-id <ami_id> \
--instance-type <instance_flavor> \
--no-associate-public-ip-address \
--key-name MyKeyPair

了解此发现结果类型的 支持的资源和扫描设置

Ec2 Managedinstance Association Compliance Status Check

API 中的类别名称:EC2_MANAGEDINSTANCE_ASSOCIATION_COMPLIANCE_STATUS_CHECK

状态管理器关联是分配给托管实例的配置。该配置定义了您要在实例上维护的状态。例如,关联可以指定必须在实例上安装并运行杀毒软件,或者必须关闭某些端口。与 AWS Systems Manager 相关联的 EC2 实例由 Systems Manager 管理,这样您就可以更轻松地应用补丁、修正错误配置并响应安全事件。

建议:确认 AWS 系统管理器关联的合规状态

如需修复此发现结果,请完成以下步骤:

Terraform

以下示例演示了如何创建简单的 EC2 实例、AWS Systems Manager (SSM) 文档以及 SSM 和 EC2 实例之间的关联。支持的文档类型为 CommandPolicy

resource "aws_instance" "web" {
  ami           = "<iam_id>"
  instance_type = "<instance_flavor>"
}

resource "aws_ssm_document" "check_ip" {
  name          = "check-ip-config"
  document_type = "Command"

  content = <<DOC
  {
    "schemaVersion": "1.2",
    "description": "Check ip configuration of a Linux instance.",
    "parameters": {

    },
    "runtimeConfig": {
      "aws:runShellScript": {
        "properties": [
          {
            "id": "0.aws:runShellScript",
            "runCommand": ["ifconfig"]
          }
        ]
      }
    }
  }
DOC
}

resource "aws_ssm_association" "check_ip_association" {
  name = aws_ssm_document.check_ip.name

  targets {
    key    = "InstanceIds"
    values = [aws_instance.web.id]
  }
}

AWS 控制台

如需了解如何使用控制台配置与 AWS Systems Manager 的关联,请参阅 AWS Systems Manager 文档中的创建关联

AWS CLI

创建 SSM 文档

aws ssm create-document \
--name <document_name> \
--content  file://path/to-file/document.json \
--document-type "Command"

创建 SSM 关联

aws ssm create-association \
--name <association_name> \
--targets "Key=InstanceIds,Values=<instance-id-1>,<instance-id-2>"

了解此发现结果类型的 支持的资源和扫描设置

Ec2 Managedinstance Patch Compliance Status Check

API 中的类别名称:EC2_MANAGEDINSTANCE_PATCH_COMPLIANCE_STATUS_CHECK

此控件用于检查在实例上运行关联后,AWS Systems Manager 关联合规性的状态是 COMPLIANT 还是 NON_COMPLIANT。如果关联合规性状态为 NON_COMPLIANT,则控制操作会失败。

状态管理器关联是分配给托管实例的配置。该配置定义了您要在实例上维护的状态。例如,关联可以指定必须在实例上安装并运行杀毒软件,或者必须关闭某些端口。

创建一个或多个状态经理关联后,您会立即看到合规状态信息。您可以在控制台中查看合规性状态,也可以查看合规状态如何响应 AWS CLI 命令或相应 Systems Manager API 操作。对于关联,“配置合规性”会显示合规状态(“合规”或“不合规”)。还会显示分配给该关联的严重级别,例如“严重”或“中”。

如需详细了解 State Manager 关联合规性,请参阅 AWS 系统管理器用户指南中的 State Manager 关联合规性简介

建议:检查 AWS Systems Manager 补丁合规性的状态

关联失败可能与多种因素有关,包括目标和 SSM 文档名称。要解决该问题,您必须先查看关联历史记录,以确定并调查关联。如需了解如何查看关联历史记录,请参阅 AWS Systems Manager 用户指南中的查看关联历史记录

调查后,您可以修改关联以更正发现的问题。您可以修改关联来指定新名称、时间表、严重级别或目标。修改关联后,AWS Systems Manager 会创建一个新版本。如需了解如何修改关联,请参阅 AWS Systems Manager 用户指南中的修改关联和创建关联的新版本

了解此发现结果类型的 支持的资源和扫描设置

Ec2 Metadata Service Allows Imdsv2

API 中的类别名称:EC2_METADATA_SERVICE_ALLOWS_IMDSV2

在 AWS EC2 实例上启用元数据服务时,用户可以选择使用实例元数据服务版本 1 (IMDSv1;请求/响应方法) 或实例元数据服务版本 2 (IMDSv2;会话型方法)。

建议:确保 EC2 元数据服务仅允许 IMDSv2

通过控制台:
1.登录 AWS 管理控制台,然后使用 https://console.aws.amazon.com/ec2/
打开 Amazon EC2 控制台 2.在“实例”菜单下,选择“实例”。
3. 对于每个实例,请选择该实例,然后依次选择“操作”>“修改实例元数据”选项。
4.如果实例元数据服务已启用,请将 IMDSv2 设置为“必需”。

通过命令行:

aws ec2 modify-instance-metadata-options --instance-id <instance_id> --http-tokens required

了解此发现结果类型支持的资产和扫描设置

Ec2 Volume Inuse Check

API 中的类别名称:EC2_VOLUME_INUSE_CHECK

确定并移除 AWS 账号中未挂接(未使用的)Elastic Block Store (EBS) 卷,以降低每月 AWS 账单的费用。删除未使用的 EBS 卷还有助于降低机密/敏感数据离开您的场所的风险。此外,此控件还会检查归档的 EC2 实例是否配置为在终止时删除卷。

默认情况下,EC2 实例会配置为删除与实例关联的任何 EBS 卷中的数据,并删除实例的根 EBS 卷。不过,默认情况下,在启动或执行期间挂接到实例的任何非根 EBS 卷在实例终止后都会保留。

建议:检查 EBS 卷是否挂接到 EC2 实例以及是否配置为在实例终止时删除

如需修复此发现结果,请完成以下步骤:

Terraform

为了避免使用 Terraform 出现这种情况,请创建包含嵌入式 EBS 块的 EC2 实例。这可确保与实例(而不仅仅是根)关联的任何 EBS 块在实例终止时被删除,方法是将属性 ebs_block_device.delete_on_termination 默认为 true

resource "aws_instance" "web" {
    ami                    = <ami_id>
    instance_type          = <instance_flavor>
    ebs_block_device {
      delete_on_termination = true # Default
      device_name           = "/dev/sdh"
    }

AWS 控制台

如需使用控制台删除 EBS 卷,请执行以下操作

  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台。
  2. 在导航窗格中,选择
  3. 选择要删除的音量,然后依次选择操作、删除音量
  4. 注意:如果“删除卷”呈灰显状态,则表示该卷已附加到实例。您必须先将卷从实例中分离,然后才能将其删除。
  5. 在确认对话框中,选择删除

AWS CLI

以下示例命令会删除卷 ID 为 vol-049df61146c4d7901 的可用卷。如果命令成功,则不会返回任何输出。

aws ec2 delete-volume --volume-id vol-049df61146c4d7901

了解此发现结果类型支持的资产和扫描设置

Efs Encrypted Check

API 中的类别名称:EFS_ENCRYPTED_CHECK

Amazon EFS 支持两种文件系统加密形式,即传输中的数据加密和静态加密。此检查会检查账号中所有已启用区域中的所有 EFS 文件系统是否均配置了静态数据加密。

建议:检查 EFS 是否配置为使用 KMS 对文件数据进行加密

如需修复此发现结果,请完成以下步骤:

Terraform

以下代码段可用于创建 KMS 加密的 EFS(注意:kms_key_id 属性是可选的,如果未传递任何 KMS 密钥 ID,系统将创建一个密钥)

resource "aws_efs_file_system" "encrypted-efs" {
  creation_token = "my-kms-encrypted-efs"
  encrypted      = true
  kms_key_id     = "arn:aws:kms:us-west-2:12344375555:key/16393ebd-3348-483f-b162-99b6648azz23"

  tags = {
    Name = "MyProduct"
  }
}

AWS 控制台

如需使用 AWS 控制台配置带加密功能的 EFS,请参阅使用控制台对文件系统进行静态加密

AWS CLI

请务必注意,虽然通过控制台创建 EFS 会默认启用静态加密,但使用 CLI、API 或 SDK 创建的 EFS 并非如此。以下示例允许您在基础架构中创建加密文件系统。

aws efs create-file-system \
--backup \
--encrypted \
--region us-east-1 \

了解此发现结果类型支持的资产和扫描设置

Efs In Backup Plan

API 中的类别名称:EFS_IN_BACKUP_PLAN

Amazon 最佳实践建议为 Elastic File System (EFS) 配置备份。这会检查您 AWS 账号中所有已启用区域中的所有 EFS,以确定是否已启用备份。

建议:检查 EFS 文件系统是否纳入了 AWS 备份方案

如需修复此发现结果,请完成以下步骤:

Terraform

使用 aws_efs_backup_policy 资源为 EFS 文件系统配置备份政策。

resource "aws_efs_file_system" "encrypted-efs" {
  creation_token = "my-encrypted-efs"
  encrypted      = true

  tags = merge({
    Name = "${local.resource_prefix.value}-efs"
    }, {
    git_file             = "terraform/aws/efs.tf"
    git_org              = "your_git_org"
    git_repo             = "your_git_repo"
  })
}

resource "aws_efs_backup_policy" "policy" {
  file_system_id = aws_efs_file_system.encrypted-efs.id

  backup_policy {
    status = "ENABLED"
  }
}

AWS 控制台

您可以通过以下两种方式备份 EFS:AWS Backup 服务和 EFS 到 EFS 备份解决方案。如需使用控制台修复未备份的 EFS,请参阅:

  1. 使用 AWS Backup 备份和恢复 Amazon EFS 文件系统
  2. EFS 到 EFS 备份

AWS CLI

您可以通过以下几种方式使用 CLI 创建合规的 EFS 文件系统:

  1. 创建启用自动备份的 EFS(默认用于单区存储,并根据 AWS 区域的备份可用性而定)
  2. 创建 EFS 并添加备份政策

不过,如果修复需要在现有 EFS 中进行,最好的选择是创建备份政策并将其关联到不合规的 EFS。对于基础架构中的每个 EFS,您都需要一个命令。

arr=( $(aws efs describe-file-systems | jq -r '.FileSystems[].FileSystemId') )
for efs in "${arr[@]}"
do
  aws efs put-backup-policy \
  --file-system-id "${efs}" \
  --backup-policy "Status=ENABLED"
done

了解此发现结果类型支持的资产和扫描设置

Elb Acm Certificate Required

API 中的类别名称:ELB_ACM_CERTIFICATE_REQUIRED

检查传统负载平衡器是否使用 AWS Certificate Manager (ACM) 提供的 HTTPS/SSL 证书。如果使用 HTTPS/SSL 监听器配置的传统负载均衡器未使用 ACM 提供的证书,则控制组将失败。

如需创建证书,您可以使用 ACM 或支持 SSL 和 TLS 协议的工具(例如 OpenSSL)。Security Hub 建议您使用 ACM 为负载均衡器创建或导入证书。

ACM 与传统负载均衡器集成,以便您在负载均衡器上部署证书。您还应自动续订这些证书。

建议:检查是否所有传统负载平衡器都使用 AWS Certificate Manager 提供的 SSL 证书

如需了解如何将 ACM SSL/TLS 证书与传统负载平衡器相关联,请参阅 AWS 知识中心文章 How can I associated an ACM SSL/TLS Certificate with a Classic, Application, or Network Load Balancer?(如何将 ACM SSL/TLS 证书与传统负载平衡器、应用负载平衡器或网络负载平衡器相关联?)

了解此发现结果类型支持的资产和扫描设置

Elb Deletion Protection Enabled

API 中的类别名称:ELB_DELETION_PROTECTION_ENABLED

检查应用负载平衡器是否启用了删除保护。如果未配置删除保护,则控件会失败。

启用删除防护,以防止应用负载均衡器被删除。

建议:应启用应用负载均衡器删除防护

如需修复此发现结果,请完成以下步骤:

AWS 控制台

为防止负载均衡器被意外删除,您可以启用删除保护。默认情况下,负载均衡器的删除保护处于停用状态。

如果您为负载均衡器启用了删除保护,则必须先停用删除保护,然后才能删除负载均衡器。

通过控制台启用删除保护。

  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台。
  2. 在导航窗格的负载均衡下,选择负载平衡器
  3. 选择负载均衡器。
  4. 说明标签页上,选择修改属性
  5. “修改负载均衡器属性”页面上,选择启用删除保护,然后选择保存
  6. 选择保存

了解此发现结果类型支持的资产和扫描设置

Elb Logging Enabled

API 中的类别名称:ELB_LOGGING_ENABLED

这会检查是否已为应用负载均衡器和传统负载均衡器启用日志记录。如果 access_logs.s3.enabled 为 false,该控件将失败。

Elastic Load Balancing 提供访问日志,用于捕获有关发送到负载均衡器的请求的详细信息。每个日志都包含诸如接收请求的时间、客户端的 IP 地址、延迟时间、请求路径和服务器响应等信息。您可以使用这些访问日志来分析流量模式和排查问题。

如需了解详情,请参阅传统版负载平衡器用户指南中的传统版负载平衡器的访问日志

建议:检查是否对传统负载平衡器和应用负载平衡器启用了日志记录

如需修复此发现结果,请完成以下步骤:

AWS 控制台

如需解决此问题,请更新您的负载平衡器以启用日志记录。

如需启用访问日志,请执行以下操作:

  1. 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台。
  2. 在导航窗格中,选择负载均衡器
  3. 选择应用负载平衡器或传统负载平衡器。
  4. 操作中,选择修改属性
  5. 访问日志下,选择启用
  6. 输入您的 S3 位置。此营业地点可以存在,也可以由系统为您创建。如果未指定前缀,访问日志将存储在 S3 存储桶的根目录中。
  7. 选择保存

了解此发现结果类型的 支持的资源和扫描设置

Elb Tls Https Listeners Only

API 中的类别名称:ELB_TLS_HTTPS_LISTENERS_ONLY

此检查可确保所有传统负载平衡器都配置为使用安全通信。

监听器是检查连接请求的过程。它配置了用于前端(客户端到负载均衡器)连接的协议和端口,以及用于后端(负载均衡器到实例)连接的协议和端口。如需了解 Elastic Load Balancing 支持的端口、协议和监听器配置,请参阅传统负载平衡器的监听器

建议:检查是否对所有传统负载均衡器配置了 SSL 或 HTTPS 监听器

如需为传统负载均衡器配置 SSL 或 TLS,请参阅使用 AWS 管理控制台创建 HTTPS/SSL 负载均衡器

了解此发现结果类型的 支持的资源和扫描设置

Encrypted Volumes

API 中的类别名称:ENCRYPTED_VOLUMES

检查处于已挂接状态的 EBS 卷是否已加密。若要通过此检查,EBS 卷必须处于使用且已加密。如果 EBS 卷未挂接,则不受此检查的约束。

为了进一步提高 EBS 卷中敏感数据的安全性,您应启用 EBS 静态加密。Amazon EBS 加密为您的 EBS 资源提供了简单明了的加密解决方案,无需您构建、维护和保护自己的密钥管理基础架构。在创建加密卷和快照时,它会使用 KMS 密钥。

如需详细了解 Amazon EBS 加密,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 Amazon EBS 加密。

建议:应对挂接的 Amazon EBS 卷进行静态加密

如需修复此发现结果,请完成以下步骤:

AWS 控制台

无法直接加密现有的未加密卷或快照。您只能在创建新卷或快照时对其进行加密。

如果您默认启用了加密功能,则 Amazon EBS 会使用 Amazon EBS 加密的默认密钥对生成的新卷或快照进行加密。即使您默认未启用加密,也可以在创建单个卷或快照时启用加密。在这两种情况下,您都可以替换 Amazon EBS 加密的默认密钥,并选择客户管理的对称密钥。

如需了解详情,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的创建 Amazon EBS 卷复制 Amazon EBS 快照

了解此发现结果类型支持的资产和扫描设置

Encryption At Rest Enabled Rds Instances

API 中的类别名称:ENCRYPTION_AT_REST_ENABLED_RDS_INSTANCES

Amazon RDS 加密型数据库实例使用业界标准 AES-256 加密算法,在托管 Amazon RDS 数据库实例的服务器上加密您的数据。数据加密后,Amazon RDS 会以透明的方式处理数据访问和解密行为的身份验证,同时将对性能的影响降至最低。

建议:确保已针对 RDS 实例启用静态加密

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台并在 https://console.aws.amazon.com/rds/ 上打开 RDS 信息中心。
  2. 在左侧导航面板中,点击 Databases
  3. 选择需要加密的数据库实例。
  4. 点击右上角的 Actions 按钮,然后选择 Take Snapshot
  5. 在“Take Snapshot”(拍摄快照)页面的 Snapshot Name 字段中输入要截取快照的数据库名称,然后点击 Take Snapshot
  6. 选择新创建的快照,点击位于右上角的 Action 按钮,然后从“操作”菜单中选择 Copy snapshot
  7. 在“复制数据库快照”页面上,执行以下操作:
  • 在“New DB Snapshot Identifier”(新的数据库快照标识符)字段中,输入 new snapshot 的名称。
  • 选中 Copy Tags,新快照必须与来源快照具有相同的标记。
  • Enable Encryption 下拉列表中选择 Yes 以启用加密。您可以选择使用主密钥下拉列表中的 AWS 默认加密密钥或自定义密钥。
  1. 点击 Copy Snapshot 以创建所选实例快照的加密副本。
  2. 选择新的“快照加密副本”,然后点击右上角的 Action 按钮,再从“操作”菜单中选择 Restore Snapshot 按钮,这会将加密快照恢复到新的数据库实例。
  3. 在“恢复数据库实例”页面上的“数据库实例标识符”字段中输入新数据库实例的唯一名称。
  4. 查看实例配置详细信息,然后点击 Restore DB Instance
  5. 完成新实例预配过程后,可以更新应用配置以引用新加密数据库实例的端点。在应用级别更改数据库端点后,您可以移除未加密的实例。

AWS CLI

  1. 运行 describe-db-instances 命令以列出所选 AWS 区域中可用的所有 RDS 数据库名称,该命令输出应返回数据库实例标识符。
aws rds describe-db-instances --region <region-name> --query 'DBInstances[*].DBInstanceIdentifier'
  1. 运行 create-db-snapshot 命令为所选数据库实例创建快照,命令输出将返回名为“DB Snapshot Name”的 new snapshot
aws rds create-db-snapshot --region <region-name> --db-snapshot-identifier <DB-Snapshot-Name> --db-instance-identifier <DB-Name>
  1. 现在,运行 list-aliases 命令以列出指定区域中可用的 KMS 密钥别名,命令输出应返回每个 key alias currently available。对于我们的 RDS 加密激活流程,请找到 AWS 默认 KMS 密钥的 ID。
aws kms list-aliases --region <region-name>
  1. 使用之前返回的 RDS 实例的默认 KMS 密钥 ID 运行 copy-db-snapshot 命令,以创建数据库实例快照的加密副本,命令输出将返回 encrypted instance snapshot configuration
aws rds copy-db-snapshot --region <region-name> --source-db-snapshot-identifier <DB-Snapshot-Name> --target-db-snapshot-identifier <DB-Snapshot-Name-Encrypted> --copy-tags --kms-key-id <KMS-ID-For-RDS>
  1. 运行 restore-db-instance-from-db-snapshot 命令,将在上一步中创建的加密快照恢复到新的数据库实例。如果成功,命令输出应返回新的加密数据库实例配置。
aws rds restore-db-instance-from-db-snapshot --region <region-name> --db-instance-identifier <DB-Name-Encrypted> --db-snapshot-identifier <DB-Snapshot-Name-Encrypted>
  1. 运行 describe-db-instances 命令以列出所选 AWS 区域中可用的所有 RDS 数据库名称,输出将返回数据库实例标识符名称。选择我们刚刚创建的“DB-Name-Encrypted”的加密数据库名称。
aws rds describe-db-instances --region <region-name> --query 'DBInstances[*].DBInstanceIdentifier'
  1. 使用之前返回的 RDS 实例标识符再次运行 describe-db-instances 命令,以确定所选数据库实例是否已加密。该命令的输出应返回加密状态 True
aws rds describe-db-instances --region <region-name> --db-instance-identifier <DB-Name-Encrypted> --query 'DBInstances[*].StorageEncrypted'

了解此发现结果类型支持的资产和扫描设置

Encryption Enabled Efs File Systems

API 中的类别名称:ENCRYPTION_ENABLED_EFS_FILE_SYSTEMS

EFS 数据应使用 AWS KMS (Key Management Service) 进行静态加密。

建议:确保为 EFS 文件系统启用加密

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台并导航到 Elastic File System (EFS) 信息中心。
  2. 从左侧导航面板中选择 File Systems
  3. 点击信息中心顶部菜单中的“Create File System”按钮即可开始文件系统设置流程。
  4. Configure file system access 配置页面上,执行以下操作。
    - 从 VPC 下拉列表中选择正确的 VPC。
    - 在“创建挂载目标”部分中,选中所选 VPC 中的所有可用区 (AZ) 对应的复选框。这些将成为您的装载目标。
    - 点击 Next step 以继续。

  5. Configure optional settings 页面上执行以下操作。
    - 创建 tags 来描述新的文件系统。
    - 根据您的要求选择 performance mode
    - 选中 Enable encryption 复选框,然后从“选择 KMS 主密钥”下拉列表中选择 aws/elasticfilesystem,以使用 AWS KMS 提供和管理的默认主密钥为新文件系统启用加密。
    - 点击 Next step 以继续。

  6. 查看 review and create 页面上的文件系统配置详细信息,然后点击 Create File System 以创建新的 AWS EFS 文件系统。

  7. 将数据从旧的未加密 EFS 文件系统复制到新创建的加密文件系统。
  8. 将数据迁移到新创建的加密文件系统后,请立即移除未加密的文件系统。
  9. 在导航栏中更改 AWS 区域,然后对其他 aws 区域重复整个过程。

通过 CLI
1. 运行 describe-file-systems 命令,以描述为所选(未加密)文件系统提供的配置信息(请参阅“审核”部分,以确定正确的资源):

aws efs describe-file-systems --region <region> --file-system-id <file-system-id from audit section step 2 output>
  1. 命令输出应返回所请求的配置信息。
  2. 如需预配新的 AWS EFS 文件系统,您需要生成一个通用唯一标识符 (UUID),以便创建 create-file-system 命令所需的令牌。如需创建所需的令牌,您可以使用“https://www.uuidgenerator.net”中随机生成的 UUID。
  3. 使用上一步中创建的唯一令牌运行 create-file-system 命令。
aws efs create-file-system --region <region> --creation-token <Token (randomly generated UUID from step 3)> --performance-mode generalPurpose --encrypted
  1. 该命令输出应返回新的文件系统配置元数据。
  2. 使用上一步返回的新创建的 EFS 文件系统 ID 作为标识符和代表装载目标的可用区 (AZ) 的 ID 来运行 create-mount-target 命令:
aws efs create-mount-target --region <region> --file-system-id <file-system-id> --subnet-id <subnet-id>
  1. 命令输出应返回新的装载目标元数据。
  2. 现在您可以从 EC2 实例装载文件系统。
  3. 将数据从旧的未加密 EFS 文件系统复制到新创建的加密文件系统。
  4. 将数据迁移到新创建的加密文件系统后,请立即移除未加密的文件系统。
aws efs delete-file-system --region <region> --file-system-id <unencrypted-file-system-id>
  1. 通过更新 --region 更改 AWS 区域,然后针对其他 AWS 区域重复整个过程。

了解此发现结果类型支持的资产和扫描设置

Iam Password Policy

API 中的类别名称:IAM_PASSWORD_POLICY

AWS 允许在 AWS 账号中设置自定义密码政策,以指定 IAM 用户密码的复杂性要求和强制轮替周期。如果您未设置自定义密码政策,IAM 用户密码必须符合默认的 AWS 密码政策。AWS 安全最佳实践建议遵循以下密码复杂度要求:

  • 密码中必须至少包含一个大写字符。
  • 要求密码中至少包含一个小写字符。
  • 要求密码中至少包含一个符号。
  • 要求密码中至少包含一个数字。
  • 要求密码长度至少为 14 个字符。
  • 要求至少换过 24 次密码后才能重用。
  • 要求密码至少在 90 天后过期

此控件会检查所有指定的密码政策要求。

建议:检查 IAM 用户的账号密码政策是否符合规定的要求

如需修复此发现结果,请完成以下步骤:

Terraform

resource "aws_iam_account_password_policy" "strict" {
  allow_users_to_change_password = true
  require_uppercase_characters   = true
  require_lowercase_characters   = true
  require_symbols                = true
  require_numbers                = true
  minimum_password_length        = 14
  password_reuse_prevention      = 24
  max_password_age               = 90
}

AWS 控制台

创建自定义密码政策

  1. 登录 AWS 管理控制台,并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
  2. 在导航窗格中,选择“账号设置”。
  3. 在“密码政策”部分,选择“更改密码政策”。
  4. 选择要应用于密码政策的选项,然后选择“保存更改”。

更改自定义密码政策

  1. 登录 AWS 管理控制台,并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
  2. 在导航窗格中,选择“账号设置”。
  3. 在“密码政策”部分,选择“更改”。
  4. 选择要应用于密码政策的选项,然后选择“保存更改”。

AWS CLI

aws iam update-account-password-policy \
--allow-users-to-change-password \
--require-uppercase-characters \
--require-lowercase-characters \
--require-symbols \
--require-numbers \
--minimum-password-length 14 \
--password-reuse-prevention 24 \
--max-password-age 90

了解此发现结果类型支持的资产和扫描设置

Iam Password Policy Prevents Password Reuse

API 中的类别名称:IAM_PASSWORD_POLICY_PREVENTS_PASSWORD_REUSE

IAM 密码政策可以防止同一用户重复使用给定密码。建议密码政策禁止重复使用密码。

建议:确保 IAM 密码政策可防止密码重复使用

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 控制台(具有查看 Identity Access Management 账号设置的适当权限)
  2. 前往 AWS 控制台上的 IAM 服务
  3. 点击左侧窗格中的“账号设置”
  4. 选中“禁止重复使用密码”
  5. 将“要记住的密码数量”设置为 24

AWS CLI

 aws iam update-account-password-policy --password-reuse-prevention 24

注意:所有以“aws iam update-account-password-policy”开头的命令都可以合并为一个命令。

了解此发现结果类型支持的资产和扫描设置

Iam Password Policy Requires Minimum Length 14 Greater

API 中的类别名称:IAM_PASSWORD_POLICY_REQUIRES_MINIMUM_LENGTH_14_GREATER

密码政策在一定程度上用于强制执行密码复杂度要求。IAM 密码政策可用于确保密码至少具有给定长度。建议密码政策要求密码长度不得低于 14 个字符。

建议:确保 IAM 密码政策要求最小长度为 14 个字符

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 控制台(具有查看 Identity Access Management 账号设置的适当权限)
  2. 前往 AWS 控制台上的 IAM 服务
  3. 点击左侧窗格中的“账号设置”
  4. 设置“最小密码长度”不小于 14
  5. 点击“应用密码政策”

AWS CLI

 aws iam update-account-password-policy --minimum-password-length 14

注意:以“aws iam update-account-password-policy”开头的所有命令都可以合并为一条命令。

了解此发现结果类型的 支持的资源和扫描设置

Iam Policies Allow Full Administrative Privileges Attached

API 中的类别名称:IAM_POLICIES_ALLOW_FULL_ADMINISTRATIVE_PRIVILEGES_ATTACHED

IAM 政策是向用户、群组或角色授予权限的方式。建议授予最小权限(即仅授予执行任务所需的权限),这也是标准的安全建议。确定用户需要执行哪些操作,然后为他们制定政策,让用户执行这些任务,而不是授予完整的管理员权限。

建议:确保未关联允许完整“*:*”管理员权限的 IAM 政策

如需修复此发现结果,请完成以下步骤:

AWS 控制台

如需解除具有完整管理员权限的政策的关联,请执行以下操作:

  1. 登录 AWS 管理控制台并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
  2. 在导航窗格中,点击“政策”,然后搜索在审核步骤中找到的政策名称。
  3. 选择需要删除的政策。
  4. 在政策操作菜单中,选择前 Detach
  5. 选择已附加此政策的所有用户、群组和角色
  6. 点击 Detach Policy
  7. 在政策操作菜单中,选择 Detach

AWS CLI

执行以下操作,分离具有审核步骤中发现的完整管理权限的政策:

  1. 列出已附加指定的托管式政策的所有 IAM 用户、群组和角色。
 aws iam list-entities-for-policy --policy-arn <policy_arn>
  1. 从所有 IAM 用户分离政策:
 aws iam detach-user-policy --user-name <iam_user> --policy-arn <policy_arn>
  1. 从所有 IAM 组分离政策:
 aws iam detach-group-policy --group-name <iam_group> --policy-arn <policy_arn>
  1. 从所有 IAM 角色中分离该政策:
 aws iam detach-role-policy --role-name <iam_role> --policy-arn <policy_arn>

了解此发现结果类型支持的资产和扫描设置

Iam Users Receive Permissions Groups

API 中的类别名称:IAM_USERS_RECEIVE_PERMISSIONS_GROUPS

IAM 用户可通过 IAM 政策获得对服务、函数和数据的访问权限。定义用户政策的方法有四种:1) 直接修改用户政策(即内嵌政策或用户政策);2) 直接将政策附加到用户;3) 将用户添加到具有附加政策的 IAM 群组;4) 将用户添加到具有内嵌政策的 IAM 群组。

建议仅采用第三种实现方式。

建议:确保 IAM 用户仅通过群组接收权限

请执行以下操作以创建 IAM 组并向其分配政策:

  1. 登录 AWS 管理控制台并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
  2. 在导航窗格中,点击 Groups,然后点击 Create New Group
  3. Group Name 框中,输入群组的名称,然后点击 Next Step
  4. 在政策列表中,选中您要应用于所有群组成员的每个政策对应的复选框。然后点击 Next Step
  5. 点击 Create Group

若要将用户添加到给定群组,请执行以下操作:

  1. 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
  2. 在导航窗格中,点击 Groups
  3. 选择要添加用户的目标群组
  4. 点击 Add Users To Group
  5. 选择要添加到群组的用户
  6. 点击 Add Users

执行以下操作,取消用户和政策之间的直接关联:

  1. 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
  2. 在左侧导航窗格中,点击“用户”
  3. 对于每位用户:
    - 选择用户
    - 点击“Permissions”标签页
    - 展开 Permissions policies
    - 点击各项政策对应的X;然后点击“分离”或“移除”(具体取决于政策类型)

了解此发现结果类型支持的资产和扫描设置

Iam User Group Membership Check

API 中的类别名称:IAM_USER_GROUP_MEMBERSHIP_CHECK

为了遵循 IAM 安全最佳实践,IAM 用户应始终是 IAM 群组的成员。

通过将用户添加到群组,您可以为不同类型的用户共享政策。

建议:检查 IAM 用户是否至少是一个 IAM 群组的成员

如需修复此发现结果,请完成以下步骤:

Terraform

resource "aws_iam_user" "example" {
  name = "test-iam-user"
  path = "/users/dev/"
}

resource "aws_iam_group" "example" {
  name = "Developers"
  path = "/users/dev/"
}

resource "aws_iam_user_group_membership" "example" {
  user   = aws_iam_user.example.name
  groups = [aws_iam_group.example.name]
}

AWS 控制台

当您使用 AWS 管理控制台删除 IAM 用户时,IAM 会自动为您删除以下信息:

  1. 用户
  2. 任何用户群组成员资格 - 也就是说,用户会从用户所属的任何 IAM 用户群组中移除
  3. 与用户关联的任何密码
  4. 属于用户的任何访问密钥
  5. 用户中嵌入的所有内嵌政策(通过用户组权限应用于用户的政策不受影响)

如需删除 IAM 用户,请执行以下操作:

  1. 登录 AWS 管理控制台,并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
  2. 在导航窗格中,选择“用户”,然后选中要删除的用户名的旁边的复选框。
  3. 在页面顶部,选择“删除”。
  4. 在确认对话框中的文本输入字段中输入用户名,以确认删除该用户。
  5. 选择“删除”。

如需将用户添加到 IAM 用户组,请执行以下操作:

  1. 登录 AWS 管理控制台,并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
  2. 在导航窗格中,选择“用户群组”,然后选择群组名称。
  3. 选择“用户”标签页,然后选择“添加用户”。选中要添加的用户旁边的复选框。
  4. 选择“添加用户”。

AWS CLI

与 Amazon Web Services 管理控制台不同,以编程方式删除用户时,您必须手动删除附加到该用户的项目,否则删除失败。

在尝试删除用户之前,请先移除以下内容:

  1. 密码 (DeleteLoginProfile)
  2. 访问密钥 ( DeleteAccessKey )
  3. 签名证书 (DeleteSigningCertificate)
  4. SSH 公钥 ( DeleteSSHPublicKey )
  5. Git 凭据 ( DeleteServiceSpecificCredential )
  6. 多重身份验证 (MFA) 设备( DisallowMFADevice 、 DeleteVirtualMFADevice )
  7. 内嵌政策 (DeleteUserPolicy)
  8. 附加的受管政策 (DetachUserPolicy)
  9. 群组成员资格 ( RemoveUserFromGroup )

如需删除用户,请在删除与用户关联的所有内容后执行以下操作:

aws iam delete-user \
  --user-name "test-user"

如需将 IAM 用户添加到 IAM 群组,请执行以下操作:

aws iam add-user-to-group \
  --group-name "test-group"
  --user-name "test-user"

了解此发现结果类型的 支持的资源和扫描设置

Iam User Mfa Enabled

API 中的类别名称:IAM_USER_MFA_ENABLED

多重身份验证 (MFA) 是一种最佳做法,可在用户名和密码的基础上增添一道额外的安全屏障。启用多重身份验证后,当用户登录 AWS 管理控制台时,必须提供由已注册的虚拟或实体设备提供的限时身份验证码。

建议:检查 AWS IAM 用户是否启用了多重身份验证 (MFA)

如需修复此发现结果,请完成以下步骤:

Terraform

对于 Terraform,您可以通过以下几种方式来解决 MFA 设备缺失的问题。您可能已经有了合理的结构,可以将用户划分到各个群组和限制性政策中。

以下示例展示了如何执行以下操作:

  1. 创建用户。
  2. 使用 PGP 公钥创建用户登录个人资料。
  3. 创建允许自行管理 IAM 个人资料的群组和群组政策。
  4. 将用户附加到群组。
  5. 为用户创建虚拟 MFA 设备。
  6. 向每位用户提供输出二维码和密码。
variable "users" {
  type = set(string)
  default = [
    "test@example.com",
    "test2@example.com"
  ]
}

resource "aws_iam_user" "test_users" {
  for_each = toset(var.users)
  name     = each.key
}

resource "aws_iam_user_login_profile" "test_users_profile" {
  for_each                = var.users
  user                    = each.key
  # Key pair created using GnuPG, this is the public key
  pgp_key = file("path/to/gpg_pub_key_base64.pem")
  password_reset_required = true
  lifecycle {
    ignore_changes = [
      password_length,
      password_reset_required,
      pgp_key,
    ]
  }
}

resource "aws_iam_virtual_mfa_device" "test_mfa" {
  for_each                = toset(var.users)
  virtual_mfa_device_name = each.key
}

resource "aws_iam_group" "enforce_mfa_group" {
  name = "EnforceMFAGroup"
}

resource "aws_iam_group_membership" "enforce_mfa_group_membership" {
  name  = "EnforceMFAGroupMembership"
  group = aws_iam_group.enforce_mfa_group.name
  users = [for k in aws_iam_user.test_users : k.name]
}

resource "aws_iam_group_policy" "enforce_mfa_policy" {
  name   = "EnforceMFAGroupPolicy"
  group  = aws_iam_group.enforce_mfa_group.id
  policy = <<POLICY
{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Sid": "AllowViewAccountInfo",
        "Effect": "Allow",
        "Action": [
            "iam:GetAccountPasswordPolicy",
            "iam:ListVirtualMFADevices"
        ],
        "Resource": "*"
    },
    {
        "Sid": "AllowManageOwnPasswords",
        "Effect": "Allow",
        "Action": [
            "iam:ChangePassword",
            "iam:GetUser"
        ],
        "Resource": "arn:aws:iam::*:user/$${aws:username}"
    },
    {
        "Sid": "AllowManageOwnAccessKeys",
        "Effect": "Allow",
        "Action": [
            "iam:CreateAccessKey",
            "iam:DeleteAccessKey",
            "iam:ListAccessKeys",
            "iam:UpdateAccessKey"
        ],
        "Resource": "arn:aws:iam::*:user/$${aws:username}"
    },
    {
        "Sid": "AllowManageOwnSigningCertificates",
        "Effect": "Allow",
        "Action": [
            "iam:DeleteSigningCertificate",
            "iam:ListSigningCertificates",
            "iam:UpdateSigningCertificate",
            "iam:UploadSigningCertificate"
        ],
        "Resource": "arn:aws:iam::*:user/$${aws:username}"
    },
    {
        "Sid": "AllowManageOwnSSHPublicKeys",
        "Effect": "Allow",
        "Action": [
            "iam:DeleteSSHPublicKey",
            "iam:GetSSHPublicKey",
            "iam:ListSSHPublicKeys",
            "iam:UpdateSSHPublicKey",
            "iam:UploadSSHPublicKey"
        ],
        "Resource": "arn:aws:iam::*:user/$${aws:username}"
    },
    {
        "Sid": "AllowManageOwnGitCredentials",
        "Effect": "Allow",
        "Action": [
            "iam:CreateServiceSpecificCredential",
            "iam:DeleteServiceSpecificCredential",
            "iam:ListServiceSpecificCredentials",
            "iam:ResetServiceSpecificCredential",
            "iam:UpdateServiceSpecificCredential"
        ],
        "Resource": "arn:aws:iam::*:user/$${aws:username}"
    },
    {
        "Sid": "AllowManageOwnVirtualMFADevice",
        "Effect": "Allow",
        "Action": [
            "iam:CreateVirtualMFADevice",
            "iam:DeleteVirtualMFADevice"
        ],
        "Resource": "arn:aws:iam::*:mfa/$${aws:username}"
    },
    {
        "Sid": "AllowManageOwnUserMFA",
        "Effect": "Allow",
        "Action": [
            "iam:DeactivateMFADevice",
            "iam:EnableMFADevice",
            "iam:ListMFADevices",
            "iam:ResyncMFADevice"
        ],
        "Resource": "arn:aws:iam::*:user/$${aws:username}"
    },
    {
        "Sid": "DenyAllExceptListedIfNoMFA",
        "Effect": "Deny",
        "NotAction": [
            "iam:CreateVirtualMFADevice",
            "iam:EnableMFADevice",
            "iam:GetUser",
            "iam:ListMFADevices",
            "iam:ListVirtualMFADevices",
            "iam:ResyncMFADevice",
            "sts:GetSessionToken"
        ],
        "Resource": "*",
        "Condition": {
            "BoolIfExists": {
                "aws:MultiFactorAuthPresent": "false"
            }
        }
    }
  ]
}
POLICY
}

output "user_password_map" {
  # Outputs a map in the format {"test@example.com": <PGPEncryptedPassword>, "test2@example.com": <PGPEncryptedPassword>}
  value = { for k, v in aws_iam_user_login_profile.test_users_profile : k => v.password }
}

output "user_qr_map" {
  # Outputs a map in the format {"test@example.com": <QRCode>, "test2@example.com": <QRCode>}
  value = { for k, v in aws_iam_virtual_mfa_device.test_mfa : k => v.qr_code_png }
}

AWS 控制台

如需为具有 AWS 控制台访问权限的任何用户账号启用 MFA,请参阅 AWS 文档中的启用虚拟多重身份验证 (MFA) 设备(控制台)

AWS CLI

创建 MFA 设备

aws iam create-virtual-mfa-device \
  --virtual-mfa-device-name "test@example.com" \
  --outfile ./QRCode.png \
  --bootstrap-method QRCodePNG

为现有用户启用 MFA 设备

aws iam enable-mfa-device \
  --user-name "test@example.com" \
  --serial-number "arn:aws:iam::123456976749:mfa/test@example.com" \
  --authentication-code1 123456 \
  --authentication-code2 654321

了解此发现结果类型支持的资产和扫描设置

Iam User Unused Credentials Check

API 中的类别名称:IAM_USER_UNUSED_CREDENTIALS_CHECK

这将检查过去 90 天内未使用的任何 IAM 密码或有效访问密钥。

建议您移除、停用或轮替所有 90 天或更长时间未使用的凭据。这样可以缩短与被盗用或被废弃的账号关联的凭据被使用的时机。

建议:检查是否所有 AWS IAM 用户都有未在 maxCredentialUsageAge 天(默认值为 90)内使用过的密码或有效访问密钥

如需修复此发现结果,请完成以下步骤:

Terraform

如需移除通过 Terraform 创建的已过期的访问密钥,请从模块中移除 aws_iam_access_key 资源并应用更改。

如需重置 IAM 用户登录密码,请在运行 terraform apply 时使用 -replace

假设以下用户登录个人资料

resource "aws_iam_user" "example" {
  name          = "test@example.com"
  path          = "/users/"
  force_destroy = true
}

resource "aws_iam_user_login_profile" "example" {
  user    = aws_iam_user.example.name
  pgp_key = "keybase:some_person_that_exists"
}

运行以下命令以重置用户的登录个人资料密码

terraform apply -replace="aws_iam_user_login_profile.example"

AWS 控制台

如需停用非活跃账号的凭据,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
  2. 选择“用户”。
  3. 选择凭据的使用时间超过 90 天/上次使用时间超过 90 天的用户的名称。
  4. 选择“安全凭据”。
  5. 对于至少 90 天内未使用的每个登录凭据和访问密钥,请选择“设为无效”。

如需要求控制台用户在下次登录时设置新密码,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
  2. 选择“用户”。
  3. 选择凭据的使用时间超过 90 天/上次使用时间超过 90 天的用户的名称。
  4. 选择“安全凭据”。
  5. 在“登录凭据和控制台密码”下,选择“管理”。
  6. 设置新密码(自动生成的密码或自定义密码)。
  7. 勾选“要求重设密码”对应的复选框。
  8. 选择“应用”。

AWS CLI

停用访问密钥

aws iam update-access-key \
  --access-key-id <value> \
  --status "Inactive"

删除访问密钥

aws iam delete-access-key \
  --access-key-id <value>

重置用户登录个人资料密码

aws iam update-login-profile \
  --user-name "test@example.com" \
  --password <temporary_password> \
  --password-reset-required

了解此发现结果类型的 支持的资源和扫描设置

Kms Cmk Not Scheduled For Deletion

API 中的类别名称:KMS_CMK_NOT_SCHEDULED_FOR_DELETION

此控件会检查 KMS 密钥是否已被安排删除。如果计划删除 KMS 密钥,控制将失败。

KMS 密钥一经删除,便无法恢复。如果使用 KMS 密钥删除,使用 KMS 密钥加密的数据也永远无法恢复。如果有重要数据已使用已安排删除的 KMS 密钥加密,请考虑解密这些数据或使用新的 KMS 密钥对这些数据重新加密,除非您有意执行加密擦除。

计划删除 KMS 密钥时,系统会强制执行强制性等待期,以便有时间撤消删除操作(如果安排错误的话)。默认等待期为 30 天,但在安排删除 KMS 密钥时,最短可缩短至 7 天。在等待期内,您可以取消预定的删除操作,并且系统不会删除 KMS 密钥。

如需详细了解如何删除 KMS 密钥,请参阅《AWS Key Management Service 开发者指南》中的删除 KMS 密钥

建议:检查是否所有 CMK 都未安排删除

如需取消安排的 KMS 密钥删除操作,请参阅《AWS Key Management Service 开发者指南》中的“在‘安排和取消密钥删除操作’下取消密钥删除操作”

了解此发现结果类型的 支持的资源和扫描设置

Lambda Concurrency Check

API 中的类别名称:LAMBDA_CONCURRENCY_CHECK

检查 Lambda 函数是否配置了函数级并发执行限制。如果 Lambda 函数未配置函数级并发执行限制,则规则为 NON_COMPLIANT。

建议:检查 Lambda 函数是否配置了函数级并发执行限制

要配置函数级并发执行限制,请参阅 AWS Lambda 文档中的配置预留并发设置

了解此发现结果类型支持的资产和扫描设置

Lambda Dlq Check

API 中的类别名称:LAMBDA_DLQ_CHECK

检查 Lambda 函数是否配置了死信队列。如果 Lambda 函数未配置死信队列,则规则的状态为 NON_COMPLIANT。

建议:检查 Lambda 函数是否配置了死信队列

如需更新 Lambda 函数以使用 DLQ,请参阅 AWS 文档中的死信队列

了解此发现结果类型支持的资产和扫描设置

Lambda Function Public Access Prohibited

API 中的类别名称:LAMBDA_FUNCTION_PUBLIC_ACCESS_PROHIBITED

AWS 最佳实践建议不要公开公开 Lambda 函数。此政策会检查在您的账号内所有已启用区域中部署的所有 Lambda 函数;如果它们被配置为允许公开访问,这些函数将会失败。

建议:检查与 Lambda 函数关联的政策是否禁止公开访问

如需修复此发现结果,请完成以下步骤:

Terraform

以下示例展示了如何使用 Terraform 预配限制对 Lambda 函数的访问权限的 IAM 角色,并将该角色附加到 Lambda 函数

resource "aws_iam_role" "iam_for_lambda" {
  name = "iam_for_lambda"

  assume_role_policy = <<EOF
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Effect": "Allow",
      "Sid": ""
    }
  ]
}
EOF
}

resource "aws_lambda_function" "test_lambda" {
  filename      = "lambda_function_payload.zip"
  function_name = "lambda_function_name"
  role          = aws_iam_role.iam_for_lambda.arn
  handler       = "index.test"

  source_code_hash = filebase64sha256("lambda_function_payload.zip")

  runtime = "nodejs12.x"

}

AWS 控制台

如果 Lambda 函数未通过此控制,则表示 Lambda 函数基于资源的政策声明允许公开访问。

如需解决此问题,您必须更新政策以移除相应权限或添加 AWS:SourceAccount 条件。您只能通过 Lambda API 更新基于资源的政策。

以下说明使用控制台查看政策,并使用 AWS 命令行界面移除权限。

查看 Lambda 函数的基于资源的政策

  1. 访问 https://console.aws.amazon.com/lambda/,打开 AWS Lambda 控制台。
  2. 在导航窗格中,选择“函数”。
  3. 选择相应函数。
  4. 选择“权限”。基于资源的政策会显示当其他账号或 AWS 服务尝试访问该函数时应用的权限。
  5. 检查基于资源的政策。
  6. 找到包含公开政策的“主账号”字段值的政策声明。例如,允许 "*"{ "AWS": "*" }

您无法通过控制台修改政策。如需从函数中移除权限,请使用 AWS CLI 中的 remove-permission 命令。

记下要移除的对账单的对账单 ID (Sid) 的值。

AWS CLI

如需使用 CLI 从 Lambda 函数中移除权限,请按如下所示发出 remove-permission 命令。

aws lambda remove-permission \
--function-name <value> \
--statement-id <value>

了解此发现结果类型支持的资产和扫描设置

Lambda Inside Vpc

API 中的类别名称:LAMBDA_INSIDE_VPC

检查 Lambda 函数是否在 VPC 中。您可能会看到 Lambda@Edge 资源的失败发现结果。

它不会评估 VPC 子网路由配置以确定公开可达性。

建议:检查 VPC 中是否存在 Lambda 函数

如需修复此发现结果,请完成以下步骤:

AWS 控制台

如需将函数配置为连接到您账号中的虚拟私有云 (VPC) 中的专用子网,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/lambda/ 打开 AWS Lambda 控制台。
  2. 前往“函数”,然后选择您的 Lambda 函数。
  3. 滚动到“网络”,然后选择满足该函数连接要求的 VPC。
  4. 如需在高可用性模式下运行函数,Security Hub 建议您至少选择两个子网。
  5. 请至少选择一个符合函数连接要求的安全群组。
  6. 选择“保存”。

如需了解详情,请参阅 AWS Lambda 开发者指南中有关配置 Lambda 函数以访问 VPC 中资源的部分。

了解此发现结果类型支持的资产和扫描设置

Mfa Delete Enabled S3 Buckets

API 中的类别名称:MFA_DELETE_ENABLED_S3_BUCKETS

为敏感和已分类的 S3 存储桶启用 MFA 删除功能后,用户需要进行两种形式的身份验证。

建议:确保已针对 S3 存储分区启用 MFA 删除功能

请按以下步骤为 S3 存储桶启用多重身份验证删除功能。

注意:
-您无法使用 AWS Management Console 启用多重身份验证删除功能。您必须使用 AWS CLI 或 API。
-您必须使用“root”账号才能在 S3 存储桶上启用多重身份验证删除功能。

通过命令行

  1. 运行 s3api put-bucket-versioning 命令
aws s3api put-bucket-versioning --profile my-root-profile --bucket Bucket_Name --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa “arn:aws:iam::aws_account_id:mfa/root-account-mfa-device passcode”

了解此发现结果类型的 支持的资源和扫描设置

Mfa Enabled Root User Account

API 中的类别名称:MFA_ENABLED_ROOT_USER_ACCOUNT

“根”user account 是 AWS 账号中最具特权的用户。多重身份验证 (MFA) 在用户名和密码的基础上增加了一层额外的保护。启用 MFA 后,当用户登录 AWS 网站时,系统将提示他们输入用户名和密码,以及来自 AWS MFA 设备的身份验证代码。

注意:将虚拟 MFA 用于“root”时账号,最好不要使用个人设备,而是使用专门的移动设备(平板电脑或手机),这种设备可以独立于任何个人设备保持充电和安全性。(“非个人虚拟 MFA”)可降低因设备丢失、设备以旧换新或拥有设备的个人不再在公司工作而失去 MFA 访问权限的风险。

建议:确保为“root”启用 MFA用户账号

若要为“root”用户账号设置多重身份验证 (MFA),请执行以下操作:

  1. 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

注意:管理“root”权限的 MFA 设备则必须使用“root”账号凭据登录 AWS。您无法管理“root”权限的 MFA 设备使用其他凭据登录

  1. 选择 Dashboard,然后在 Security Status 下展开根账号的 Activate MFA
  2. 选择 Activate MFA
  3. 在向导中,选择 A virtual MFA 设备,然后选择 Next Step
  4. IAM 会为虚拟 MFA 设备生成并显示配置信息,包括二维码图片。此图显示了“秘密配置密钥”,可在不支持二维码的设备上手动输入。
  5. 打开您的虚拟 MFA 应用。(如需查看可用于托管虚拟多重身份验证 (MFA) 设备的应用列表,请参阅虚拟 MFA 应用。)如果虚拟 MFA 应用支持多个账号(多台虚拟 MFA 设备),请选择创建新账号(新的虚拟 MFA 设备)的选项。
  6. 确定 MFA 应用是否支持二维码,然后执行以下操作之一:
  • 使用该应用扫描二维码。例如,您可以选择摄像头图标或选择“扫描二维码”之类的选项,然后使用设备的摄像头扫描二维码。
  • 在“Manage MFA Device”(管理 MFA 设备)向导中,选择“Show secret key”(显示密钥)以进行手动配置,然后在 MFA 应用中键入密钥配置密钥。

完成后,虚拟多重身份验证 (MFA) 设备会开始生成动态密码。

在“管理多重身份验证设备”向导的“身份验证码 1”框中,输入虚拟 MFA 设备中当前显示的一次性密码。等待最多 30 秒,以便设备生成新的动态密码。然后,在“Authentication Code 2”(身份验证码 2)框中输入第二个一次性密码。选择“分配虚拟身份验证器”。

了解此发现结果类型支持的资产和扫描设置

Multi Factor Authentication Mfa Enabled All Iam Users Console

API 中的类别名称:MULTI_FACTOR_AUTHENTICATION_MFA_ENABLED_ALL_IAM_USERS_CONSOLE

除了传统凭据之外,多重身份验证 (MFA) 还提供了额外的身份验证保障。启用多重身份验证后,当用户登录 AWS 控制台时,系统会提示他们输入用户名和密码,以及实体或虚拟 MFA 令牌中的身份验证码。建议为所有具有控制台密码的账号启用多重身份验证 (MFA)。

建议:确保为拥有控制台密码的所有 IAM 用户启用多重身份验证 (MFA)

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台并在“https://console.aws.amazon.com/iam/”上打开 IAM 控制台
  2. 在左侧窗格中,选择 Users
  3. User Name 列表中,选择要设置多重身份验证的用户的名称。
  4. 选择 Security Credentials 标签页,然后选择 Manage MFA Device
  5. Manage MFA Device wizard 中,选择 Virtual MFA 设备,然后选择 Continue

IAM 会生成并显示虚拟 MFA 设备的配置信息,包括二维码图形。此图显示了“秘密配置密钥”,可在不支持二维码的设备上手动输入。

  1. 打开您的虚拟 MFA 应用。(如需查看可用于托管虚拟 MFA 设备的应用列表,请访问 https://aws.amazon.com/iam/details/mfa/#Virtual_MFA_Applications,查看虚拟 MFA 应用)。如果虚拟 MFA 应用支持多个账号(多个虚拟 MFA 设备),请选择用于创建新账号(新虚拟 MFA 设备)的选项。
  2. 确定 MFA 应用是否支持二维码,然后执行以下操作之一:
  • 使用该应用扫描二维码。例如,您可以选择摄像头图标或选择“扫描二维码”之类的选项,然后使用设备的摄像头扫描二维码。
  • 在“Manage MFA Device”(管理 MFA 设备)向导中,选择“Show secret key”(显示密钥)以进行手动配置,然后在 MFA 应用中键入密钥配置密钥。

配置完成后,虚拟 MFA 设备便会开始生成动态密码。

  1. Manage MFA Device wizardMFA Code 1 box 中,输入虚拟 MFA 设备中当前显示的 one-time password。最多等待 30 秒,以便设备生成新的动态密码。然后,在 MFA Code 2 box 中输入第二个 one-time password

  2. 点击 Assign MFA

了解此发现结果类型支持的资产和扫描设置

No Network Acls Allow Ingress 0 0 0 0 Remote Server Administration

API 中的类别名称:NO_NETWORK_ACLS_ALLOW_INGRESS_0_0_0_0_REMOTE_SERVER_ADMINISTRATION

网络访问控制列表 (NACL) 函数可对到达和离开 AWS 资源的网络流量进行无状态过滤。建议使用 TDP (6)、UDP (17) 或 ALL (-1) 协议,任何 NACL 都允许对远程服务器管理端口(例如通过 SSH 连接到端口 22 和 RDP 到端口 3389)进行不受限制的入站流量访问

建议:确保任何网络 ACL 都不允许从 0.0.0.0/0 到远程服务器管理端口的入站流量

如需修复此发现结果,请完成以下步骤:

AWS 控制台

请执行以下操作:
1. 访问 https://console.aws.amazon.com/vpc/home,登录 AWS 管理控制台
2.在左侧窗格中,点击 Network ACLs
3. 对于要修复的每个网络 ACL,请执行以下操作:
- 选择网络 ACL
- 点击 Inbound Rules 标签页
- 点击 Edit inbound rules
- 执行以下任一操作:A) 将“来源”字段更新为 0.0.0.0/0 以外的范围,或 B) 点击 Delete 移除有问题的入站规则
- 点击 Save

了解此发现结果类型的 支持的资源和扫描设置

No Root User Account Access Key Exists

API 中的类别名称:NO_ROOT_USER_ACCOUNT_ACCESS_KEY_EXISTS

“根”user account 是 AWS 账号中最具特权的用户。AWS 访问密钥提供对给定 AWS 账号的编程访问。建议将与“root”权限相关的所有访问密钥用户账号。

建议:确保不存在“root”用户账号访问密钥

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 以“root”身份登录 AWS 管理控制台并通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
  2. 点击右上角的 <root_account>,然后从下拉列表中选择 My Security Credentials
  3. 在弹出式窗口中,点击 Continue to Security Credentials
  4. 点击 Access Keys(访问密钥 ID 和私有访问密钥)。
  5. Status 列下(如果有任何有效的按键)。
  6. 点击 Delete(注意:已删除的密钥无法恢复)。

注意:虽然您可以将密钥设为无效,但此无效密钥仍会在审核过程中的 CLI 命令中显示,并可能会导致密钥被误标记为不合规。

了解此发现结果类型支持的资产和扫描设置

No Security Groups Allow Ingress 0 0 0 0 Remote Server Administration

API 中的类别名称:NO_SECURITY_GROUPS_ALLOW_INGRESS_0_0_0_0_REMOTE_SERVER_ADMINISTRATION

安全群组可对传入和传出 AWS 资源的网络流量进行有状态过滤。建议任何安全群组都不允许通过 TDP (6)、UDP (17) 或 ALL (-1) 协议,允许对远程服务器管理端口(例如通过 SSH 连接到端口 22 和 RDP 到端口 3389)进行不受限制的入站流量访问

建议:确保任何安全群组都不允许从 0.0.0.0/0 到远程服务器管理端口的入站流量

执行以下操作以实现指定状态:

  1. 前往 https://console.aws.amazon.com/vpc/home 登录 AWS 管理控制台
  2. 在左侧窗格中,点击 Security Groups
  3. 对于每个安全群组,请执行以下操作:
  4. 选择安全群组
  5. 点击 Inbound Rules 标签页
  6. 点击 Edit inbound rules 按钮
  7. 确定要修改或移除的规则
  8. 请执行以下操作之一:A) 将“来源”字段更新为 0.0.0.0/0 以外的范围,或 B) 点击 Delete 以移除有问题的入站规则
  9. 点击 Save rules

了解此发现结果类型的 支持的资源和扫描设置

No Security Groups Allow Ingress 0 Remote Server Administration

API 中的类别名称:NO_SECURITY_GROUPS_ALLOW_INGRESS_0_REMOTE_SERVER_ADMINISTRATION

安全群组可对传入和传出 AWS 资源的网络流量进行有状态过滤。建议任何安全群组都不允许对远程服务器管理端口(例如 SSH 到端口 22 和 RDP 到端口 3389)进行不受限制的入站访问。

建议:确保任何安全群组都不允许从 ::/0 传输到远程服务器管理端口的入站流量

执行以下操作以实现指定状态:

  1. 前往 https://console.aws.amazon.com/vpc/home 登录 AWS 管理控制台
  2. 在左侧窗格中,点击 Security Groups
  3. 对于每个安全群组,请执行以下操作:
  4. 选择安全群组
  5. 点击 Inbound Rules 标签页
  6. 点击 Edit inbound rules 按钮
  7. 确定要修改或移除的规则
  8. 请执行以下操作之一:A) 将“来源”字段更新为 ::/0 以外的范围,或 B) 点击 Delete 以移除有问题的入站规则
  9. 点击 Save rules

了解此发现结果类型的 支持的资源和扫描设置

One Active Access Key Available Any Single Iam User

API 中的类别名称:ONE_ACTIVE_ACCESS_KEY_AVAILABLE_ANY_SINGLE_IAM_USER

访问密钥是 IAM 用户或 AWS 账号“root”用户的长期凭据。您可以使用访问密钥对发送到 AWS CLI 或 AWS API 的程序化请求进行签名(直接或使用 AWS SDK)

建议:确保任何单个 IAM 用户只有一个有效的访问密钥

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台,然后导航到 https://console.aws.amazon.com/iam/ 的 IAM 信息中心。
  2. 在左侧导航面板中,选择 Users
  3. 点击您要检查的 IAM 用户名。
  4. 在 IAM 用户配置页面上,选择 Security Credentials 标签页。
  5. Access Keys 部分中,选择一个存在时间少于 90 天的访问密钥。这应该是此 IAM 用户用于以编程方式访问 AWS 资源的唯一有效密钥。测试您的应用,确保所选的访问密钥有效。
  6. 在同一 Access Keys 部分中,找到您的非操作性访问密钥(除所选的访问密钥之外),然后点击 Make Inactive 链接将其停用。
  7. 如果您收到 Change Key Status 确认框,请点击 Deactivate 关闭所选按键。
  8. 针对您 AWS 账号中的每个 IAM 用户重复第 3-7 步。

AWS CLI

  1. 使用 Audit CLI 中提供的 IAM 用户和访问密钥信息,选择一个存在时间少于 90 天的访问密钥。该密钥应该是此 IAM 用户在以编程方式访问 AWS 资源时使用的唯一有效密钥。测试您的应用,确保所选的访问密钥有效。

  2. 使用 IAM 用户名和非操作的访问密钥 ID 运行以下 update-access-key 命令,以停用不必要的密钥。查看“审核”部分,找出所选 IAM 用户的不需要的访问密钥 ID

注意 - 该命令不会返回任何输出:

aws iam update-access-key --access-key-id <access-key-id> --status Inactive --user-name <user-name>
  1. 如需确认所选访问密钥对是否已成功 deactivated,请再次为该 IAM 用户运行 list-access-keys 审核命令:
aws iam list-access-keys --user-name <user-name>
  • 该命令的输出应显示与 IAM 用户关联的每个访问密钥的元数据。如果非操作密钥对 Status 设为 Inactive,则密钥已成功停用,并且 IAM 用户访问权限配置现在会遵循此建议。
  1. 重复第 5 步您的 AWS 账号中的每个 IAM 用户为 1 - 3 项。

了解此发现结果类型支持的资产和扫描设置

Public Access Given Rds Instance

API 中的类别名称:PUBLIC_ACCESS_GIVEN_RDS_INSTANCE

请确保并验证您在 AWS 账号中预配的 RDS 数据库实例确实限制了未经授权的访问,以尽可能降低安全风险。如需限制对任何可公开访问的 RDS 数据库实例的访问,您必须停用数据库“可公开访问”标志,并更新与实例关联的 VPC 安全组。

建议:确保没有向 RDS 实例提供公开访问权限

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/rds/ 前往 RDS 信息中心。
  2. 在导航面板下,点击“RDS 信息中心”中的 Databases
  3. 选择要更新的 RDS 实例。
  4. 点击信息中心顶部菜单中的 Modify
  5. 在“修改数据库实例”面板上的 Connectivity 部分下,点击 Additional connectivity configuration 并将 Publicly Accessible 的值更新为“不可公开访问”,以限制公开访问。如需更新子网配置,请按以下步骤操作:
    - 选择 Connectivity and security 标签页,然后点击 Networking 部分中的 VPC 属性值。
    - 从 VPC 信息中心底部面板中选择 Details 标签页,然后点击“路由表配置属性值”。
    - 在路由表详细信息页面上,从信息中心底部面板中选择“路由”标签页,然后点击 Edit routes
    - 在“修改路线”页面上,更新设为 igw-xxxxx 的目标的“目的地”,然后点击 Save 路线。
  6. 在“修改数据库实例”面板中,点击 Continue,然后在“安排修改时间”部分,根据您的要求执行以下操作之一:
    - 选择“在下一个定期维护窗口期间应用”,以在下一个定期维护窗口期间自动应用更改。
    - 选择“立即应用”,立即应用更改。使用此选项,无论该 RDS 数据库实例的维护窗口设置如何,所有待处理的修改都会尽快异步应用。请注意,待处理修改队列中的所有更改也会应用。如果有任何待处理的修改需要停机,选择该选项可能导致应用程序意外停机。
  7. 对当前区域中可用的每个 RDS 实例重复第 3 步到第 6 步。
  8. 在导航栏中更改 AWS 区域,对其他区域重复此过程。

AWS CLI

  1. 运行 describe-db-instances 命令以列出所选 AWS 区域中可用的所有 RDS 数据库名称标识符:
aws rds describe-db-instances --region <region-name> --query 'DBInstances[*].DBInstanceIdentifier'
  1. 该命令的输出应返回每个数据库实例标识符。
  2. 运行 modify-db-instance 命令以修改所选的 RDS 实例配置。然后使用以下命令为所选 RDS 实例停用 Publicly Accessible 标志。此命令使用 apply-immediately 标志。如要使用 to avoid any downtime --no-apply-immediately flag can be used,请执行以下操作:
aws rds modify-db-instance --region <region-name> --db-instance-identifier <db-name> --no-publicly-accessible --apply-immediately
  1. 命令输出应在待处理值下显示 PubliclyAccessible 配置,并应在指定时间应用。
  2. 目前不支持通过 AWS CLI 更新互联网网关目的地。如需更新互联网网关的相关信息,请使用 AWS 控制台过程。
  3. 针对当前区域中预配的每个 RDS 实例重复第 1 步到第 5 步。
  4. 使用 --region 过滤条件更改 AWS 区域,对其他区域重复此过程。

了解此发现结果类型支持的资产和扫描设置

Rds Enhanced Monitoring Enabled

API 中的类别名称:RDS_ENHANCED_MONITORING_ENABLED

增强型监控通过在实例中安装的代理,针对 RDS 实例所运行的操作系统提供实时指标。

如需了解详情,请参阅使用增强型监控监控操作系统指标

建议:检查是否为所有 RDS 数据库实例启用了增强型监控

如需修复此发现结果,请完成以下步骤:

Terraform

要修复此控制措施,请在 RDS 实例上启用增强型监控,如下所示:

为 RDS 创建 IAM 角色:

resource "aws_iam_role" "rds_logging" {
  name = "CustomRoleForRDSMonitoring"
  assume_role_policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action = "sts:AssumeRole"
        Effect = "Allow"
        Sid    = "CustomRoleForRDSLogging"
        Principal = {
          Service = "monitoring.rds.amazonaws.com"
        }
      },
    ]
  })
}

检索适用于 RDS 增强监控的 AWS Managed Policy:

data "aws_iam_policy" "rds_logging" {
  name = "AmazonRDSEnhancedMonitoringRole"
}

将政策附加到角色:

resource "aws_iam_policy_attachment" "rds_logging" {
  name       = "AttachRdsLogging"
  roles      = [aws_iam_role.rds_logging.name]
  policy_arn = data.aws_iam_policy.rds_logging.arn
}

为违规的 RDS 实例定义监控间隔和监控角色 arn,以启用增强型监控:

resource "aws_db_instance" "default" {
  identifier           = "test-rds"
  allocated_storage    = 10
  engine               = "mysql"
  engine_version       = "5.7"
  instance_class       = "db.t3.micro"
  db_name              = "mydb"
  username             = "foo"
  password             = "foobarbaz"
  parameter_group_name = "default.mysql5.7"
  skip_final_snapshot  = true
  monitoring_interval  = 60
  monitoring_role_arn  = aws_iam_role.rds_logging.arn
}

AWS 控制台

您可以在创建数据库实例、多可用区数据库集群或读取副本,或者修改数据库实例或多可用区数据库集群时开启增强型监控。如果您修改数据库实例以启用增强型监控,则无需重启数据库实例即可使更改生效。

在“数据库”页面中执行以下某项操作时,您可以在 RDS 控制台中启用增强型监控:

  • 创建数据库实例或多可用区数据库集群 - 选择“创建数据库”。
  • 创建只读副本 - 依次选择“操作”和“创建只读副本”。
  • 修改数据库实例或多可用区数据库集群 - 选择“修改”。

如需在 RDS 控制台中开启或关闭增强型监控,请执行以下操作

  1. 滚动到“其他配置”。
  2. 在“监控”中,为您的数据库实例或读取副本选择“为数据库实例或读取副本启用增强型监控”。如需停用增强型监控,请选择“停用增强型监控”。
  3. 将 Monitoring Role 属性设置为您创建的 IAM 角色,以允许 Amazon RDS 为您与 Amazon CloudWatch Logs 通信,或选择“Default”让 RDS 为您创建名为 rds-monitoring-role 的角色。
  4. 将“Granularity”(精细程度)属性设置为为数据库实例或读取副本收集指标时各个数据点之间的间隔(以秒为单位)。粒度属性可以设置为以下值之一:1、5、10、15、30 或 60。RDS 控制台的刷新速度最快是每 5 秒刷新一次。如果您在 RDS 控制台中将粒度设置为 1 秒,您仍然只能看到每 5 秒更新一次的指标。您可以使用 CloudWatch Logs 检索 1 秒的指标更新。

AWS CLI

创建 RDS IAM 角色:

aws iam create-role \
  --role-name "CustomRoleForRDSMonitoring" \
  --assume-role-policy-document file://rds-assume-role.json

将政策 AmazonRDSEnhancedMonitoringRole 附加到角色:

aws iam attach-role-policy \
  --role-name "CustomRoleForRDSMonitoring"\
  --policy-arn "arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole"

修改 RDS 实例以启用增强型监控,方法是设置 --monitoring-interval--monitoring-role-arn

aws rds modify-db-instance \
  --db-instance-identifier "test-rds" \
  --monitoring-interval 30 \
  --monitoring-role-arn "arn:aws:iam::<account_id>:role/CustomRoleForRDSMonitoring"

了解此发现结果类型支持的资产和扫描设置

Rds Instance Deletion Protection Enabled

API 中的类别名称:RDS_INSTANCE_DELETION_PROTECTION_ENABLED

启用实例删除保护可额外防范数据库意外删除或被未经授权的实体删除。

启用删除保护后,无法删除 RDS 数据库实例。必须先停用删除保护,删除请求才能成功。

建议:检查是否所有 RDS 实例都启用了删除保护

如需修复此发现结果,请完成以下步骤:

Terraform

如需修复此控件,请在 aws_db_instance 资源中将 deletion_protection 设置为 true

resource "aws_db_instance" "example" {
  # ... other configuration ...
  deletion_protection = true
}

AWS 控制台

为 RDS 数据库实例启用删除保护

  1. 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
  2. 在导航窗格中,选择“数据库”,然后选择要修改的数据库实例。
  3. 选择“修改”。
  4. 在“删除防护”下,选择“启用删除防护”。
  5. 选择“继续”。
  6. 在“修改时间安排”下,选择何时应用修改。选项包括“在下一个预定的维护窗口期间应用”或“立即应用”。
  7. 选择“修改数据库实例”。

AWS CLI

AWS CLI 也是如此。按如下所示设置 --deletion-protection

aws rds modify-db-instance \
  --db-instance-identifier = "test-rds" \
  --deletion-protection

了解此发现结果类型的 支持的资源和扫描设置

Rds In Backup Plan

API 中的类别名称:RDS_IN_BACKUP_PLAN

此检查用于评估 Amazon RDS 数据库实例是否已纳入备份方案中。如果 RDS 数据库实例未纳入备份方案,则此控件会失败。

AWS Backup 是一项全代管式备份服务,可集中自动备份各种 AWS 服务中的数据。借助 AWS Backup,您可以创建名为备份方案的备份政策。您可以使用这些方案来定义备份要求,例如备份数据的频率以及备份的保留时长。将 RDS 数据库实例纳入备份方案有助于保护您的数据免遭意外丢失或删除。

建议:RDS 数据库实例应纳入备份方案中

如需修复此发现结果,请完成以下步骤:

Terraform

要修复此控件,请在 aws_db_instance 资源中将 backup_retention_period 设置为大于 7 的值。

resource "aws_db_instance" "example" {
  # ... other Configuration ...
  backup_retention_period = 7
}

AWS 控制台

立即启用自动备份

  1. 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
  2. 在导航窗格中,选择“数据库”,然后选择要修改的数据库实例。
  3. 选择“修改”以打开“修改数据库实例”页面。
  4. 在“备份保留期限”下,选择一个非零正值(例如 30 天),然后选择“继续”。
  5. 选择“修改时间安排”部分,然后选择何时应用修改:您可以选择“在下一个预定的维护期内应用”或“立即应用”。
  6. 然后,在确认页面上,选择“修改数据库实例”以保存更改并启用自动备份。

AWS CLI

这同样适用于 AWS CLI。如需启用自动备份,请将 backup-retention-period 更改为大于 0(默认值)的值。

aws rds modify-db-instance --db-instance-identifier "test-rds" --backup-retention-period 7

了解此发现结果类型支持的资产和扫描设置

Rds Logging Enabled

API 中的类别名称:RDS_LOGGING_ENABLED

这会检查 Amazon RDS 的以下日志是否已启用并发送到 CloudWatch。

RDS 数据库应启用相关日志。数据库日志记录会提供对 RDS 发出的请求的详细记录。数据库日志有助于审核安全性和访问审核,并且有助于诊断可用性问题。

建议:检查是否为所有 RDS 数据库实例启用了导出日志功能

如需修复此发现结果,请完成以下步骤:

Terraform

resource "aws_db_instance" "example" {
  # ... other configuration for MySQL ...
  enabled_cloudwatch_logs_exports = ["audit", "error", "general", "slowquery"]
  parameter_group_name            = aws_db_parameter_group.example.name
}

resource "aws_db_parameter_group" "example" {
  name   = "${aws_db_instance.example.dbInstanceIdentifier}-parameter-group"
  family = "mysql5.7"

  parameter {
    name  = "general_log"
    value = 1
  }

  parameter {
    name  = "slow_query_log"
    value = 1
  }

  parameter {
    name  = "log_output"
    value = "FILE"
  }
}

对于 MariaDB,还需要创建一个自定义选项组,并在 aws_db_instance 资源中设置 option_group_name

resource "aws_db_instance" "example" {
  # ... other configuration for MariaDB ...
  enabled_cloudwatch_logs_exports = ["audit", "error", "general", "slowquery"]
  parameter_group_name            = aws_db_parameter_group.example.name
  option_group_name               = aws_db_option_group.example.name
}

resource "aws_db_option_group" "example" {
  name                     = "mariadb-option-group-for-logs"
  option_group_description = "MariaDB Option Group for Logs"
  engine_name              = "mariadb"
  option {
    option_name = "MARIADB_AUDIT_PLUGIN"
    option_settings {
      name  = "SERVER_AUDIT_EVENTS"
      value = "CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL"
    }
  }
}

AWS 控制台

如需创建自定义数据库参数组,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
  2. 在导航窗格中,选择“参数组”。
  3. 选择“创建参数组”。
  4. 在“参数组族”列表中,选择一个数据库参数组族。
  5. 在“类型”列表中,选择“数据库参数组”。
  6. 在“组名称”中,输入新数据库参数组的名称。
  7. 在 说明 中,输入新数据库参数组的说明。
  8. 选择“创建”。

如需使用控制台为 MariaDB 日志记录创建新的选项组,请执行以下操作

  1. 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
  2. 在导航窗格中,选择“选项组”。
  3. 选择“创建群组”。
  4. 在“创建选项组”窗口中,提供以下内容:
    * 名称:在您的 AWS 账号中必须是唯一的。只能使用字母、数字和连字符。
    * 说明:仅用于显示目的。
    * 引擎:选择您的数据库引擎。
    * 主要引擎版本:选择数据库引擎的主要版本。
  5. 选择“创建”。
  6. 选择您刚刚创建的选项组的名称。
  7. 选择“添加”选项。
  8. 从“选项名称”列表中选择 MARIADB_AUDIT_PLUGIN。
  9. 将 SERVER_AUDIT_EVENTS 设置为 CONNECT、QUERY、TABLE、QUERY_DDL、QUERY_DML、QUERY_DCL。
  10. 选择“添加”选项。

从 AWS 管理控制台将 SQL Server DB、Oracle DB 或 PostgreSQL 日志发布到 CloudWatch Logs

  1. 访问 https://console.aws.amazon.com/rds/,打开 Amazon RDS 控制台。
  2. 在导航窗格中,选择“数据库”。
  3. 选择要修改的数据库实例。
  4. 选择“修改”。
  5. 在“日志导出”下,选择要开始发布到 CloudWatch 日志的所有日志文件。
  6. 日志导出功能仅适用于支持发布到 CloudWatch 日志的数据库引擎版本。
  7. 选择“继续”。然后,在摘要页面上,选择“修改数据库实例”。

如需将新的数据库参数组或数据库选项组应用于 RDS 数据库实例,请执行以下操作

  1. 访问 https://console.aws.amazon.com/rds/,打开 Amazon RDS 控制台。
  2. 在导航窗格中,选择“数据库”。
  3. 选择要修改的数据库实例。
  4. 选择“修改”。
  5. 在“数据库选项”下,根据需要更改数据库参数组和数据库选项组。
  6. 完成更改后,选择“继续”。查看修改摘要。
  7. 选择“修改数据库实例”以保存更改。

AWS CLI

检索引擎族,然后选择与数据库实例引擎和版本匹配的引擎族。

aws rds describe-db-engine-versions \
  --query "DBEngineVersions[].DBParameterGroupFamily" \
  --engine "mysql"

根据引擎和版本创建参数组。

aws rds create-db-parameter-group \
  --db-parameter-group-name "rds-mysql-parameter-group" \
  --db-parameter-group-family "mysql5.7" \
  --description "Example parameter group for logs"

根据数据库引擎创建一个包含必要参数的 rds-parameters.json 文件,此示例使用 MySQL5.7。

[
  {
    "ParameterName": "general_log",
    "ParameterValue": "1",
    "ApplyMethod": "immediate"
  },
  {
    "ParameterName": "slow_query_log",
    "ParameterValue": "1",
    "ApplyMethod": "immediate"
  },
  {
    "ParameterName": "log_output",
    "ParameterValue": "FILE",
    "ApplyMethod": "immediate"
  }
]

修改参数组,根据数据库引擎添加参数。本示例使用 MySQL5.7

aws rds modify-db-parameter-group \
  --db-parameter-group-name "rds-mysql-parameter-group" \
  --parameters file://rds-parameters.json

修改数据库实例以关联参数组。

aws rds modify-db-instance \
  --db-instance-identifier "test-rds" \
  --db-parameter-group-name "rds-mysql-parameter-group"

此外,对于 MariaDB,请按如下方式创建一个选项组。

aws rds create-option-group \
  --option-group-name "rds-mariadb-option-group" \
  --engine-name "mariadb" \
  --major-engine-version "10.6" \
  --option-group-description "Option group for MariaDB logs"

创建一个 rds-mariadb-options.json 文件,如下所示。

{
  "OptionName": "MARIADB_AUDIT_PLUGIN",
  "OptionSettings": [
    {
      "Name": "SERVER_AUDIT_EVENTS",
      "Value": "CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL"
    }
  ]
}

将选项添加到选项组。

aws rds add-option-to-option-group \
  --option-group-name "rds-mariadb-option-group" \
  --options file://rds-mariadb-options.json

通过修改 MariaDB 实例,将选项组关联到数据库实例。

aws rds modify-db-instance \
  --db-instance-identifier "rds-test-mariadb" \
  --option-group-name "rds-mariadb-option-group"

了解此发现结果类型支持的资产和扫描设置

Rds Multi Az Support

API 中的类别名称:RDS_MULTI_AZ_SUPPORT

RDS 数据库实例应配置为跨多个可用区 (AZ) 部署。这可确保所存储数据的可用性。在可用区可用性出现问题时以及在进行常规 RDS 维护期间,多可用区部署支持自动故障切换。

建议:检查是否为所有 RDS 数据库实例启用了高可用性

如需修复此发现结果,请完成以下步骤:

Terraform

要修复此控件,请在 aws_db_instance 资源中将 multi_az 设置为 true。

resource "aws_db_instance" "example" {
  # ... other configuration ...
  multi_az                = true
}

AWS 控制台

为数据库实例启用多个可用区

  1. 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
  2. 在导航窗格中,选择“数据库”,然后选择要修改的数据库实例。
  3. 选择“修改”。系统会显示“修改数据库实例”页面。
  4. 在“实例规范”下,将“多可用区部署”设置为“是”。
  5. 选择“继续”,然后查看修改摘要。
  6. (可选)选择“立即应用”以立即应用更改。在某些情况下,选择此选项可能会导致服务中断。如需了解详情,请参阅 Amazon RDS 用户指南中的“使用‘立即应用’设置”。
  7. 在确认页面上,查看您的更改。如果正确,请选择“修改数据库实例”以保存更改。

AWS CLI

AWS CLI 也是如此。通过提供 --multi-az 选项启用多 Az 支持。

modify-db-instance
  --db-instance-identifier "test-rds" \
  --multi-az

了解此发现结果类型支持的资产和扫描设置

Redshift Cluster Configuration Check

API 中的类别名称:REDSHIFT_CLUSTER_CONFIGURATION_CHECK

这会检查 Redshift 集群的基本元素:静态加密、日志记录和节点类型。

这些配置项对于维护安全且可观察的 Redshift 集群非常重要。

建议:检查是否所有 Redshift 集群都进行了静态加密、已启用日志记录且具有节点类型。

如需修复此发现结果,请完成以下步骤:

Terraform

resource "aws_kms_key" "redshift_encryption" {
  description         = "Used for Redshift encryption configuration"
  enable_key_rotation = true
}

resource "aws_redshift_cluster" "example" {
  # ... other configuration ...
  encrypted                           = true
  kms_key_id                          = aws_kms_key.redshift_encryption.id
  logging {
    enable               = true
    log_destination_type = "cloudwatch"
    log_exports          = ["connectionlog", "userlog", "useractivitylog"]
  }
}

AWS 控制台

如需启用集群审核日志记录,请执行以下操作:

  1. 访问 https://console.aws.amazon.com/redshift/,打开 Amazon Redshift 控制台。
  2. 在导航菜单中,选择“集群”,然后选择要修改的集群的名称。
  3. 选择“媒体资源”。
  4. 选择“修改”和“修改审核日志”。
  5. 将“配置审核日志记录”设置为“开启”,将“日志导出类型”设置为“CloudWatch”(推荐),然后选择要导出的日志。

如需使用 AWS S3 管理 Redshift 审核日志,请参阅 AWS 文档中的 Redshift - 数据库审核日志记录

  1. 选择“保存更改”。

修改集群上的数据库加密

  1. 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/redshift/ 打开 Amazon Redshift 控制台。
  2. 在导航菜单中,选择“集群”,然后选择您要修改加密的集群。
  3. 选择“媒体资源”。
  4. 选择“修改加密”和“修改加密”。
  5. 选择要使用的加密方式(KMS 或 HSM),并提供:
  • 对于 KMS:要使用的密钥
  • 对于 HSM:连接和客户端证书

AWS CLI

  1. 创建 KMS 密钥并检索密钥 ID
aws kms create-key \
  --description "Key to encrypt Redshift Clusters"
  1. 修改集群
aws redshift modify-cluster \
  --cluster-identifiers "test-redshift-cluster" \
  --encrypted \
  --kms-key-id <value>

了解此发现结果类型的 支持的资源和扫描设置

Redshift Cluster Maintenancesettings Check

API 中的类别名称:REDSHIFT_CLUSTER_MAINTENANCESETTINGS_CHECK

根据维护窗口进行自动主要版本升级

建议:检查是否所有 Redshift 集群都启用了 allowVersionUpgrade 并设置了 preferredMaintenanceWindow 和 automatedSnapshotRetentionPeriod

如需修复此发现结果,请完成以下步骤:

Terraform

此检查符合 Terraform 提供的所有默认值。如果 Redshift 集群失败,请查看相关要求,并移除 aws_redshift_cluster 资源的以下属性的默认替换项。

resource "aws_redshift_cluster" "example" {

  # ...other configuration ...

  # The following values are compliant and set by default if omitted.
  allow_version_upgrade               = true
  preferred_maintenance_window        = "sat:10:00-sat:10:30"
  automated_snapshot_retention_period = 1
}

AWS 控制台

通过 AWS 控制台创建 Redshift 集群时,默认值已符合此控制措施的要求。

如需了解详情,请参阅使用控制台管理集群

AWS CLI

如需使用 AWS CLI 修复此控制措施,请执行以下操作:

aws redshift modify-cluster \
  --cluster-identifier "test-redshift-cluster" \
  --allow-version-upgrade

了解此发现结果类型支持的资产和扫描设置

Redshift Cluster Public Access Check

API 中的类别名称:REDSHIFT_CLUSTER_PUBLIC_ACCESS_CHECK

Amazon Redshift 集群配置的 PubliclyAccessible 属性指示集群是否可公开访问。如果集群配置了 PubliclyAccessible 并将其设置为 true,则表示集群是面向互联网的实例,具有可公开解析的 DNS 名称,该名称会解析为公共 IP 地址。

如果集群不可公开访问,则它是具有解析为专用 IP 地址的 DNS 名称的内部实例。除非您打算公开访问集群,否则不应将集群配置为将 PubliclyAccessible 设置为 true。

建议:检查是否可以公开访问 Redshift 集群

如需修复此发现结果,请完成以下步骤:

Terraform

如需修复此控件,您必须修改 Redshift 集群资源,并将 publicly_accessible 设置为 false(默认值为 true)。

resource "aws_redshift_cluster" "example" {
  # ... other configuration ...
  publicly_accessible = false
}

AWS 控制台

如需停用对 Amazon Redshift 集群的公开访问权限,请执行以下操作

  1. 访问 https://console.aws.amazon.com/redshift/,打开 Amazon Redshift 控制台。
  2. 在导航菜单中,选择“集群”,然后选择要修改的安全组集群的名称。
  3. 选择“操作”,然后选择“修改公开访问权限设置”。
  4. 在“允许 VPC 之外的实例和设备通过集群端点连接到您的数据库”下,选择“否”。
  5. 选择“确认”。

AWS CLI

使用 modify-cluster 命令设置 --no-publicly-accessible

aws redshift modify-cluster \
  --cluster-identifier "test-redshift-cluster" \
  --no-publicly-accessible

了解此发现结果类型的 支持的资源和扫描设置

Restricted Common Ports

API 中的类别名称:RESTRICTED_COMMON_PORTS

此政策会检查安全群组的不受限制的传入流量能否通过具有最高风险的指定端口访问。如果安全组中的任何规则允许针对这些端口从“0.0.0.0/0”或“::/0”传入流量,则此控件会失败。

访问不受限制 (0.0.0.0/0) 会增加恶意活动(例如黑客攻击、拒绝服务攻击和数据丢失)的几率。

安全群组对 AWS 资源的入站和出站网络流量进行有状态过滤。任何安全群组都不应允许对以下端口进行不受限制的入站访问:

  • 20、21 (FTP)
  • 22(SSH)
  • 23(Telnet)
  • 25 (SMTP)
  • 110 (POP3)
  • 135 (RPC)
  • 143 (IMAP)
  • 445 (CIFS)
  • 1433、1434 (MSSQL)
  • 3000(Go、Node.js 和 Ruby Web 开发框架)
  • 3306 (mySQL)
  • 3389 (RDP)
  • 4333 (ahsp)
  • 5000(Python Web 开发框架)
  • 5432 (postgresql)
  • 5500 (fcp-addr-srvr1)
  • 5601(OpenSearch 信息中心)
  • 8080(代理)
  • 8088(旧版 HTTP 端口)
  • 8888(备用 HTTP 端口)
  • 9200 或 9300(OpenSearch)
建议:安全群组不得允许对具有高风险的端口进行不受限制的访问

如需修复此发现结果,请完成以下步骤:

AWS 控制台

如需删除安全群组规则,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台。
  2. 在导航窗格中,选择“安全群组”。
  3. 选择要更新的安全群组,选择“操作”,然后选择“修改入站规则”以移除入站规则,或选择“修改出站规则”以移除出站规则。
  4. 选择要删除的规则右侧的“删除”按钮。
  5. 依次选择“预览更改”“确认”。

如需了解如何从安全群组中删除规则,请参阅 Amazon EC2 用户指南中的配置安全群组规则

了解此发现结果类型的 支持的资源和扫描设置

Restricted Ssh

API 中的类别名称:RESTRICTED_SSH

安全群组对 AWS 资源的入站和出站网络流量进行有状态过滤。

CIS 建议任何安全群组都不允许对端口 22 进行不受限制的入站访问。移除与 SSH 等远程控制台服务的无限制连接,可降低服务器的风险暴露。

建议:安全群组不得允许来自 0.0.0.0/0 的入站流量流向端口 22

如需修复此发现结果,请完成以下步骤:

AWS 控制台

请针对与 VPC 关联的每个安全群组执行以下步骤。

访问 https://console.aws.amazon.com/vpc/,打开 Amazon VPC 控制台。

  1. 在左侧窗格中,选择安全群组
  2. 选择一个安全群组。
  3. 在页面底部,选择入站规则标签页。
  4. 选择修改规则
  5. 确定允许通过端口 22 进行访问的规则,然后选择 X 将其移除。
  6. 选择保存规则

了解此发现结果类型支持的资产和扫描设置

Rotation Customer Created Cmks Enabled

API 中的类别名称:ROTATION_CUSTOMER_CREATED_CMKS_ENABLED

检查是否为每个密钥启用了自动密钥轮替,并与客户创建的 AWS KMS 密钥的密钥 ID 相匹配。如果资源的 AWS Config 记录器角色没有 kms:DescribeKey 权限,则规则的状态为 NON_COMPLIANT。

建议:确保已为客户创建的 CMK 启用轮替

如需为 AWS KMS 启用自动化密钥轮替,请参阅 AWS 文档中的轮替 AWS KMS 密钥

了解此发现结果类型的 支持的资源和扫描设置

Rotation Customer Created Symmetric Cmks Enabled

API 中的类别名称:ROTATION_CUSTOMER_CREATED_SYMMETRIC_CMKS_ENABLED

借助 AWS Key Management Service (KMS),客户可以轮替后备密钥,后备密钥是指存储在 KMS 中的密钥材料,与客户创建的客户主密钥 (CMK) 的密钥 ID 相关联。它是用于执行加密和解密等加密操作的后备密钥。自动密钥轮替目前会保留所有之前的后备密钥,以便透明地解密加密数据。建议为对称密钥启用 CMK 密钥轮替。无法为任何非对称 CMK 启用密钥轮替。

建议:确保已为客户创建的对称 CMK 启用轮替

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台并在 https://console.aws.amazon.com/iam 上打开 IAM 控制台。
  2. 在左侧导航窗格中,选择 Customer managed keys
  3. 选择一个客户管理的 CMK,其中 Key spec = SYMMETRIC_DEFAULT
  4. 在“General configuration”下方打开“密钥轮替”标签页
  5. 选中“每年自动轮替此 KMS 密钥”。复选框

AWS CLI

  1. 运行以下命令以启用密钥轮替:
 aws kms enable-key-rotation --key-id <kms_key_id>

了解此发现结果类型支持的资产和扫描设置

Routing Tables Vpc Peering Are Least Access

API 中的类别名称:ROUTING_TABLES_VPC_PEERING_ARE_LEAST_ACCESS

检查 VPC 对等互连的路由表是否配置了最小权限主账号。

建议:确保 VPC 对等互连的路由表拥有“最小权限”

如需更新 VPC 对等互连的路由表,请参阅 AWS VPC 用户指南中的更新 VPC 对等互连连接的路由表

了解此发现结果类型的 支持的资源和扫描设置

S3 Account Level Public Access Blocks

API 中的类别名称:S3_ACCOUNT_LEVEL_PUBLIC_ACCESS_BLOCKS

Amazon S3 的“禁止公开访问”功能提供了适用于访问点、存储桶和账号的设置,可帮助您管理对 Amazon S3 资源的公开访问权限。默认情况下,新的存储桶、接入点和对象不允许公开访问。

建议:确认已在账号级别配置所需的 S3 公开访问屏蔽设置

如需修复此发现结果,请完成以下步骤:

Terraform

以下 Terraform 资源会配置对 S3 的账号级访问权限。

resource "aws_s3_account_public_access_block" "s3_control" {
  block_public_acls       = true
  block_public_policy     = true
  ignore_public_acls      = true
  restrict_public_buckets = true
}

AWS 控制台

修改 AWS 账号中所有 S3 存储分区的“禁止公开访问”设置。

  1. 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台。
  2. 为此账号选择“禁止公开访问”设置。
  3. 选择“修改”可更改 AWS 账号中所有存储分区的禁止公开访问设置。
  4. 选择要更改的设置,然后选择“保存更改”。
  5. 当系统要求您确认时,请输入“确认”。然后,选择“确认”以保存更改。

AWS CLI

aws s3control put-public-access-block \
--account-id <value> \
--public-access-block-configuration '{"BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true}'

了解此发现结果类型的 支持的资源和扫描设置

S3 Buckets Configured Block Public Access Bucket And Account Settings

API 中的类别名称:S3_BUCKETS_CONFIGURED_BLOCK_PUBLIC_ACCESS_BUCKET_AND_ACCOUNT_SETTINGS

Amazon S3 提供 Block public access (bucket settings)Block public access (account settings),可帮助您管理对 Amazon S3 资源的公开访问权限。默认情况下,创建 S3 存储桶和对象时,公开访问权限处于停用状态。不过,具有足够 S3 权限的 AWS IAM 主体可以在存储桶级或对象级启用公开访问权限。启用 Block public access (bucket settings) 后,系统会阻止单个存储桶及其包含的对象被公开访问。同样,Block public access (account settings) 会阻止整个账号中的所有存储分区和包含的对象可公开访问。

建议:

确保 S3 存储桶配置了 Block public access (bucket settings)

如需修复此发现结果,请完成以下步骤:

AWS 控制台

如果输出显示单独的配置设置为 true,则表示该设置已在账号中设置。

  1. 登录 AWS 管理控制台,然后使用 https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台
  2. 选择屏蔽公开访问权限(账号设置)
  3. 选择 Edit(修改)可更改 AWS 账号中所有存储分区的禁止公开访问设置
  4. 选择要更改的设置,然后选择保存。如需详细了解各项设置,请将光标悬停在 i 图标上。
  5. 当系统要求您确认时,请输入 confirm。然后,点击确认以保存更改。

AWS CLI

如需为此账号设置“屏蔽公开访问”设置,请运行以下命令:

aws s3control put-public-access-block
--public-access-block-configuration BlockPublicAcls=true, IgnorePublicAcls=true, BlockPublicPolicy=true, RestrictPublicBuckets=true
--account-id <value>

了解此发现结果类型支持的资产和扫描设置

S3 Bucket Access Logging Enabled Cloudtrail S3 Bucket

API 中的类别名称:S3_BUCKET_ACCESS_LOGGING_ENABLED_CLOUDTRAIL_S3_BUCKET

S3 存储桶访问日志记录功能会生成一个日志,其中包含对您的 S3 存储桶发出的每个请求的访问记录。访问日志记录包含有关请求的详细信息,例如请求类型、请求中指定的资源以及处理请求的时间和日期。建议针对 CloudTrail S3 存储桶启用存储桶访问日志记录。

建议:

确保已针对 CloudTrail S3 存储桶启用 S3 存储桶访问日志记录功能

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录 AWS 管理控制台,然后在 https://console.aws.amazon.com/s3 上打开 S3 控制台。
  2. 所有存储桶下,点击目标 S3 存储桶
  3. 点击控制台右上角的属性
  4. 存储分区下:<s3\_bucket\_for\_cloudtrail>点击 Logging</s3\_bucket\_for\_cloudtrail>
  5. 配置存储桶日志记录
    - 点击已启用复选框
    - 从列表中选择目标存储分区
    - 输入目标前缀
  6. 点击保存

AWS CLI

  1. 获取 CloudTrail 记录到的 S3 存储桶的名称:
aws cloudtrail describe-trails --region <region-name> --query trailList[*].S3BucketName
  1. 复制并在 中添加目标存储桶名称,在 中添加日志文件的前缀,并在以下模板中选择添加电子邮件地址,然后将其保存为
{
 "LoggingEnabled": {
 "TargetBucket": "<Logging_BucketName>",
 "TargetPrefix": "<LogFilePrefix>",
 "TargetGrants": [
 {
 "Grantee": {
 "Type": "AmazonCustomerByEmail",
 "EmailAddress": "<EmailID>"
 },
 "Permission": "FULL_CONTROL"
 }
 ]
 }
}
  1. 使用存储桶名称和 作为输入运行 put-bucket-logging 命令。如需了解详情,请参阅 put-bucket-logging
aws s3api put-bucket-logging --bucket <BucketName> --bucket-logging-status file://<FileName.Json>

了解此发现结果类型的 支持的资源和扫描设置

S3 Bucket Logging Enabled

API 中的类别名称:S3_BUCKET_LOGGING_ENABLED

AWS S3 服务器访问日志记录功能会记录对存储桶的访问请求,这对安全审核很有用。默认情况下,系统不会为 S3 存储分区启用服务器访问日志记录。

建议:检查是否对所有 S3 存储分区启用了日志记录

如需修复此发现结果,请完成以下步骤:

Terraform

以下示例演示了如何创建 2 个存储分区:

  1. 日志记录存储桶
  2. 合规存储桶
variable "bucket_acl_map" {
  type = map(any)
  default = {
    "logging-bucket"   = "log-delivery-write"
    "compliant-bucket" = "private"
  }
}

resource "aws_s3_bucket" "all" {
  for_each            = var.bucket_acl_map
  bucket              = each.key
  object_lock_enabled = true
  tags = {
    "Pwd"    = "s3"
  }
}

resource "aws_s3_bucket_acl" "private" {
  for_each = var.bucket_acl_map
  bucket   = each.key
  acl      = each.value
}

resource "aws_s3_bucket_versioning" "enabled" {
  for_each = var.bucket_acl_map
  bucket   = each.key
  versioning_configuration {
    status = "Enabled"
  }
}

resource "aws_s3_bucket_logging" "enabled" {
  for_each      = var.bucket_acl_map
  bucket        = each.key
  target_bucket = aws_s3_bucket.all["logging-bucket"].id
  target_prefix = "log/"
}

resource "aws_s3_bucket_server_side_encryption_configuration" "example" {
  for_each = var.bucket_acl_map
  bucket   = each.key

  rule {
    apply_server_side_encryption_by_default {
      sse_algorithm     = "aws:kms"
    }
  }
}

AWS 控制台

如需了解如何通过 AWS 控制台启用 S3 访问日志记录,请参阅 AWS 文档中的启用 Amazon S3 服务器访问日志记录

AWS CLI

以下示例演示了如何:

  1. 创建存储桶政策,向日志记录服务主账号授予日志记录存储桶中的 PutObject 权限。

policy.json

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "S3ServerAccessLogsPolicy",
            "Effect": "Allow",
            "Principal": {"Service": "logging.s3.amazonaws.com"},
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::MyBucket/Logs/*",
            "Condition": {
                "ArnLike": {"aws:SourceARN": "arn:aws:s3:::SOURCE-BUCKET-NAME"},
                "StringEquals": {"aws:SourceAccount": "SOURCE-AWS-ACCOUNT-ID"}
            }
        }
    ]
}
aws s3api put-bucket-policy \
  --bucket my-bucket
  --policy file://policy.json
  1. 将政策应用于日志记录存储桶

logging.json

{
    "LoggingEnabled": {
        "TargetBucket": "MyBucket",
        "TargetPrefix": "Logs/"
    }
}
aws s3api put-bucket-logging \
  --bucket MyBucket \
  --bucket-logging-status file://logging.json

了解此发现结果类型的 支持的资源和扫描设置

S3 Bucket Policy Set Deny Http Requests

API 中的类别名称:S3_BUCKET_POLICY_SET_DENY_HTTP_REQUESTS

在 Amazon S3 存储桶一级,您可以通过存储桶政策配置权限,使对象只能通过 HTTPS 访问。

建议:确保将 S3 存储分区政策设置为拒绝 HTTP 请求

如需修复此发现结果,请完成以下步骤:

AWS 控制台

使用 AWS 政策生成器:

  1. 重复上述第 1-4 步。
  2. 点击存储桶政策编辑器底部的 Policy Generator
  3. 选择政策类型
    S3 Bucket Policy
  4. 添加语句
    - Effect = 拒绝
    - Principal = *
    - AWS Service = Amazon S3
    - Actions = *
    - Amazon Resource Name =
  5. 生成政策
  6. 复制文本并将其添加到存储桶政策中。

AWS CLI

  1. 将存储桶政策导出为 JSON 文件。
aws s3api get-bucket-policy --bucket <bucket_name> --query Policy --output text > policy.json
  1. 修改 policy.json 文件,在以下语句中添加以下内容:
{
 "Sid": <optional>",
 "Effect": "Deny",
 "Principal": "*",
 "Action": "s3:*",
 "Resource": "arn:aws:s3:::<bucket_name>/*",
 "Condition": {
 "Bool": {
 "aws:SecureTransport": "false"
 }
 }
 }
  1. 将此修改后的政策重新应用于 S3 存储桶:
aws s3api put-bucket-policy --bucket <bucket_name> --policy file://policy.json

了解此发现结果类型支持的资产和扫描设置

S3 Bucket Replication Enabled

API 中的类别名称:S3_BUCKET_REPLICATION_ENABLED

此控件用于检查 Amazon S3 存储桶是否启用了跨区域复制。如果存储桶未启用跨区域复制,或者同时启用了同区域复制,则控制操作会失败。

复制是指在同一 AWS 区域或不同 AWS 区域中的存储桶之间自动异步复制对象。复制功能会将新创建的对象和对象更新从源存储桶复制到一个或多个目标存储桶。AWS 最佳实践建议对属于同一 AWS 账号的源存储分区和目标存储分区执行复制操作。除了可用性,您还应考虑其他系统安全强化设置。

建议:检查是否已为 S3 存储分区启用跨区域复制

如需对 S3 存储桶启用跨区域复制,请参阅《Amazon Simple Storage Service 用户指南》中的为归同一账号所有的源存储桶和目标存储桶配置复制。对于“源存储桶”,选择“应用到存储桶中的所有对象”。

了解此发现结果类型的 支持的资源和扫描设置

S3 Bucket Server Side Encryption Enabled

API 中的类别名称:S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED

这将检查您的 S3 存储桶是否启用了 Amazon S3 默认加密,或者 S3 存储桶政策是否明确拒绝未使用服务器端加密的 put-object 请求。

建议:确保所有 S3 存储桶都采用了静态加密

如需修复此发现结果,请完成以下步骤:

Terraform

resource "aws_s3_bucket_server_side_encryption_configuration" "enable" {
  bucket = "my-bucket"

  rule {
    apply_server_side_encryption_by_default {
      sse_algorithm = "AES256"
    }
  }
}

AWS 控制台

如需在 S3 存储桶上启用默认加密,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台。
  2. 在左侧导航窗格中,选择“存储分区”。
  3. 从列表中选择 S3 存储桶。
  4. 选择“媒体资源”。
  5. 选择“默认加密”。
  6. 对于加密,请选择 AES-256 或 AWS-KMS。
  7. 选择 AES-256 以使用由 Amazon S3 管理的密钥进行默认加密。如需详细了解如何使用 Amazon S3 服务器端加密功能加密数据,请参阅 Amazon Simple Storage Service 用户指南
  8. 选择 AWS-KMS 以使用由 AWS KMS 管理的密钥进行默认加密。然后从您创建的 AWS KMS 主密钥列表中选择一个主密钥。
  9. 输入要使用的 AWS KMS 密钥的 Amazon 资源名称 (ARN)。您可以在 IAM 控制台中的“加密密钥”下方找到 AWS KMS 密钥的 ARN。或者,您也可以从下拉列表中选择密钥名称。
  10. 重要提示:如果您为默认加密配置使用 AWS KMS 选项,则需要遵守 AWS KMS 的 RPS(每秒请求数)配额。如需详细了解 AWS KMS 配额以及如何申请增加配额,请参阅 AWS 密钥管理服务开发者指南
  11. 选择“保存”。

如需详细了解如何创建 AWS KMS 密钥,请参阅 AWS Key Management Service 开发者指南

如需详细了解如何将 AWS KMS 与 Amazon S3 搭配使用,请参阅 Amazon Simple Storage Service 用户指南

启用默认加密时,您可能需要更新存储桶政策。如需详细了解如何从存储桶政策改为默认加密,请参阅 Amazon Simple Storage Service 用户指南

AWS CLI

aws s3api put-bucket-encryption \
  --bucket my-bucket \
  --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"SSEAlgorithm": "AES256"}}]}'

了解此发现结果类型支持的资产和扫描设置

S3 Bucket Versioning Enabled

API 中的类别名称:S3_BUCKET_VERSIONING_ENABLED

Amazon S3 是一种将对象的多个变体保存在同一个存储桶中的方法,可帮助您更轻松地从意外用户操作和应用故障中恢复。

建议:检查是否对所有 S3 存储桶启用了版本控制

如需修复此发现结果,请完成以下步骤:

Terraform

resource "aws_s3_bucket" "my_bucket" {
  bucket = "my-bucket"

  versioning {
    enabled = true
  }
}

AWS 控制台

对 S3 存储桶启用或停用版本控制

  1. 登录 AWS 管理控制台,然后在 https://console.aws.amazon.com/s3/ 上打开 Amazon S3 控制台。
  2. 在“存储桶”列表中,选择要为其启用版本控制的存储桶的名称。
  3. 选择“媒体资源”。
  4. 在“存储分区版本控制”下,选择“修改”。
  5. 选择“暂停”或“启用”,然后选择“保存更改”。

AWS CLI

aws s3control put-bucket-versioning \
--bucket <bucket_name> \
--versioning-configuration Status=Enabled

了解此发现结果类型支持的资产和扫描设置

S3 Default Encryption Kms

API 中的类别名称:S3_DEFAULT_ENCRYPTION_KMS

检查是否使用 AWS Key Management Service (AWS KMS) 对 Amazon S3 存储分区进行了加密

建议:检查是否使用 KMS 对所有存储分区进行了加密

如需修复此发现结果,请完成以下步骤:

Terraform

resource "aws_kms_key" "s3_encryption" {
  description         = "Used for S3 Bucket encryption configuration"
  enable_key_rotation = true
}

resource "aws_s3_bucket_server_side_encryption_configuration" "enable" {
  bucket   = "my-bucket"

  rule {
    apply_server_side_encryption_by_default {
      kms_master_key_id = aws_kms_key.s3_encryption.arn
      sse_algorithm     = "aws:kms"
    }
  }
}

AWS 控制台

如需在 S3 存储桶上启用默认加密,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台。
  2. 在左侧导航窗格中,选择“存储分区”。
  3. 从列表中选择 S3 存储桶。
  4. 选择“媒体资源”。
  5. 选择“默认加密”。
  6. 对于加密,请选择 AWS-KMS。
  7. 选择 AWS-KMS 以使用由 AWS KMS 管理的密钥进行默认加密。然后,从您创建的 AWS KMS 主密钥列表中选择一个主密钥。如需详细了解如何创建 KMS 密钥,请参阅 AWS 文档 - 创建密钥
  8. 输入要使用的 AWS KMS 密钥的 Amazon 资源名称 (ARN)。您可以在 IAM 控制台中的“加密密钥”下方找到 AWS KMS 密钥的 ARN。或者,您也可以从下拉列表中选择一个键名称。
  9. 重要提示:此解决方案受 AWS KMS 的 RPS(每秒请求次数)配额的约束。如需详细了解 AWS KMS 配额以及如何申请增加配额,请参阅 AWS Key Management Service 开发者指南
  10. 选择“保存”。

如需详细了解如何将 AWS KMS 与 Amazon S3 搭配使用,请参阅 Amazon Simple Storage Service 用户指南

启用默认加密功能时,您可能需要更新存储桶政策。如需详细了解如何从存储桶政策迁移到默认加密,请参阅 Amazon Simple Storage Service 用户指南

AWS CLI

创建 KMS 密钥

aws kms create-key \
  --description "Key to encrypt S3 buckets"

启用密钥轮替

aws kms enable-key-rotation \
  --key-id <key_id_from_previous_command>

更新存储桶

aws s3api put-bucket-encryption \
  --bucket my-bucket \
  --server-side-encryption-configuration '{"Rules": [{"ApplyServerSideEncryptionByDefault": {"KMSMasterKeyID": "<id_from_key>", "SSEAlgorithm": "AES256"}}]}'

了解此发现结果类型支持的资产和扫描设置

Sagemaker Notebook Instance Kms Key Configured

API 中的类别名称:SAGEMAKER_NOTEBOOK_INSTANCE_KMS_KEY_CONFIGURED

检查是否为 Amazon SageMaker 笔记本实例配置了 AWS Key Management Service (AWS KMS) 密钥。如果未为 SageMaker 笔记本实例指定“KmsKeyId”,则规则为 NON_COMPLIANT。

建议:检查是否所有 SageMaker 笔记本实例都配置为使用 KMS

如需为 SageMaker 配置 KMS,请参阅 Amazon SageMaker 文档中的密钥管理

了解此发现结果类型支持的资产和扫描设置

Sagemaker Notebook No Direct Internet Access

API 中的类别名称:SAGEMAKER_NOTEBOOK_NO_DIRECT_INTERNET_ACCESS

检查是否禁止 SageMaker 笔记本实例直接访问互联网。为此,它会检查笔记本实例的 DirectInternetAccess 字段是否已停用。

如果您在没有 VPC 的情况下配置 SageMaker 实例,则系统会默认在您的实例上启用直接互联网访问权限。您应使用 VPC 配置实例,并将默认设置更改为“停用 - 通过 VPC 访问互联网”。

如需通过笔记本训练或托管模型,您需要连接到互联网。如需启用互联网访问权限,请确保您的 VPC 具有 NAT 网关,并且您的安全群组允许出站连接。如需详细了解如何将笔记本实例连接到 VPC 中的资源,请参阅 Amazon SageMaker 开发者指南中的“将笔记本实例连接到 VPC 中的资源”。

您还应确保只有获得授权的用户才能访问 SageMaker 配置。限制用户的 IAM 权限,以便他们无法修改 SageMaker 设置和资源。

建议:检查是否对所有 Amazon SageMaker 笔记本实例停用了互联网直接访问功能

如需修复此发现结果,请完成以下步骤:

AWS 控制台

请注意,创建笔记本实例后,您将无法更改互联网访问权限设置。您必须停止、删除和重新创建该虚拟机。

如需将 SageMaker 笔记本实例配置为拒绝直接访问互联网,请执行以下操作:

  1. 访问 https://console.aws.amazon.com/sagemaker/,打开 SageMaker 控制台
  2. 前往“Notebooks 实例”。
  3. 删除启用了互联网直接访问的实例。依次选择相应实例、“操作”和“停止”。
  4. 实例停止后,选择“操作”,然后选择“删除”。
  5. 选择“创建笔记本实例”。提供配置详细信息。
  6. 展开“网络”部分,然后选择 VPC、子网和安全组。在“直接互联网访问权限”下,选择“停用 - 通过 VPC 访问互联网”。
  7. 选择“创建笔记本实例”。

如需了解详情,请参阅 Amazon SageMaker 开发者指南中的“将记事本实例连接到 VPC 中的资源”。

了解此发现结果类型支持的资产和扫描设置

Secretsmanager Rotation Enabled Check

API 中的类别名称:SECRETSMANAGER_ROTATION_ENABLED_CHECK

检查存储在 AWS Secrets Manager 中的密文是否配置为自动轮替。如果未配置自动轮替的 Secret,则控制操作会失败。如果您为 maximumAllowedRotationFrequency 参数提供自定义值,则仅当相应密钥在指定时间范围内自动轮替时,该控件才会传递。

Secret Manager 可帮助您改善组织的安全状况。Secret 包括数据库凭据、密码和第三方 API 密钥。您可以使用 Secret Manager 集中存储密文、自动加密密文、控制对密文的访问权限,以及安全地自动轮替密文。

Secrets Manager 可以轮替 Secret。您可以使用轮替将长期 Secret 替换为短期 Secret。轮替 Secret 可限制未经授权的用户使用已泄露 Secret 的时间。因此,您应该经常轮替您的密钥。如需详细了解轮替,请参阅“AWS Secrets Manager 用户指南”中的“轮替 AWS Secrets Manager Secret”。

建议:检查是否对所有 AWS Secrets Manager 密钥都启用了轮替

如需为 Secret Manager 中的 Secret 开启自动轮替功能,请参阅 AWS Secrets Manager 用户指南中的“使用控制台为 AWS Secrets Manager 中的 Secret 设置自动轮替”。您必须选择并配置要轮替的 AWS Lambda 函数。

了解此发现结果类型的 支持的资源和扫描设置

Sns Encrypted Kms

API 中的类别名称:SNS_ENCRYPTED_KMS

检查是否使用 AWS KMS 对 SNS 主题进行了静态加密。如果 SNS 主题不使用 KMS 密钥进行服务器端加密 (SSE),控制将失败。

对静态数据进行加密可降低未经 AWS 身份验证的用户访问存储在磁盘上的数据的风险。它还添加了另一组访问控制功能,以限制未经授权的用户访问数据。例如,必须有 API 权限才能对数据进行解密,然后才能读取数据。应对 SNS 主题进行静态加密,以增强安全性。

建议:检查是否使用 KMS 对所有 SNS 主题进行了加密

如需为 SNS 主题开启 SSE,请参阅 Amazon Simple Notification Service 开发者指南中的“为 Amazon SNS 主题启用服务器端加密 (SSE)”。在使用 SSE 之前,您还必须配置 AWS KMS 密钥政策,以允许对主题进行加密,以及对消息进行加密和解密。如需了解详情,请参阅《Amazon Simple Notification Service 开发者指南》中的“配置 AWS KMS 权限”。

了解此发现结果类型的 支持的资源和扫描设置

Vpc Default Security Group Closed

API 中的类别名称:VPC_DEFAULT_SECURITY_GROUP_CLOSED

此控制机制会检查 VPC 的默认安全群组是允许入站还是出站流量。如果安全群组允许入站或出站流量,该控件将失败。

默认安全群组的规则允许分配给同一安全群组的网络接口(及其关联的实例)中的所有出站和入站流量。我们建议您不要使用默认安全群组。由于无法删除默认安全组,因此您应更改默认安全组规则设置,以限制入站和出站流量。如果您不小心为 EC2 实例等资源配置了默认安全群组,这可以防止意外流量。

建议:确保每个 VPC 的默认安全群组对所有流量进行限制

如需解决此问题,请先创建新的最低特权安全群组。如需了解相关说明,请参阅《Amazon VPC 用户指南》中的“创建安全组”。然后,将新的安全组分配给您的 EC2 实例。如需了解相关说明,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的“更改实例的安全组”。

为资源分配新的安全群组后,请从默认安全群组中移除所有入站和出站规则。有关说明,请参阅 Amazon VPC 用户指南中的“删除安全群组规则”。

了解此发现结果类型支持的资产和扫描设置

Vpc Flow Logging Enabled All Vpcs

API 中的类别名称:VPC_FLOW_LOGGING_ENABLED_ALL_VPCS

VPC 流日志是一项功能,可让您捕获有关进出 VPC 中网络接口的 IP 流量的信息。创建数据流日志后,您可以在 Amazon CloudWatch Logs 中查看和检索其数据。建议为数据包“拒绝”启用 VPC 流日志。

建议:确保已在所有 VPC 中启用 VPC 流日志记录

如需修复此发现结果,请完成以下步骤:

AWS 控制台

  1. 登录管理控制台
  2. 选择 Services,然后选择 VPC
  3. 在左侧导航窗格中,选择 Your VPCs
  4. 选择 VPC
  5. 在右侧窗格中,选择 Flow Logs 标签页。
  6. 如果不存在流日志,请点击 Create Flow Log
  7. 对于“过滤条件”,请选择 Reject
  8. 输入 RoleDestination Log Group
  9. 点击 Create Log Flow
  10. 点击“CloudWatch Logs Group

注意:将过滤器设置为“拒绝”会大幅减少此建议的日志记录数据积累,并提供足够的信息来进行数据泄露检测、研究和修复。不过,在最小特权安全群组工程期间,将此过滤条件设为“全部”非常有助于发现已运行环境正常运行所需的现有流量。

AWS CLI

  1. 创建一个政策文档,并将其命名为 role_policy_document.json,然后粘贴以下内容:
{
 "Version": "2012-10-17",
 "Statement": [
 {
 "Sid": "test",
 "Effect": "Allow",
 "Principal": {
 "Service": "ec2.amazonaws.com"
 },
 "Action": "sts:AssumeRole"
 }
 ]
}
  1. 创建另一个政策文档,并将其命名为 iam_policy.json,然后粘贴以下内容:
{
 "Version": "2012-10-17",
 "Statement": [
 {
 "Effect": "Allow",
 "Action":[
 "logs:CreateLogGroup",
 "logs:CreateLogStream",
 "logs:DescribeLogGroups",
 "logs:DescribeLogStreams",
 "logs:PutLogEvents",
 "logs:GetLogEvents",
 "logs:FilterLogEvents"
 ],
 "Resource": "*"
 }
 ]
}
  1. 运行以下命令以创建 IAM 角色:
aws iam create-role --role-name <aws_support_iam_role> --assume-role-policy-document file://<file-path>role_policy_document.json
  1. 运行以下命令以创建 IAM 政策:
aws iam create-policy --policy-name <ami-policy-name> --policy-document file://<file-path>iam-policy.json
  1. 使用上一步中返回的 IAM 政策 ARN 运行 attach-group-policy 命令,将政策附加到 IAM 角色(如果命令成功,则不会返回任何输出):
aws iam attach-group-policy --policy-arn arn:aws:iam::<aws-account-id>:policy/<iam-policy-name> --group-name <group-name>
  1. 运行 describe-vpcs 以获取所选区域中可用的 VpcId:
aws ec2 describe-vpcs --region <region>
  1. 该命令输出应返回所选区域中可用的 VPC ID。
  2. 运行 create-flow-logs 为 VPC 创建流日志:
aws ec2 create-flow-logs --resource-type VPC --resource-ids <vpc-id> --traffic-type REJECT --log-group-name <log-group-name> --deliver-logs-permission-arn <iam-role-arn>
  1. 对所选区域中可用的其他 VPC 重复第 8 步。
  2. 通过更新 --region 更改区域,然后针对其他 VPC 重复执行修复程序。

了解此发现结果类型的 支持的资源和扫描设置

Vpc Sg Open Only To Authorized Ports

API 中的类别名称:VPC_SG_OPEN_ONLY_TO_AUTHORIZED_PORTS

此控件用于检查 Amazon EC2 安全群组是否允许来自未经授权的端口的无限制传入流量。控制状态按如下方式确定:

如果您为 authorizedTcpPorts 使用默认值,当安全组允许来自 80 和 443 端口以外的任何端口的无限制入站流量时,控制操作将失败。

如果您为 authorizedTcpPorts 或 authorizedUdpPorts 提供了自定义值,并且安全群组允许来自任何未列出的端口的无限制入站流量,则控制操作会失败。

如果不使用任何参数,则对于具有无限制入站流量规则的任何安全群组,控制操作都会失败。

安全群组可对传入和传出 AWS 的网络流量进行有状态过滤。安全群组规则应遵循最小权限原则。无限制访问权限(带有 /0 后缀的 IP 地址)会增加遭到黑客入侵、遭到拒绝服务攻击和数据丢失等恶意活动的可能性。除非明确允许某个端口,否则该端口应拒绝不受限制的访问。

建议:检查任何 VPC 具有 0.0.0.0/0 的任何安全群组是否仅允许特定入站 TCP/UDP 流量

如需修改安全组,请参阅 Amazon VPC 用户指南中的使用安全组

了解此发现结果类型支持的资产和扫描设置

Both VPC VPN Tunnels Up

API 中的类别名称:VPC_VPN_2_TUNNELS_UP

VPN 隧道是一种加密链路,通过 AWS 站点到站点 VPN 连接,数据可以从客户网络传入或传出 AWS。每个 VPN 连接都包含两个 VPN 隧道,您可以同时使用这两个隧道来实现高可用性。确保两个 VPN 隧道都处于 VPN 连接状态对于确认 AWS VPC 与远程网络之间的连接是否安全且具有高可用性至关重要。

此控件会检查 AWS 站点到站点 VPN 提供的两个 VPN 隧道是否都处于运行状态。如果一个或两个隧道处于 DOWN 状态,则控制操作会失败。

建议:确认 AWS 站点到站点 VPN 提供的两个 AWS VPN 隧道都处于运行状态

如需修改 VPN 隧道选项,请参阅 AWS 站点到站点 VPN 用户指南中的修改站点到站点 VPN 隧道选项

了解此发现结果类型的 支持的资源和扫描设置