修复发现的 Security Health Analytics 问题

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

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

Security Health Analytics 修复

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

修复后停用发现结果

修复发现结果中的漏洞或配置错误相关问题后,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. 点击资源名称列中的集群。

  3. 点击数据保护

  4. 自动备份政策部分下,点击自动备份行中的修改

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

  6. 点击更新

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

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 标志用于控制是否在服务器日志中记录会导致错误条件的 SQL 语句。系统会记录具有指定或更高严重级别的 SQL 语句。严重级别越高,记录的消息数量就越少。如果严重级别设置得过高,系统可能不会记录错误消息。

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

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

  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 集群页面。

    前往 AlloyDB for PostgreSQL 集群

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

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

  4. 点击高级配置选项

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

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

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

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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

对于 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. 点击 Create Policy(创建政策)。

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

Audit logging disabled

API 中的类别名称:AUDIT_LOGGING_DISABLED

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

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

为所有服务启用 Cloud Logging,以跟踪所有管理员活动以及对用户数据的读取和写入。如果信息量很大,Cloud Logging 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

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

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

  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. 安全性部分,点击 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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

对于 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. 点击 Create Policy(创建政策)。

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

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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

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

  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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

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

  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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

对于 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. 点击 Create Policy(创建政策)。

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

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 可观测性价格: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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

对于 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. 点击 Create Policy(创建政策)。

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

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 的完整访问权限的默认服务账号。

配置了默认服务账号范围授予对所有 Cloud API 的完整访问权限的实例可能允许用户执行其没有 IAM 权限的操作或 API 调用。如需了解详情,请参阅 Compute Engine 默认服务账号

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

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

    转到“虚拟机实例”

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

  3. 如果实例当前已启动,请点击 停止

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

  5. 服务账号下的下拉菜单中,选择 Compute Engine 默认服务账号

  6. 访问权限范围部分下,确保未选中授予对所有 Cloud API 的完整访问权限

  7. 点击保存

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

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

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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

对于 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. 点击 Create Policy(创建政策)。

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

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 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。

要修复此发现结果,请使用 gsutil versioning set on 命令以及适当的值:

    gsutil versioning set on gs://finding.assetDisplayName

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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

对于 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. 点击 Create Policy(创建政策)。

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

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. 点击删除 以移除授予 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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

对于 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. 点击 Create Policy(创建政策)。

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

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. 点击 启动以启动实例。

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

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 的使用费有可能会非常高。如需了解服务的用量及其费用,请参阅 Google Cloud 可观测性费用优化

对于 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. 点击 Create Policy(创建政策)。

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

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 数据库标志设置为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. 将有权对数据进行加密、解密或签名的主用户的数量减少到三个或更少。如需撤消权限,请点击每个主账号旁边的删除

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

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,将配置文件更改为“新型”或“受限”。

  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)、Tools for Windows PowerShell 或 AWS SDK 以编程方式调用 AWS,或使用适用于个别 AWS 服务的 API 进行直接 HTTP 调用。建议您定期轮替所有访问密钥。

建议:确保访问密钥每 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 步指示未使用旧密钥,我们也建议您不要立即删除第一个访问密钥。请改为使用以下命令将第一个访问密钥的状态更改为“无效”:

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 健康检查。

这样可确保实例组能够根据负载均衡器提供的额外测试来确定实例的健康状况。使用 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 是一种网络服务,可对您帐号中受支持的 AWS 资源执行配置管理,并向您提供日志文件。记录的信息包括配置项(AWS 资源)、配置项(AWS 资源)之间的关系、资源之间的任何配置更改。建议在所有区域中启用 AWS Config。

建议:确保在所有区域中启用 AWS Config

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

AWS 控制台

  1. 在控制台右上角选择您要重点关注的区域
  2. 点击“服务”
  3. 点击“配置”
  4. 如果此区域中启用了配置记录器,您应从左侧的导航菜单进入“设置”页面。如果此区域中尚未启用配置记录器,则您应选择“开始使用”。
  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 身份的凭据登录 Security Hub 控制台。
  2. 首次打开 Security Hub 控制台时,请选择“Enable AWS Security Hub”。
  3. 欢迎页面中的“安全标准”列出了安全中心支持的安全标准。
  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 是一项网络服务,用于记录账号的 AWS API 调用,并根据 IAM 政策将这些日志提供给用户和资源。AWS Key Management Service (KMS) 是一项代管式服务,可帮助创建和控制用于加密帐号数据的加密密钥,并使用硬件安全模块 (HSM) 来保护加密密钥的安全性。CloudTrail 日志可以配置为利用服务器端加密 (SSE) 和 KMS 客户创建的主密钥 (CMK) 进一步保护 CloudTrail 日志。建议将 CloudTrail 配置为使用 SSE-KMS。

建议:确保使用 KMS CMK 对 CloudTrail 日志进行静态加密

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

AWS 控制台

  1. 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/cloudtrail 并打开 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 是一项网络服务,用于记录在指定 AWS 帐号中进行的 AWS API 调用。记录的信息包括 API 调用方的身份、API 调用时间、API 调用方的来源 IP 地址、请求参数以及 AWS 服务返回的响应元素。CloudTrail 使用 Amazon S3 存储和传送日志文件,因此可持久存储日志文件。除了捕获指定 S3 存储分区内的 CloudTrail 日志以进行长期分析之外,还可以将 CloudTrail 配置为将日志发送到 CloudWatch Logs,以执行实时分析。对于在帐号的所有区域中启用的跟踪记录,CloudTrail 会将所有这些区域的日志文件发送到 CloudWatch Logs 日志组。建议将 CloudTrail 日志发送到 CloudWatch Logs。

注意:此建议的目的是确保 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 组。
  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

这将检查当警报在“OK”“ALARM”和“INSUFFICIENT_DATA”状态之间转换时,Amazon Cloudwatch 是否定义了操作。

在 Amazon CloudWatch 警报中配置 ALARM 状态的操作,对于在受监控的指标违规阈值时触发立即响应非常重要。
它可确保快速解决问题、缩短停机时间、实现自动修复、维护系统运行状况并防止服务中断。

闹钟至少有一项操作。
当闹钟从任何其他状态转换到“INSUFFICIENT_DATA”状态时,闹钟至少会有一项操作。
(可选)当闹钟从任何其他状态转换到“OK”状态时,闹钟至少具有一项操作。

建议:检查 CloudWatch 警报是否至少启用了一项警报操作、一项 INSUFFICIENT_DATA 操作或一项 OK 操作。

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

AWS 控制台

如需为 Amazon CloudWatch 闹钟配置 ALARM 操作,请执行以下操作。

  1. 通过 https://console.aws.amazon.com/cloudwatch/ 打开 Amazon 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 步期间,为“闹钟状态触发器”选择“确定”和“数据不足”,以便针对这两种状态设置操作。
  13. 对同一 AWS 区域内的所有其他 CloudWatch 闹钟重复此过程。
  14. 对所有其他 AWS 区域中的所有其他 CloudWatch 闹钟重复此过程。

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

Cloudwatch Log Group Encrypted

API 中的类别名称:CLOUDWATCH_LOG_GROUP_ENCRYPTED

此检查可确保使用 KMS 配置 CloudWatch 日志。

CloudWatch Logs 中的日志组数据始终经过加密。默认情况下,CloudWatch Logs 对静态日志数据使用服务器端加密。作为替代方案,您可以使用 AWS Key Management Service 执行此加密。如果这样做,则使用 AWS KMS 密钥进行加密。在创建日志组时或创建日志组后,通过将 KMS 密钥与日志组相关联,在日志组级别启用使用 AWS KMS 进行加密。

建议:检查 Amazon CloudWatch Logs 中的所有日志组是否使用 KMS 加密

如需了解详情,请参阅 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 Logs。

对于在帐号中的所有区域启用的跟踪记录,CloudTrail 会将所有这些区域的日志文件发送到 CloudWatch Logs 日志组。

安全中心建议您将 CloudTrail 日志发送到 CloudWatch Logs。请注意,此建议旨在确保捕获、监控帐号活动并发出适当的警报。您可以使用 CloudWatch Logs 来设置您的 AWS 服务。此建议并不禁止使用其他解决方案。

将 CloudTrail 日志发送到 CloudWatch Logs,以便基于用户、API、资源和 IP 地址进行实时和历史活动日志记录。您可以使用此方法针对异常或敏感度帐号活动设置提醒和通知。

建议:检查是否已将所有 CloudTrail 跟踪记录配置为向 AWS CloudWatch 发送日志

如需将 CloudTrail 与 CloudWatch Logs 集成,请参阅《AWS CloudTrail 用户指南》中的将事件发送到 CloudWatch Logs

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

No AWS Credentials in CodeBuild Project Environment Variables

API 中的类别名称:CODEBUILD_PROJECT_ENVVAR_AWSCRED_CHECK

这将检查项目是否包含环境变量 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY

绝不应以明文形式存储身份验证凭据“AWS_ACCESS_KEY_ID”和“AWS_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. 选择包含个人访问令牌或用户名和密码的构建项目。
  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 群组允许您修改“名称”字段。修复所有区域中的所有 VPC 的默认群组规则后,修改此字段以添加类似于“请勿使用请勿添加规则”

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

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

创建新的 IAM 用户时,AWS 控制台默认不选中任何复选框。创建 IAM 用户凭据时,您必须确定他们所需的访问权限类型。

程序化访问:IAM 用户可能需要进行 API 调用、使用 AWS CLI 或使用 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 Backup 备份方案,请参阅 AWS Backup 开发者指南中的将资源分配给备份方案

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

Dynamodb Pitr Enabled

API 中的类别名称:DYNAMODB_PITR_ENABLED

时间点恢复 (PITR) 是可用于备份 DynamoDB 表的机制之一。

时间点备份会保留 35 天。如果您需要更长的保留期限,请参阅 AWS 文档中的使用 AWS 备份为 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

检查是否所有 DynamoDB 表都使用客户管理的 KMS 密钥(非默认)进行加密。

建议:检查所有 DynamoDB 表是否均已使用 AWS Key Management Service (KMS) 加密

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

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. 在导航窗格中的“Elastic Block Store”下,选择“Snapshots”菜单,然后选择您的公开快照。
  3. 从“操作”中选择“修改权限”。
  4. 选择“不公开”。
  5. (可选)添加要与之共享快照的授权帐号的 AWS 帐号,然后选择“添加权限”。
  6. 选择“保存”。

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

Ebs Volume Encryption Enabled All Regions

API 中的类别名称:EBS_VOLUME_ENCRYPTION_ENABLED_ALL_REGIONS

使用 Elastic Block Store (EBS) 服务时,Elastic Compute Cloud (EC2) 支持静态加密。虽然默认处于停用状态,但支持在创建 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

Amazon VPC 比 EC2 Classic 提供更多安全功能。建议所有节点都属于一个 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 资源结合使用,以确保在没有公共 IP 地址的情况下预配 EC2 实例

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 实例由系统管理器进行管理,这可让您更轻松地应用补丁、修复错误配置以及响应安全事件。

建议:检查合规性状态 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 操作来查看合规性状态。对于关联,“配置合规性”会显示合规性状态(“合规”或“不合规”)。该图表还会显示分配给关联的严重级别,例如“严重”或“中”。

如需详细了解州管理器关联合规性,请参阅《AWS Systems 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

在 Cloud 控制台中:
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_block_device.delete_on_termination 默认为 true,与此实例关联的所有 EBS 块(不只是根节点)都会在实例终止时删除。

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 最佳实践建议为弹性文件系统 (EFS) 配置备份。这将检查您的 AWS 帐号中每个已启用区域的所有 EFS 中是否有已启用的备份。

建议:检查 EFS 文件系统是否已包含在 AWS Backup 方案中

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

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 Service 和 EFS-to-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)。安全中心建议您使用 ACM 为负载均衡器创建或导入证书。

ACM 与传统负载均衡器集成,因此您可以在负载均衡器上部署证书。您还应自动续订这些证书。

建议:检查所有传统负载平衡器是否都使用 AWS Certificate Manager 提供的 SSL 证书

如需了解如何将 ACM SSL/TLS 证书与传统版负载平衡器相关联,请参阅 AWS 知识中心文章如何将 ACM SSL/TLS 证书与传统版、应用或网络负载平衡器关联?

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

Elb Deletion Protection Enabled

API 中的类别名称:ELB_DELETION_PROTECTION_ENABLED

检查应用负载平衡器是否启用了删除保护。如果未配置删除保护,该控件将失败。

启用删除保护,防止应用负载平衡器被删除。

建议:应启用应用负载平衡器删除保护

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

AWS 控制台

为了防止负载均衡器被意外删除,您可以启用删除保护。默认情况下,系统会为负载均衡器停用删除保护。

如果您为负载均衡器启用了删除保护,则必须先停用删除保护,然后才能删除负载均衡器。

从控制台启用删除保护。

  1. 通过 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台。
  2. 在导航窗格的加载平衡 (LOAD BALANCING) 下,选择负载平衡器
  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 加密的默认密钥并选择对称客户管理的密钥。

如需了解详情,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的创建 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. 在“快照”页面的 Snapshot Name 字段中输入您要截取快照的数据库的名称,然后点击 Take Snapshot
  6. 选择新创建的快照,点击位于右上角的 Action 按钮,然后从“操作”菜单中选择 Copy snapshot
  7. 在“制作数据库快照的副本”页面上,执行以下操作:
  • 在“新建数据库快照标识符”字段中,输入 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(密钥管理服务)进行静态加密。

建议:确保已针对 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. 运行 create-mount-target 命令,使用上一步返回的新创建的 EFS 文件系统 ID 作为标识符,并使用表示装载目标的可用性可用区 (AZ) 的 ID:
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 Management Console 不同,当您以编程方式删除用户时,必须手动删除附加到用户的项目,否则删除将失败。

在尝试删除用户之前,请先移除以下内容:

  1. 密码 ( DeleteLoginProfile )
  2. 访问密钥 ( DeleteAccessKey )
  3. 签名证书 ( DeleteSigningCertificate )
  4. SSH 公钥 ( DeleteSSHPublicKey )
  5. Git 凭据 ( DeleteServiceSpecificCredential )
  6. 多重身份验证 (MFA) 设备( 移除 MFADevice 、 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) 是一种最佳实践,可在用户名和密码之外额外添加一层保护。借助 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 天/上次使用凭据的用户的名称。
  4. 选择“安全凭据”。
  5. 对于每个已至少 90 天内未使用的登录凭据和访问密钥,请选择“设为无效”。

如需要求在下次登录时提供控制台用户的新密码,请执行以下操作:

  1. 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
  2. 选择“用户”。
  3. 选择拥有超过 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 预配 IAM 角色来限制对 Lambda 函数的访问权限,并将该角色附加到 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 存储桶上启用 MFA 删除功能。

注意:
-您无法使用 AWS 管理控制台启用 MFA 删除功能。您必须使用 AWS CLI 或 API。
- 您必须使用您的“根”账号在 S3 存储分区上启用 MFA 删除功能。

从命令行

  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

“root”用户帐号是 AWS 帐号中具有最高特权的用户。多重身份验证 (MFA) 可在用户名和密码的基础上增添一道额外的安全屏障。启用 MFA 后,当用户登录 AWS 网站时,系统会提示他们输入用户名和密码,以及 AWS MFA 设备上的身份验证码。

注意:将虚拟 MFA 用于“根”账号时,建议使用的设备不是个人设备,而是专用移动设备(平板电脑或手机),此类设备应单独管理,且不受任何个人个人设备影响而保持充电状态并受到保护。(“非个人虚拟 MFA”)可降低因设备丢失、设备以旧换新或设备所有者从公司离职而无法访问 MFA 的风险。

建议:确保已针对“根”用户账号启用 MFA

执行以下操作,为“根”用户账号建立 MFA:

  1. 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。

注意:如需管理“根”AWS 账号的 MFA 设备,您必须使用“根”账号凭据登录 AWS。您无法使用其他凭据管理“根”账号的 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 应用是否支持二维码,然后执行以下操作之一:
  • 使用该应用扫描二维码。例如,您可以选择摄像头图标或选择类似于“扫描二维码”的选项,然后使用设备的摄像头来扫描该二维码。
  • 在“管理 MFA 设备”向导中,选择“显示密钥”进行手动配置,然后在您的 MFA 应用中键入密钥配置密钥。

完成后,虚拟 MFA 设备便会开始生成动态密码。

在“管理 MFA 设备”向导的“身份验证代码 1”框中,输入虚拟 MFA 设备当前显示的动态密码。等待设备生成新的动态密码(最多 30 秒)。然后在“身份验证代码 2”框中键入第二个动态密码。选择“分配虚拟 MFA”。

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

Multi Factor Authentication Mfa Enabled All Iam Users Console

API 中的类别名称:MULTI_FACTOR_AUTHENTICATION_MFA_ENABLED_ALL_IAM_USERS_CONSOLE

多重身份验证 (MFA) 为传统凭据增添了一层额外的身份验证保证。启用 MFA 后,当用户登录 AWS 控制台时,系统会提示他们输入用户名和密码,以及通过物理或虚拟 MFA 令牌生成的身份验证码。建议为所有有控制台密码的帐号启用 MFA。

建议:确保已针对拥有控制台密码的所有 IAM 用户启用多重身份验证 (MFA)

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

AWS 控制台

  1. 登录 AWS 管理控制台并在“https://console.aws.amazon.com/iam/”上打开 IAM 控制台
  2. 在左侧窗格中,选择 Users
  3. User Name 列表中,选择目标 MFA 用户的名称。
  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 应用是否支持二维码,然后执行以下操作之一:
  • 使用该应用扫描二维码。例如,您可以选择摄像头图标或选择类似于“扫描二维码”的选项,然后使用设备的摄像头来扫描该二维码。
  • 在“管理 MFA 设备”向导中,选择“显示密钥”进行手动配置,然后在您的 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) 或所有 (-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

“root”用户帐号是 AWS 帐号中具有最高特权的用户。AWS 访问密钥提供对指定 AWS 账号的程序化访问。建议删除与“根”用户账号关联的所有访问密钥。

建议:确保不存在“根”用户账号访问权限密钥

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

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) 或所有 (-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 资源的入站流量和出站流量进行有状态过滤。不建议任何安全群组都允许对远程服务器管理端口进行不受限制的入站流量访问,例如对端口 22 的 SSH 访问和对端口 3389 的 RDP 的访问。

建议:确保任何安全群组都不允许从 ::/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 账号“根”用户的长期凭据。您可以使用访问密钥对对 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. 针对 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 代管式政策:

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 实例的监控角色,以启用增强型监控:

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. 在 Monitoring 中,为您的数据库实例或读取副本选择“启用增强型监控”。要关闭增强型监控,请选择“停用增强型监控”。
  3. 将“监控角色”属性设为您所创建的 IAM 角色,以允许 Amazon RDS 为您与 Amazon CloudWatch Logs 通信,或选择“默认”让 RDS 为您创建名为 rds-monitoring-role 的角色。
  4. 将“粒度”属性设置为为数据库实例或读取副本收集指标的各点之间的时间间隔(以秒为单位)。“粒度”属性可以设置为以下值之一: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"

通过设置 --monitoring-interval--monitoring-role-arn,修改 RDS 实例以启用增强型监控:

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. 在“Create option group”窗口中,提供以下内容:
    * Name: 在 AWS 帐号中必须是唯一的。只能使用字母、数字和连字符。
    * 说明:仅用于显示目的。
    * 引擎:选择您的数据库引擎。
    * 主要引擎版本:选择数据库引擎的主要版本。
  5. 选择“创建”。
  6. 选择您刚刚创建的选项组的名称。
  7. 选择“添加选项”。
  8. 从“Option name”(选项名称)列表中选择“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 Logs。
  6. 日志导出仅适用于支持发布到 CloudWatch Logs 的数据库引擎版本。
  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"

根据 DB Engine 创建包含必要参数的 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"
  }
]

修改参数组,以便根据 DB 引擎添加参数。本示例使用 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

应为多个可用性区域 (AZ) 配置 RDS 数据库实例。这样可以确保所存储数据的可用性。如果可用区可用性存在问题以及常规 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 选项启用多可用区支持。

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 且设置了 preferred 顶部维护窗口 和自动快照保留期

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

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 网页开发框架)
  • 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. 选择“预览更改,确认”。

如需了解如何从安全组中删除规则,请参阅适用于 Linux 实例的 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 recorder 角色没有 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. 在“常规配置”面板下方,打开“密钥轮替”标签页
  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. 当系统要求您确认时,请输入“confirm”。然后选择“确认”以保存更改。

AWS CLI

aws s3control put-public-access-block \
--account-id <value> \
--public-access-block-configuration '{"BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true}'

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

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 Policy Generator:

  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 帐号拥有的源存储分区和目标存储分区进行复制。除了可用性之外,您还应考虑其他系统强化设置。

建议:检查 S3 存储分区是否已启用跨区域复制

如需在 S3 存储桶上启用跨区域复制,请参阅 Amazon Simple Storage Service 用户指南中的为同一帐号所拥有的源存储桶和目标存储桶配置复制。对于“来源存储桶”,选择“应用到存储桶中的所有对象”。

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

S3 Bucket Server Side Encryption Enabled

API 中的类别名称:S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED

这会检查您的 S3 存储桶是否启用了 Amazon S3 默认加密,或者 S3 存储桶政策是否明确拒绝了未使用服务器端加密的放置对象请求。

建议:确保所有 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. 若要将由 Amazon S3 管理的密钥用于默认加密,请选择 AES-256。如需详细了解如何使用 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 Key Management Service 开发者指南
  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

检查 Amazon S3 存储分区是否使用 AWS Key Management Service (AWS KMS) 加密

建议:检查是否所有存储分区都使用 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. 前往笔记本实例。
  3. 删除启用了直接互联网访问权限的实例。选择实例,选择“操作”,然后选择“停止”。
  4. 实例停止后,选择“操作”,然后选择删除。
  5. 选择“创建笔记本实例”。提供配置详细信息。
  6. 展开网络部分,然后选择 VPC、子网和安全群组。在“直接互联网访问”下,选择“停用 - 通过 VPC 访问互联网”。
  7. 选择“创建笔记本实例”。

如需了解详情,请参阅 Amazon SageMaker 开发者指南中的“将笔记本实例连接到 VPC 中的资源”部分。

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

Secretsmanager Rotation Enabled Check

API 中的类别名称:SECRETSMANAGER_ROTATION_ENABLED_CHECK

检查存储在 AWS Secrets Manager 中的 Secret 是否配置了自动轮替。如果 Secret 未配置自动轮替,该控件将失败。如果您为 maximumAllowedRotationFrequency 参数提供了自定义值,则仅当 Secret 在指定的时间范围内自动轮替时,该控件才会通过。

Secrets Manager 可帮助您改善组织的安全状况。Secret 包括数据库凭据、密码和第三方 API 密钥。您可以使用 Secret Manager 集中存储 Secret、自动加密 Secret、控制对 Secret 的访问权限,以及安全自动轮替 Secret。

Secret Manager 可以轮替 Secret。您可以使用轮替将长期密钥替换为短期密钥。轮替 Secret 可限制未经授权的用户使用已泄露的 Secret 的时长。因此,您应经常轮替 Secret。如需详细了解轮替,请参阅《AWS Secrets Manager 用户指南》中的“轮替 AWS Secrets Manager 密文”。

建议:检查所有 AWS Secrets Manager 密钥是否已启用轮替

如需为 Secrets Manager Secret 启用自动轮替,请参阅《AWS Secrets Manager 用户指南》中的“使用控制台设置 AWS Secrets Manager Secret 的自动轮替”。您必须选择并配置用于轮替的 AWS Lambda 函数。

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

Sns Encrypted Kms

API 中的类别名称:SNS_ENCRYPTED_KMS

检查 SNS 主题是否使用 AWS KMS 进行静态加密。如果 SNS 主题未使用 KMS 密钥进行服务器端加密 (SSE),则控制会失败。

对静态数据进行加密可降低未经 AWS 身份验证的用户访问磁盘上存储的数据的风险。它还添加了另一组访问权限控制,以限制未经授权的用户访问数据的能力。例如,数据需要 API 权限才能解密,然后才能读取数据。SNS 主题应进行静态加密,以增加一道安全防线。

建议:检查所有 SNS 主题是否均已使用 KMS 加密

如需为 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 实例。有关说明,请参阅“适用于 Linux 实例的 Amazon EC2 用户指南”中的“更改实例的安全组”。

将新的安全群组分配给资源后,请从默认安全群组中移除所有入站和出站规则。有关说明,请参阅 Amazon VPC 用户指南中的删除安全群组规则。

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

Vpc Flow Logging Enabled All Vpcs

API 中的类别名称:VPC_FLOW_LOGGING_ENABLED_ALL_VPCS

VPC 流日志功能可用于捕获有关进出 VPC 中网络接口的 IP 流量的信息。创建流日志后,您可以在 Amazon CloudWatch Logs 中查看和检索其数据。建议为 VPC 的数据包“拒绝”启用 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 安全群组是否允许来自未经授权的端口的不受限制传入流量。控件状态确定如下:

如果您为 AuthorizationTcpPorts 使用默认值,则当安全群组允许从端口 80 和 443 以外的任何端口传输不受限制的传入流量时,该控件就会失败。

如果您为 authorizedTcpPort 或 authorizedUdpPort 提供自定义值,则如果安全群组允许从任何不公开端口传入不受限制的传入流量,则控制将失败。

如果未使用任何参数,则对于具有不受限制的入站流量规则的任何安全群组,该控件都会失败。

安全组对流向 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 隧道是否都处于 UP 状态。如果一个或两个隧道都处于 DOWN 状态,则控制失败。

建议:检查 AWS 站点到站点提供的两个 AWS VPN 隧道是否都处于 UP 状态

如需修改 VPN 隧道选项,请参阅《AWS Site-to-Site VPN 用户指南》中的修改站点到站点 VPN 隧道选项

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