本页面提供了参考指南和技术,了解如何使用 Security Command Center 修复 Security Health Analytics 的发现结果。
您需要足够的 Identity and Access Management (IAM) 角色来查看或修改发现结果,以及访问或修改 Google Cloud 资源。如果您遇到 在 Google Cloud 控制台,请联系管理员 若想了解角色,请参阅 访问权限控制。 如需解决资源错误,请阅读受影响产品的相关文档。
Security Health Analytics 修复
本部分介绍所有 Security Health Analytics 发现结果的修复说明。
对于映射到 CIS 基准的发现结果类型,补救指南 来自 Center for Internet Security (CIS), (除非另有说明)。如需了解详情,请参阅 检测器和合规性。
修复后停用发现结果
修复发现结果中的漏洞或配置错误相关问题后,Security Health Analytics 会在下次扫描该发现结果时自动将其状态设置为 INACTIVE
。至于 Security Health Analytics 需要多久才会将修复后的发现结果设置为 INACTIVE
状态,这取决于您修复该发现结果的时间以及系统安排检测到该发现结果的扫描的时间。
如果扫描检测到受发现结果影响的资源被删除,Security Health Analytics 也会将该发现结果的状态设置为 INACTIVE
。如果您要移除已删除资源的发现结果
,同时等待 Security Health Analytics 检测
您可以忽略该发现结果。如需忽略发现结果,请参阅
在 Security Command Center 中忽略发现结果。
请勿使用忽略功能隐藏现有资源的修复性发现结果。
如果问题反复出现,并且 Security Health Analytics 恢复了 ACTIVE
发现结果的状态,您可能看不到重新启用的发现结果,因为
系统会将已忽略的发现结果从任何指定 NOT mute="MUTED"
的发现结果查询(例如默认发现结果查询)中排除。
如需了解扫描间隔时间,请参阅 Security Health Analytics 扫描类型。
Access Transparency disabled
API 中的类别名称:ACCESS_TRANSPARENCY_DISABLED
Access Transparency 会记录 Google Cloud 员工何时访问您的组织中的项目以提供支持。启用 Access Transparency 以记录 Google Cloud 的哪位员工在什么时候、出于何种原因访问您的信息。如需了解详情,请参阅 Access Transparency。
要为某个项目启用 Access Transparency,该项目必须与 结算账号。
所需的角色
如需获得执行此任务所需的权限,请让您的管理员在组织级层为您授予 Access Transparency Admin (roles/axt.admin
) IAM 角色。如需详细了解如何授予角色,请参阅管理访问权限。
此预定义角色可提供执行此任务所需的 axt.labels.get
和 axt.labels.set
权限。您也可以使用自定义角色或其他预定义角色来获取这些权限。
补救步骤
如需修复此发现结果,请完成以下步骤:
检查您的组织级权限:
进入 Google Cloud 控制台中的 Identity and Access Management 页面。
如果系统提示,请在选择器菜单中选择 Google Cloud 组织。
使用选择器菜单选择组织内的任何 Google Cloud 项目。
Access Transparency 是在 Google Cloud 项目页面上配置的,但此功能针对整个组织启用。
转到 IAM 和管理 > 设置页面。
点击启用 Access Transparency。
AlloyDB auto backup disabled
API 中的类别名称:ALLOYDB_AUTO_BACKUP_DISABLED
AlloyDB for PostgreSQL 集群未启用自动备份。
为了帮助防止数据丢失,请为您的集群开启自动备份功能。如需了解详情,请参阅配置其他自动备份。
如需修复此发现结果,请完成以下步骤:
前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。
点击 Resource Name 列中的集群。
点击数据保护。
在自动备份政策部分下,点击 自动备份行。
选中自动备份复选框。
点击更新。
AlloyDB backups disabled
API 中的类别名称:ALLOYDB_BACKUPS_DISABLED
AlloyDB for PostgreSQL 集群未启用自动备份或连续备份。
为防止数据丢失,请为以下各项开启自动备份或持续备份: 集群如需了解详情,请参阅配置其他备份。
如需修复此发现结果,请完成以下步骤:
前往 Google Cloud 控制台。
在资源名称列中,点击需要访问的集群的名称 结果。
点击数据保护。
设置备份政策。
AlloyDB CMEK disabled
API 中的类别名称:ALLOYDB_CMEK_DISABLED
AlloyDB 集群未使用客户管理的加密密钥 (CMEK)。
借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。如需了解详情,请参阅 CMEK 简介。CMEK 会产生与 Cloud KMS 相关的额外费用。
如需修复此发现结果,请完成以下步骤:
前往 Google Cloud 控制台。
在资源名称列中,点击需要访问的集群的名称 结果。
点击创建备份。设置备用 ID。
点击创建。
在备份/恢复部分下,点击您选择的备份 ID 条目旁边的恢复。
设置新的集群 ID 和网络。
点击高级加密选项。选择要用于对新集群进行加密的 CMEK。
点击恢复。
AlloyDB log min error statement severity
API 中的类别名称:ALLOYDB_LOG_MIN_ERROR_STATEMENT_SEVERITY
AlloyDB for PostgreSQL 实例未将 log_min_error_statement
数据库标志设置为 error
或其他建议的值。
log_min_error_statement
标志可控制导致
错误情况会记录在服务器日志中。指定的
或更高级别的 API。严重级别越高,记录的消息数量就越少。如果设置为过高的严重级别,系统可能不会记录错误消息。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。
点击资源名称列中的集群。
在集群中的实例部分下,点击相应实例的修改。
点击高级配置选项。
在标志部分下,设置
log_min_error_statement
数据库标志,其中包含以下某一项 建议的值(具体取决于贵组织的日志记录政策)。debug5
debug4
debug3
debug2
debug1
info
notice
warning
error
点击更新实例。
AlloyDB log min messages
API 中的类别名称:ALLOYDB_LOG_MIN_MESSAGES
AlloyDB for PostgreSQL 实例没有 log_min_messages
数据库标志的值至少为 warning
。
log_min_messages
标志用于控制记录哪些邮件级别
服务器日志严重级别越高,记录的消息数量就越少。如果阈值设置得过低,可能会导致日志存储大小和长度增加,从而难以找到实际错误。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。
点击资源名称列中的集群。
在集群中的实例部分下,点击相应实例的修改。
点击高级配置选项。
在标志部分下,根据组织的日志记录政策,将
log_min_messages
数据库标志的值设置为下列建议值之一。debug5
debug4
debug3
debug2
debug1
info
notice
warning
点击更新实例。
AlloyDB log error verbosity
API 中的类别名称:ALLOYDB_LOG_ERROR_VERBOSITY
AlloyDB for PostgreSQL 实例未将 log_error_verbosity
数据库标志设置为 default
或其他更宽松的值。
log_error_verbosity
标志用于控制记录的消息的详细程度。详细程度越高,记录的消息就越详细。
建议将此标志设置为 default
或其他更宽松的值。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
前往 Google Cloud 控制台。
点击资源名称列中的集群。
在集群中的实例部分下,点击相应实例的修改。
点击高级配置选项。
在标志部分下,根据组织的日志记录政策,将
log_error_verbosity
数据库标志的值设置为下列建议值之一。default
verbose
点击更新实例。
AlloyDB Public IP
API 中的类别名称:ALLOYDB_PUBLIC_IP
AlloyDB for PostgreSQL 数据库实例具有公共 IP 地址。
为了缩小组织的受攻击面,请使用专用 IP 地址,而不是使用公共 IP 地址。专用 IP 地址可提高网络安全性, 应用的延迟
如需修复此发现结果,请完成以下步骤:
前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。
在资源名称列中,点击需要访问的集群的名称 结果。
在集群中的实例部分下,点击相应实例的修改。
在连接部分下,取消选中启用公共 IP 对应的复选框。
点击更新实例。
AlloyDB SSL not enforced
API 中的类别名称:ALLOYDB_SSL_NOT_ENFORCED
AlloyDB for PostgreSQL 数据库实例不需要所有传入 使用 SSL。
为避免在未加密通信中泄露所传输的敏感数据,连至您的 AlloyDB 数据库实例的所有传入连接都应使用 SSL。详细了解如何 配置 SSL/TLS。
如需修复此发现结果,请完成以下步骤:
前往 Google Cloud 控制台中的 AlloyDB for PostgreSQL 集群页面。
在资源名称列中,点击需要访问的集群的名称 结果。
在集群中的实例部分下,点击 实例。
在网络安全部分下,点击需要 SSL 加密对应的复选框。
点击更新实例。
Admin service account
API 中的类别名称:ADMIN_SERVICE_ACCOUNT
组织或项目中的服务账号拥有 Admin、Owner 或 Editor 权限。这些角色拥有广泛的权限,不应分配给服务账号。如需了解服务账号及其可用角色,请参阅服务账号。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 IAM 页面。
对于发现结果中的每个主账号:
- 点击主账号旁边的 修改主账号。
- 如需移除权限,请点击相应角色旁边的 删除角色。
- 点击保存。
Alpha cluster enabled
API 中的类别名称:ALPHA_CLUSTER_ENABLED
Google Kubernetes Engine (GKE) 集群已启用 Alpha 版集群功能。
Alpha 版集群可让尝鲜者在新功能公开发布之前用工作负载进行相关试验。Alpha 版集群已启用所有 GKE API 功能,但它们不在 GKE 服务等级协议 (SLA) 的涵盖范围内,不会收到安全更新,已停用节点自动升级和节点自动修复功能,并且无法升级。它们还会在 30 天后自动删除。
如需修复此发现结果,请完成以下步骤:
Alpha 版集群无法停用。您必须创建一个停用 Alpha 版功能的新集群。
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
点击创建。
在要创建的集群类型旁边选择配置。
在功能标签页下,确保已停用在此集群中启用 Kubernetes Alpha 版功能。
点击创建。
如需将工作负载迁移到新集群,请参阅将工作负载迁移到不同的机器类型。
如需删除原始集群,请参阅删除集群。
API key APIs unrestricted
API 中的类别名称:API_KEY_APIS_UNRESTRICTED
有些 API 密钥使用的过于广泛。
不受限制的 API 密钥会带来安全方面的问题,因为用户可以从存储密钥的设备上检索这样的密钥,或者可以公开查看这样的密钥,例如从浏览器中查看。遵循最小权限原则,将 API 密钥配置为仅调用应用需要的 API。如需了解详情,请参阅应用 API 密钥限制。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 API 密钥页面。
对于每个 API 密钥:
- 在 API 密钥部分中,在需要限制 API 的每个 API 密钥对应的行中,点击 操作。
- 在操作菜单中,点击修改 API 密钥。此时会打开修改 API 密钥页面。
- 在 API 限制部分中,选择限制 API。此时将显示选择 API 下拉菜单。
- 在选择 API 下拉列表中,选择要允许的 API。
- 点击保存。设置最多可能需要五分钟才能生效。
API key apps unrestricted
API 中的类别名称:API_KEY_APPS_UNRESTRICTED
有些 API 密钥可以不受限制地使用,允许任何不受信任的应用使用。
不受限制的 API 密钥会带来安全方面的问题,因为用户可以在存储密钥的设备上检索这样的密钥,或者可以公开查看这样的密钥,例如从浏览器中查看。遵循最小权限原则,将 API 密钥的使用范围限制为受信任的主机、HTTP 引荐来源网址和应用。如需了解详情,请参阅应用 API 密钥限制。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 API 密钥页面。
对于每个 API 密钥:
- 在 API 密钥部分中,在需要限制应用的每个 API 密钥对应的行中,点击 操作。
- 在操作菜单中,点击修改 API 密钥。此时会打开修改 API 密钥页面。
- 在修改 API 密钥页面的应用限制下,选择限制类别。您可以为每个密钥设置一项应用限制。
- 在选择限制时显示的添加一项字段中,点击添加一项以根据应用的需要添加限制。
- 添加完各项后,点击完成。
- 点击保存。
API key exists
API 中的类别名称:API_KEY_EXISTS
项目使用 API 密钥,而不是标准身份验证。
API 密钥的安全性低于其他身份验证方法,因为它们是简单的加密字符串,容易被他人发现和使用。用户可以在存储密钥的设备上检索这样的密钥,或者可以公开查看这样的密钥,例如从浏览器中查看。此外,API 密钥不会唯一标识发出请求的用户或应用。作为替代方案,您可以将标准身份验证流程与服务账号或用户账号搭配使用。
如需修复此发现结果,请完成以下步骤:
- 确保为您的应用配置了身份验证替代形式。
转到 Google Cloud 控制台中的 API 凭据页面。
在要删除的每个 API 密钥所在行的 API 密钥部分中,点击
操作。在操作菜单中,点击删除 API 密钥。
API key not rotated
API 中的类别名称:API_KEY_NOT_ROTATED
API 密钥已经超过 90 天没有轮替。
API 密钥不会过期,因此,如果密钥被窃取,它可以无限期地使用,除非项目所有者撤消或轮替密钥。通过频繁地重新生成 API 密钥,失窃的 API 密钥可用于访问被盗用账号或已终止账号中的数据的时间会缩短。至少每 90 天轮替一次 API 密钥。如需了解详情,请参阅 管理 API 密钥的最佳实践。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 API 密钥页面。
对于每个 API 密钥:
- 在 API 密钥部分中,找到您需要的每个 API 密钥所对应的行 如需进行旋转,请点击 操作。
- 在操作菜单中,点击修改 API 密钥。此时会打开修改 API 密钥页面。
- 在修改 API 密钥页面上,如果创建日期字段中的日期超过 90 天,请点击 重新生成密钥。系统会生成一个新密钥。
- 点击保存。
- 为确保您的应用继续无中断地运行,请更新应用以使用新的 API 密钥。旧的 API 密钥在 24 小时内继续有效,之后便会永久停用。
Audit config not monitored
API 中的类别名称:AUDIT_CONFIG_NOT_MONITORED
日志指标和提醒未配置为监控审核配置更改。
Cloud Logging 会生成管理员活动与数据访问日志,这些日志能用来进行安全分析、资源更改追踪及合规性审核。通过监控审核配置更改,您可以确保项目中的所有活动随时都可以进行审核。如需了解详情,请参阅基于日志的指标概览。
如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
要修复此发现结果,请在必要时创建指标以及提醒政策:
创建指标
进入 Google Cloud 控制台中的基于日志的指标页面。
点击创建指标。
在指标类型下,选择计数器。
在详情下:
- 设置日志指标名称。
- 添加说明
- 将单位设为 1。
在过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:
protoPayload.methodName="SetIamPolicy" AND protoPayload.serviceData.policyDelta.auditConfigDeltas:*
点击创建指标。您将看到确认。
创建提醒政策
-
在 Google Cloud 控制台中,转到基于日志的指标页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 在用户定义的指标部分下,选择您在上一部分中创建的指标。
-
点击更多
,然后点击根据指标创建提醒。系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。
- 点击下一步。
- 查看预先填充的设置。您可能需要修改阈值。
- 点击条件名称,然后输入条件的名称。
- 点击下一步。
如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定。
如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。
- 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
- 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
- 点击提醒名称,然后输入提醒政策的名称。
- 点击创建政策。
Audit logging disabled
API 中的类别名称:AUDIT_LOGGING_DISABLED
此发现结果不适用于项目级激活。
一项或多项 Google Cloud 服务停用了审核日志记录,或者一个或多个主账号不进行数据访问审核日志记录。
为所有服务启用 Cloud Logging,以跟踪所有管理员活动,读取 对用户数据的访问权限以及对用户数据的写入权限。 如果信息量很大,Cloud Logging 的使用费有可能会非常高。为了了解 服务的使用情况及其费用,请参阅 优化费用:云运维。
如果任何主账号不进行默认数据访问审核日志记录配置或任何单独服务的日志记录配置的数据访问审核日志记录,请改为要进行数据访问审核日志记录。
如需修复此发现结果,请完成以下步骤:
转到数据访问审核日志默认配置页面 Google Cloud 控制台。
在日志类型标签页上,激活默认配置中的数据访问审核日志记录:
- 选择管理员读取、数据读取和数据写入。
- 点击保存。
在豁免的主账号标签页上,从默认配置中移除所有豁免的用户:
- 点击每个名称旁边的 删除,移除列出的每个主账号。
- 点击保存。
转到审核日志页面。
从各项服务的数据访问审核日志配置中移除任何豁免的主账号。
- 在数据访问审核日志配置下,对于显示豁免的主账号的每项服务,点击相应服务。系统会打开服务的审核日志配置面板。
- 在豁免主账号标签页上,移除所有豁免主账号 方法是点击每个名称旁边的 删除。
- 点击保存。
Auto backup disabled
API 中的类别名称:AUTO_BACKUP_DISABLED
Cloud SQL 数据库未启用自动备份。
为避免数据丢失,请为 SQL 实例启用自动备份。如需了解详情,请参阅创建和管理按需备份和自动备份。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 SQL 实例备份页面。
点击设置旁边的
修改。选中自动备份复选框。
在下拉菜单中,选择数据自动备份的时段。
点击保存。
Auto repair disabled
API 中的类别名称:AUTO_REPAIR_DISABLED
Google Kubernetes Engine (GKE) 集群的自动修复功能已停用,此功能可使节点保持正常运行状态。
启用该功能后,GKE 会定期检查集群中每个节点的运行状况。如果某个节点在较长时间内连续多次无法通过健康检查,则 GKE 会为该节点启动修复流程。如需了解详情,请参阅自动修复节点。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
点击节点标签页。
对于每个节点池:
- 点击节点池的名称转到其详情页面。
- 点击 修改。
- 在管理下,选择启用自动修复。
- 点击保存。
Auto upgrade disabled
API 中的类别名称:AUTO_UPGRADE_DISABLED
GKE 集群的自动升级功能已停用,此功能会保持集群和节点池使用 Kubernetes 的最新稳定版。
如需了解详情,请参阅自动升级节点。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
在集群列表中,点击集群的名称。
点击节点标签页。
对于每个节点池:
- 点击节点池的名称转到其详情页面。
- 点击 修改。
- 在管理下,选择启用自动升级。
- 点击保存。
BigQuery table CMEK disabled
API 中的类别名称:BIGQUERY_TABLE_CMEK_DISABLED
BigQuery 表未配置为使用客户管理的加密密钥 (CMEK)。
借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google Cloud 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。如需了解详情,请参阅使用 Cloud KMS 密钥保护数据。
如需修复此发现结果,请完成以下步骤:
如需设置用于加密数据集中的所有新表的默认 CMEK 密钥,请参阅设置数据集默认密钥。
了解此发现结果类型的Binary authorization disabled
API 中的类别名称:BINARY_AUTHORIZATION_DISABLED
GKE 集群上已停用 Binary Authorization。
Binary Authorization 包含一项可选功能,只允许将开发过程中由可信授权方签名的容器映像部署到集群中,以此保护供应链安全。通过执行基于签名的部署,您可以确保仅允许部署经过验证的映像,从而对容器环境实施更严格的控制。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
在 Security 部分,点击
Edit(在 Binary Authorization 行。如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。
在对话框中,选择启用 Binary Authorization。
点击保存更改。
转到 Binary Authorization 设置页面。
确保已配置需要证明者的政策,并且未将项目默认规则配置为允许所有映像。如需了解详情,请参阅为 GKE 进行设置。
如需确保允许部署违反政策的映像并将违规事件记录到 Cloud Audit Logs 中,您可以启用试运行模式。
Bucket CMEK disabled
API 中的类别名称:BUCKET_CMEK_DISABLED
存储桶不使用客户管理的加密密钥 (CMEK) 进行加密。
对存储桶设置默认 CMEK 后,您可以更好地控制数据访问权限。如需了解详情。请参阅客户管理的加密密钥。
要修复此发现结果,请遵循使用客户管理的加密密钥为存储桶使用 CMEK。CMEK 会产生与 Cloud KMS 相关的额外费用。
了解此发现结果类型Bucket IAM not monitored
API 中的类别名称:BUCKET_IAM_NOT_MONITORED
日志指标和提醒未配置为监控 Cloud Storage IAM 权限更改。
监控 Cloud Storage 存储桶权限的更改可帮助您识别权限过高的用户或可疑活动。如需了解详情,请参阅基于日志的指标概览。
如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。如需了解该服务的使用情况及其费用,请参阅优化费用:Cloud Operations。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
创建指标
进入 Google Cloud 控制台中的基于日志的指标页面。
点击创建指标。
在指标类型下,选择计数器。
在详情下:
- 设置日志指标名称。
- 添加说明
- 将单位设为 1。
在过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:
resource.type=gcs_bucket AND protoPayload.methodName="storage.setIamPermissions"
点击创建指标。您将看到确认。
创建提醒政策
-
在 Google Cloud 控制台中,转到基于日志的指标页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 在用户定义的指标部分下,选择您在上一部分中创建的指标。
-
点击更多
,然后点击根据指标创建提醒。系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。
- 点击下一步。
- 查看预先填充的设置。您可能需要修改阈值。
- 点击条件名称,然后输入条件的名称。
- 点击下一步。
如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定。
如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。
- 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
- 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
- 点击提醒名称,然后输入提醒政策的名称。
- 点击创建政策。
Bucket logging disabled
API 中的类别名称:BUCKET_LOGGING_DISABLED
有一个存储桶未启用日志记录。
为了帮助调查安全问题和监控存储空间使用情况,请为 Cloud Storage 存储桶启用访问日志和存储信息。 访问日志提供向指定存储桶发出的所有请求的信息,而存储日志提供该存储桶的存储空间使用情况的信息。
要修复此发现结果,请按使用情况日志和存储日志 指南为 Security Health Analytics 发现结果指示的存储桶设置日志记录。
了解此发现结果类型的Bucket policy only disabled
API 中的类别名称:BUCKET_POLICY_ONLY_DISABLED
未配置统一存储桶级访问权限(以前称为“仅限存储桶政策”)。
统一存储桶级访问权限通过停用对象级权限 (ACL) 来简化存储桶访问权限控制。启用后,只有存储桶级 IAM 权限会授予对存储桶及其包含的对象的访问权限。如需了解详情,请参阅统一存储桶级访问权限。
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中,转到 Cloud Storage 浏览器页面。
在存储桶列表中,点击所需存储桶的名称。
点击配置标签页。
在权限下方的访问权限控制行中,点击
修改访问权限控制模型。在对话框中,选择统一。
点击保存。
Cloud Asset API disabled
API 中的类别名称:CLOUD_ASSET_API_DISABLED
项目未启用 Cloud Asset Inventory 服务。
如需修复此发现结果,请完成以下步骤:
进入 Google Cloud 控制台中的 API 库页面。
搜索
Cloud Asset Inventory
。选择 Cloud Asset API 服务的结果。
确保显示了 API 已启用。
Cluster logging disabled
API 中的类别名称:CLUSTER_LOGGING_DISABLED
没有为 GKE 群集启用日志记录功能。
为帮助调查安全问题和监控使用情况,请在集群上启用 Cloud Logging。
如果信息量很大,Cloud Logging 的使用费有可能会非常高。如需了解服务的使用情况及其费用,请参阅优化费用:Cloud Operations。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
选择 Security Health Analytics 发现结果中列出的集群。
点击
修改。如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。
在旧版 Stackdriver Logging 或 Stackdriver Kubernetes Engine Monitoring 下拉列表中,选择 启用。
这些选项不兼容。确保您仅使用 Stackdriver Kubernetes Engine Monitoring,或将旧版 Stackdriver Logging 与旧版 Stackdriver Monitoring 结合使用。
点击保存。
Cluster monitoring disabled
API 中的类别名称:CLUSTER_MONITORING_DISABLED
GKE 集群上已停用 Monitoring。
为帮助调查安全问题和监控使用情况,请在集群上启用 Cloud Monitoring。
如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
选择 Security Health Analytics 发现结果中列出的集群。
点击
修改。如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。
在旧版 Stackdriver Monitoring 或 Stackdriver Kubernetes Engine Monitoring 下拉列表中,选择 启用。
这些选项不兼容。确保您仅使用 Stackdriver Kubernetes Engine Monitoring 或将旧版 Stackdriver Monitoring 与旧版 Stackdriver Logging 结合使用。
点击保存。
Cluster private Google access disabled
API 中的类别名称:CLUSTER_PRIVATE_GOOGLE_ACCESS_DISABLED
集群主机未配置为仅使用内部专用 IP 地址来访问 Google API。
专用 Google 访问通道使只具有专用内部 IP 地址的虚拟机实例可以访问 Google API 和服务的公共 IP 地址。如需了解详情,请参阅配置 Google 专用访问通道。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中,转到 Virtual Private Cloud 网络页面。
在网络列表中,点击所需网络的名称。
在 VPC 网络详情页面上,点击子网标签页。
在子网列表中,点击与发现结果中的 Kubernetes 集群关联的子网的名称。
在子网详情页面上,点击
修改。在专用 Google 访问通道下,选择开启。
点击保存。
要从其外部流量仅流向 Google API 的虚拟机实例移除公共(外部)IP 地址,请参阅取消分配静态外部 IP 地址。
Cluster secrets encryption disabled
API 中的类别名称:CLUSTER_SECRETS_ENCRYPTION_DISABLED
GKE 集群上已停用应用层 Secret 加密。
应用层 Secret 加密可确保 GKE Secret 使用 Cloud KMS 密钥进行加密。此功能为敏感数据提供了一层额外的安全防护,例如用户定义的 Secret 和集群操作所需的 Secret(如服务账号密钥),此类 Secret 均存储在 etcd 中。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud KMS 密钥页面。
审核您的应用密钥或创建数据库加密密钥 (DEK)。如需了解详情,请参阅创建 Cloud KMS 密钥。
转到 Kubernetes 集群页面
选择发现结果中的集群。
在安全下的应用层 Secret 加密字段中,点击
修改应用层 Secret 加密。选中启用应用层 Secret 加密复选框,然后选择您创建的 DEK。
点击保存更改。
Cluster shielded nodes disabled
API 中的类别名称:CLUSTER_SHIELDED_NODES_DISABLED
集群未启用安全强化型 GKE 节点。
在没有安全强化型 GKE 节点的情况下,攻击者可能会利用 Pod 中的漏洞来泄露引导凭据,并模拟集群中的节点。此漏洞可向攻击者授予对集群密钥的访问权限。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
选择发现结果中的集群。
在安全下的安全强化型 GKE 节点字段中,点击
修改安全强化型 GKE 节点。选中启用安全强化型 GKE 节点复选框。
点击保存更改。
Compute project wide SSH keys allowed
API 中的类别名称:COMPUTE_PROJECT_WIDE_SSH_KEYS_ALLOWED
使用项目范围的 SSH 密钥,允许登录项目中的所有实例。
使用项目范围的 SSH 密钥可简化 SSH 密钥管理,但如果遭破解,就会构成安全风险,导致项目中的所有实例受影响。您应该使用实例专用 SSH 密钥,这样在 SSH 密钥被破解时可以减小攻击面。如需了解详情,请参阅管理元数据中的 SSH 密钥。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
在实例列表中,点击发现结果中的实例的名称。
在虚拟机实例详情页面上,点击
修改。在 SSH 密钥下,选择屏蔽项目范围的 SSH 密钥。
点击保存。
Compute Secure Boot disabled
API 中的类别名称:COMPUTE_SECURE_BOOT_DISABLED
安全强化型虚拟机未启用安全启动。
使用安全启动功能可以保护虚拟机免受 rootkit 和 bootkit 攻击。默认情况下,Compute Engine 不会启用安全启动,因为某些未签名的驱动程序和低级别软件不兼容。如果您的虚拟机未使用不兼容的软件,并且在启动时启用了安全启动功能,那么 Google 建议您使用该功能。如果您将第三方模块与 Nvidia 驱动程序搭配使用,在启用安全启动之前,请确保它们与安全启动功能兼容。
如需了解详情,请参阅安全启动。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
在实例列表中,点击发现结果中的实例的名称。
在虚拟机实例详情页面上,点击
停止。实例停止后,点击
修改。在安全强化型虚拟机下,选择开启安全启动。
点击保存。
点击
启动以启动实例。
Compute serial ports enabled
API 中的类别名称:COMPUTE_SERIAL_PORTS_ENABLED
为实例启用了串行端口,允许连接到实例的串行控制台。
如果您针对实例启用交互式串行控制台,客户端可以尝试从任何 IP 地址连接该实例。因此,应停用交互式串行控制台支持。如需了解详情,请参阅针对项目启用访问权限。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
在实例列表中,点击发现结果中的实例的名称。
在虚拟机实例详情页面上,点击
修改。在远程访问下,取消选中允许连接到串行端口。
点击保存。
Confidential Computing disabled
API 中的类别名称:CONFIDENTIAL_COMPUTING_DISABLED
Compute Engine 实例未启用机密计算。
机密计算可通过加密使用中的数据,在端到端加密案例中增添“第三大支柱”。借助机密计算和 AMD 安全加密虚拟化 (SEV) 提供的机密执行环境,Google Cloud 会确保在处理期间,对内存中的敏感代码和其他数据进行加密。
机密计算仅在创建实例时启用。因此,您必须删除当前实例并创建一个新实例。
如需了解详情,请参阅机密虚拟机和 Compute Engine。
如需修复此发现结果,请完成以下步骤:
转到 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 概览。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
在集群列表中,点击发现结果中的集群的名称。
点击节点标签页。
对于每个节点池:
- 点击节点池的名称转到其详情页面。
- 点击 修改。
- 在节点 -> 映像类型下,点击更改。
- 选择 Container-Optimized OS,然后点击更改。
- 点击保存。
Custom role not monitored
API 中的类别名称:CUSTOM_ROLE_NOT_MONITORED
日志指标和提醒未配置为监控自定义角色更改。
IAM 提供预定义角色和自定义角色,可授予对特定 Google Cloud 资源的访问权限。通过监控角色创建、删除和更新活动,您可以在早期阶段确定特权过高的角色。如需了解详情,请参阅基于日志的指标概览。
如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。如需了解该服务的使用情况及其费用,请参阅优化费用:Cloud Operations。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
创建指标
进入 Google Cloud 控制台中的基于日志的指标页面。
点击创建指标。
在指标类型下,选择计数器。
在详情下:
- 设置日志指标名称。
- 添加说明
- 将单位设为 1。
在过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:
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")
点击创建指标。您将看到确认。
创建提醒政策
-
在 Google Cloud 控制台中,转到基于日志的指标页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 在用户定义的指标部分下,选择您在上一部分中创建的指标。
-
点击更多
,然后点击根据指标创建提醒。系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。
- 点击下一步。
- 查看预先填充的设置。您可能需要修改阈值。
- 点击条件名称,然后输入条件的名称。
- 点击下一步。
如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定。
如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。
- 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
- 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
- 点击提醒名称,然后输入提醒政策的名称。
- 点击创建政策。
Dataproc CMEK disabled
API 中的类别名称:DATAPROC_CMEK_DISABLED
创建的 Dataproc 集群未经加密 配置 CMEK借助 CMEK,您在 Cloud Key Management Service 中创建和管理的密钥会封装 Google Cloud 用于加密数据的密钥,从而使您能够更好地控制对数据的访问。
如需修复此发现结果,请完成以下步骤:
进入 Google Cloud 控制台中的 Dataproc 集群页面。
选择您的项目,然后点击创建集群。
在管理安全设置部分中,点击加密,然后选择客户管理的密钥。
从列表中选择客户管理的密钥。
如果您没有客户管理的密钥,则需要创建一个供使用。如需了解详情,请参阅客户管理的加密密钥。
确保所选的 KMS 密钥将 Cloud KMS CryptoKey Encrypter/Decrypter 角色分配给 Dataproc 集群服务账号(“serviceAccount:service-project_number@compute-system.iam.gserviceaccount.com”)。
创建集群后,将所有工作负载从较旧的集群迁移到新集群。
前往“Dataproc 集群”,然后选择您的项目。
选择旧集群,然后点击
删除集群。对所选项目中可用的其他 Dataproc 集群重复执行上述步骤。
Dataproc image outdated
API 中的类别名称:DATAPROC_IMAGE_OUTDATED
创建 Dataproc 集群时使用了受 Apache Log4j 2 实用程序(CVE-2021-44228 和 CVE-2021-45046)中的安全漏洞影响的 Dataproc 映像版本。
此检测器可通过检查 Cluster
的 config
属性中的 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 用于现有数据,请执行以下操作:
- 创建新数据集。
- 在您创建的数据集上设置默认 CMEK 密钥。
- 如需将表复制到启用了 CMEK 的数据集,请按照复制表中的说明操作。
- 成功复制数据后,删除原始数据集。
Default network
API 中的类别名称:DEFAULT_NETWORK
项目中存在默认网络。
默认网络已自动创建可能不安全的防火墙规则和网络配置。如需了解详情,请参阅默认网络。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 VPC 网络页面。
在网络列表中,点击默认网络的名称。
在 VPC 网络详情页面中,点击
删除 VPC 网络。如需使用自定义防火墙规则创建新网络,请参阅创建网络。
Default service account used
API 中的类别名称:DEFAULT_SERVICE_ACCOUNT_USED
Compute Engine 实例配置为使用默认服务账号。
默认的 Compute Engine 服务账号具有项目的 Editor 角色,可以对大多数 Google Cloud 服务进行读写操作。如需防范提升权限和未经授权的访问,请勿使用默认的 Compute Engine 服务账号。请创建新的服务账号,并仅分配实例需要的权限。如需了解角色和权限,请参阅访问权限控制。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
选择与 Security Health Analytics 发现结果相关的实例。
在加载的实例详情页面上,点击
停止。实例停止后,点击
修改。在服务账号部分下,选择默认 Compute Engine 服务账号以外的服务账号。您可能需要先创建新的服务账号。如需了解 IAM 角色和权限,请参阅访问权限控制。
点击保存。新配置会显示在实例详情页面上。
Disk CMEK disabled
API 中的类别名称:DISK_CMEK_DISABLED
此虚拟机上的磁盘未使用客户管理的加密密钥 (CMEK) 进行加密。
借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google Cloud 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。如需了解详情,请参阅使用 Cloud KMS 密钥保护资源。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Compute Engine 磁盘页面。
在磁盘列表中,点击发现结果中指明的磁盘的名称。
在管理磁盘页面上,点击
删除。如需创建启用 CMEK 的新磁盘,请参阅使用您自己的密钥加密新的永久性磁盘。CMEK 会产生与 Cloud KMS 相关的额外费用。
Disk CSEK disabled
API 中的类别名称:DISK_CSEK_DISABLED
此虚拟机上的磁盘未使用客户提供的加密密钥 (CSEK) 进行加密。关键虚拟机的磁盘应使用 CSEK 进行加密。
如果您提供自己的加密密钥,Compute Engine 会使用您的密钥来保护 Google 生成的用于加密和解密数据的密钥。如需了解详情,请参阅客户提供的加密密钥。CSEK 会产生与 Cloud KMS 相关的额外费用。
如需修复此发现结果,请完成以下步骤:
删除和创建磁盘
您只能使用自己的密钥加密新的永久性磁盘。您无法使用自己的密钥加密现有的永久性磁盘。
转到 Google Cloud 控制台中的 Compute Engine 磁盘页面。
在磁盘列表中,点击发现结果中指明的磁盘的名称。
在管理磁盘页面上,点击
删除。如需创建启用 CSEK 的新磁盘,请参阅使用客户提供的加密密钥加密磁盘。
完成剩余步骤以启用检测器。
启用检测器
转到 Google Cloud 控制台中的 Security Command Center 资产页面。
在快速过滤条件面板的资源类型部分中,选择 compute.Disk。
如果您没有看到 compute.Disk,请点击查看更多,在搜索字段中输入
Disk
,然后点击应用。结果面板会更新,仅显示
compute.Disk
资源类型的实例。在显示名称列中,选中要与 CSEK 结合使用的磁盘名称旁边的复选框,然后点击设置安全标记。
在对话框中,点击添加标记。
在键字段中,输入
enforce_customer_supplied_disk_encryption_keys
;在值字段中输入true
。点击保存。
DNS logging disabled
API 中的类别名称:DNS_LOGGING_DISABLED
监控 Cloud DNS 日志可让您了解 VPC 网络中客户端请求的 DNS 名称。您可以监控这些日志以查看是否存在异常域名,并针对威胁情报进行评估。我们建议为 VPC 网络启用 DNS 日志记录。
如果信息量很大,Cloud DNS日志记录的使用费有可能会非常高。如需了解服务使用情况及其费用,请参阅 Google Cloud Observability 价格:Cloud Logging。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 VPC 网络页面。
在网络列表中,点击 VPC 网络的名称。
创建新的服务器政策(如果不存在),或修改现有政策:
如果网络没有 DNS 服务器政策,请完成以下步骤:
- 点击 修改。
- 在 DNS 服务器政策字段中,点击创建新的服务器政策。
- 为新服务器政策输入名称。
- 将日志设置为开启。
- 点击保存。
如果网络具有 DNS 服务器政策,请完成以下步骤:
- 在 DNS 服务器政策字段中,点击 DNS 政策的名称。
- 点击 修改政策。
- 将日志设置为开启。
- 点击保存。
DNSSEC disabled
API 中的类别名称:DNSSEC_DISABLED
停用了 Cloud DNS 区域的域名系统安全扩展 (DNSSEC)。
DNSSEC 可通过加密签名 DNS 记录来验证 DNS 响应并缓解 DNS 黑客攻击和中间人攻击等风险。您应启用 DNSSEC。如需了解详情,请参阅 DNS 安全扩展 (DNSSEC) 概览。
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中,转到 Cloud DNS 页面。
找到发现结果中指明的 DNS 区域所在的行。
点击该行中的 DNSSEC 设置,然后在 DNSSEC 下,选择开启。
阅读显示的对话框。如果满意,请点击启用。
Egress deny rule not set
API 中的类别名称:EGRESS_DENY_RULE_NOT_SET
防火墙上未设置出站流量拒绝规则。
拒绝所有出站网络流量的防火墙会阻止任何不需要的出站网络连接,其他防火墙明确授权的连接除外。如需了解详情,请参阅出站情景。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
点击创建防火墙规则。
为防火墙命名,并视需要添加说明。
为流量方向选择出站。
在对匹配项执行的操作下,选择拒绝。
在目标下拉菜单中,选择网络中的所有实例。
在目标过滤条件下拉菜单中,选择 IP 范围,然后在目标 IP 地址范围框中输入
0.0.0.0/0
。在协议和端口下,选择全部拒绝。
点击停用规则,然后在强制执行下选择已启用。
点击创建。
Essential contacts not configured
API 中的类别名称:ESSENTIAL_CONTACTS_NOT_CONFIGURED
您的组织尚未指定个人或群组来接收来自 Google Cloud 有关 Google Cloud 组织中重要事件(例如攻击、漏洞和数据突发事件)的通知。我们建议您将公司组织中的一个或多个人或群组指定为重要联系人。
如需修复此发现结果,请完成以下步骤:
进入 Google Cloud 控制台中的重要联系人页面。
确保组织显示在页面顶部的资源选择器中。资源选择器会显示您当前为哪个项目、文件夹或组织管理联系人。
点击 + 添加联系人系统随即会打开添加联系人面板。
在电子邮件和确认电子邮件字段中,输入联系人的电子邮件地址。
在通知类别部分中,选择您希望联系人接收相关信息的通知类别。确保为以下各个通知类别配置相应的电子邮件地址:
- Legal
- 安全
- 暂停
- 技术
点击保存。
Firewall not monitored
API 中的类别名称:FIREWALL_NOT_MONITORED
日志指标和提醒未配置为监控 VPC 网络防火墙规则更改。
通过监控防火墙规则创建和更新事件,您可以深入了解网络访问权限更改情况,并且可以帮助您快速检测可疑活动。如需了解详情,请参阅基于日志的指标概览。
如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
创建指标
进入 Google Cloud 控制台中的基于日志的指标页面。
点击创建指标。
在指标类型下,选择计数器。
在详情下:
- 设置日志指标名称。
- 添加说明
- 将单位设为 1。
在过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:
resource.type="gce_firewall_rule" AND (protoPayload.methodName:"compute.firewalls.insert" OR protoPayload.methodName:"compute.firewalls.patch" OR protoPayload.methodName:"compute.firewalls.delete")
点击创建指标。您将看到确认。
创建提醒政策
-
在 Google Cloud 控制台中,转到基于日志的指标页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 在用户定义的指标部分下,选择您在上一部分中创建的指标。
-
点击更多
,然后点击根据指标创建提醒。系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。
- 点击下一步。
- 查看预先填充的设置。您可能需要修改阈值。
- 点击条件名称,然后输入条件的名称。
- 点击下一步。
如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定。
如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。
- 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
- 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
- 点击提醒名称,然后输入提醒政策的名称。
- 点击创建政策。
Firewall rule logging disabled
API 中的类别名称:FIREWALL_RULE_LOGGING_DISABLED
防火墙规则日志记录已停用。
通过防火墙规则日志记录,您可以审核、验证和分析防火墙规则所带来的影响。这对于审核网络访问或提供未经批准的网络使用方式的早期警告非常有用。日志的使用费有可能会非常高。如需详细了解防火墙规则日志记录及其费用,请参阅使用防火墙规则日志记录。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击所需防火墙规则的名称。
点击
修改。在日志下,选择开启。
点击保存。
Flow logs disabled
API 中的类别名称:FLOW_LOGS_DISABLED
有一个 VPC 子网已停用流日志。
VPC 流日志记录了虚拟机实例发送和接收的网络流样本。这些日志可用于网络监控、取证、实时安全分析和费用优化。如需详细了解流日志及其费用,请参阅使用 VPC 流日志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 VPC 网络页面。
在网络列表中,点击所需网络的名称。
在 VPC 网络详情页面上,点击子网标签页。
在子网列表中,点击发现结果中指明的子网的名称。
在子网详情页面上,点击
修改。在流日志下,选择开启。
Flow logs settings not recommended
API 中的类别名称:VPC_FLOW_LOGS_SETTINGS_NOT_RECOMMENDED
在 VPC 网络的子网配置中,VPC 流日志服务已关闭,或者未根据 CIS 基准 1.3 建议进行配置。 VPC 流日志记录了虚拟机实例发送和接收的网络流样本,可用于检测威胁。
如需详细了解 VPC 流日志及其费用,请参阅使用 VPC 流日志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 VPC 网络页面。
在网络列表中,点击网络的名称。
在 VPC 网络详情页面上,点击子网标签页。
在子网列表中,点击发现结果中指明的子网的名称。
在子网详情页面上,点击
修改。在流日志下,选择开启。
- (可选)点击配置日志按钮以展开标签页,然后修改日志配置。CIS 基准建议采用以下设置:
- 将汇总间隔时间设置为 5 秒。
- 在其他字段复选框中,选择包括元数据选项。
- 将采样率设置为 100%。
- 点击保存按钮。
- (可选)点击配置日志按钮以展开标签页,然后修改日志配置。CIS 基准建议采用以下设置:
Full API access
API 中的类别名称:FULL_API_ACCESS
Compute Engine 实例配置为使用具有所有 Google Cloud API 的完整访问权限的默认服务账号。
配置了默认服务账号和 API 访问权限的实例 将范围设为允许所有 Cloud API 的全面访问权限可能会允许用户 执行他们没有 IAM 的操作或 API 调用 权限。如需了解详情,请参阅 Compute Engine 默认服务账号。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
在实例列表中,点击发现结果中的实例的名称。
如果实例正在运行,请点击
Stop(停止)。实例停止后,点击
修改。在安全和访问权限部分的服务账号下, 选择 Compute Engine 默认服务账号。
在访问权限范围下,选择允许默认访问或针对每个 API 设置访问权限。这限制了任何进程 或工作负载。
如果您选择了针对每个 API 设置访问权限,请执行以下操作:
- 将 Cloud Platform 设置为 None 以停用。
- 启用默认虚拟机服务账号所需的特定 API 访问权限。
点击保存。
点击
Start(启动)以启动实例。
HTTP load balancer
API 中的类别名称:HTTP_LOAD_BALANCER
Compute Engine 实例使用配置为使用目标 HTTP 代理(而非目标 HTTPS 代理)的负载均衡器。
为了保护数据的完整性并防止入侵者篡改通信,请将 HTTP(S) 负载均衡器配置为仅允许 HTTPS 流量。如需了解详情,请参阅外部 HTTP(S) 负载均衡概览。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的目标代理页面。
在目标代理列表中,点击发现结果中的目标代理的名称。
点击网址映射下的链接。
点击
修改。点击前端配置。
删除所有允许 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 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
在实例列表中,点击发现结果中的实例的名称。
在加载的实例详情页面上,点击
停止。实例停止后,点击
修改。在自定义元数据部分,确保键为 enable-oslogin 的项的值为 TRUE。
点击保存。
点击
启动以启动实例。
Integrity monitoring disabled
API 中的类别名称:INTEGRITY_MONITORING_DISABLED
GKE 集群上已停用完整性监控。
借助完整性监控功能,您可以使用 Monitoring 来监控和验证安全强化型节点的运行时启动完整性。这样,您就可以响应完整性验证失败并防止遭入侵的节点部署到集群中。
如需修复此发现结果,请完成以下步骤:
预配节点后,将无法对其进行更新以启用完整性监控。您必须创建启用完整性监控的新节点池。
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
点击发现结果中的集群的名称。
点击添加节点池。
在安全性标签页下,确保已启用启用完整性监控。
点击创建。
如需将工作负载从现有的不符合要求的节点池迁移到新节点池,请参阅将工作负载迁移到不同的机器类型。
迁移工作负载后,删除原有的不符合要求的节点池。
- 在 Kubernetes 集群页面的节点池菜单中,点击要删除的节点池的名称。
- 点击移除节点池。
Intranode visibility disabled
API 中的类别名称:INTRANODE_VISIBILITY_DISABLED
GKE 集群已停用节点内可见性。
如果启用节点内可见性,系统将向网络架构显示节点内的 pod 到 pod 流量。借助此功能,您可以使用 VPC 流日志记录或其他 VPC 功能来监控或控制节点内流量。如需获取日志,您需在所选的子网中启用 VPC 流日志。如需了解详情,请参阅使用 VPC 流日志。
如需修复此发现结果,请完成以下步骤:
预配节点后,将无法对其进行更新以启用完整性监控。您必须创建启用完整性监控的新节点池。
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
在网络部分中,点击
修改 节点内可见性行中的节点内可见性。如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。
在对话框中,选中启用节点内可见性。
点击保存更改。
IP alias disabled
API 中的类别名称:IP_ALIAS_DISABLED
创建 GKE 集群时停用了别名 IP 范围。
启用别名 IP 范围时,GKE 集群会分配来自已知 CIDR 块的 IP 地址,因此您的集群可以伸缩并更好地与 Google Cloud 产品和实体进行交互。如需了解详情,请参阅别名 IP 范围概览。
如需修复此发现结果,请完成以下步骤:
您无法通过迁移现有集群来使用别名 IP。如需创建启用别名 IP 的新集群,请执行以下操作:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
点击创建。
在导航窗格的集群下,点击网络。
在高级网络选项下,选择启用 VPC 原生流量路由(使用别名 IP)。
点击创建。
IP forwarding enabled
API 中的类别名称:IP_FORWARDING_ENABLED
Compute Engine 实例上启用了 IP 转发。
请为虚拟机停用数据包的 IP 转发,以防止数据丢失或信息泄露。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
在实例列表中,选中发现结果中的实例名称旁边的复选框。
点击
删除。选择创建实例以创建一个新实例来替换您删除的实例。
为确保停用 IP 转发,请点击管理、磁盘、网络、SSH 密钥,然后点击网络。
在网络接口下,点击
修改。在 IP 转发下的下拉菜单中,确保选中关闭。
指定任何其他实例参数,然后点击创建。如需了解详情,请参阅创建和启动虚拟机实例。
KMS key not rotated
API 中的类别名称:KMS_KEY_NOT_ROTATED
没有在 Cloud KMS 加密密钥上配置轮替。
定期轮替加密密钥可提供保护,以防密钥泄露,并且可以限制可用于对特定密钥版本进行加密分析的加密消息数量。如需了解详情,请参阅密钥轮替。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud KMS 密钥页面。
点击发现结果中指明的密钥环的名称。
点击发现结果中指明的密钥的名称。
点击修改轮替周期。
将轮替周期设置为最长 90 天。
点击保存。
KMS project has owner
API 中的类别名称:KMS_PROJECT_HAS_OWNER
用户对具有加密密钥的项目具有 roles/Owner
权限。如需了解详情,请参阅权限和角色。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中,转到 IAM 页面。
如有必要,选择发现结果中的项目。
对于每个分配了 Owner 角色的主账号:
- 点击 修改。
- 在修改权限面板中,点击 Owner 角色旁边的 删除。
- 点击保存。
KMS public key
API 中的类别名称:KMS_PUBLIC_KEY
Cloud KMS CryptoKey 或 Cloud KMS 密钥环是公开的,互联网上的任何用户都可以访问。如需了解详情,请参阅将 IAM 与 Cloud KMS 搭配使用。
如果此发现结果与 KMS CryptoKey 相关,则执行以下步骤来进行修复:
转到 Google Cloud 控制台中的“加密密钥”页面
在名称下,选择包含与 Security Health Analytics 发现结果相关的加密密钥的密钥环。
在加载的密钥环详细信息页面上,选中加密密钥旁边的复选框。
如果未显示信息面板,请点击显示信息面板按钮。
使用角色/主账号前面的过滤条件框搜索 allUsers 和 allAuthenticatedUsers 的主账号,然后点击
删除 即可移除这些主账号的访问权限。
如果此发现结果与 KMS 密钥环相关,则执行以下步骤来进行修复:
转到 Google Cloud 控制台中的“加密密钥”页面
找到发现结果中的密钥环所在的行,然后选中复选框。
如果未显示信息面板,请点击显示信息面板按钮。
使用角色 / 主账号前面的过滤条件框搜索主账号 allUsers 和 allAuthenticatedUsers,然后点击
删除以移除这些主账号的访问权限。
KMS role separation
API 中的类别名称:KMS_ROLE_SEPARATION
此发现结果不适用于项目级激活。
一个或多个主账号已分配有多项 Cloud KMS 权限。建议不要为任何账号同时授予 Cloud KMS Admin 和其他 Cloud KMS 权限。如需了解详情,请参阅权限和角色。
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中,转到 IAM 页面。
对于发现结果中列出的每个主账号,执行以下操作:
- 查看继承列,检查角色是否继承自文件夹或组织资源。如果该列包含父资源的链接,请点击链接以转到父资源的 IAM 页面。
- 点击主账号旁边的 修改。
- 如需移除权限,请点击 Cloud KMS Admin 旁边的 删除。如果您要移除 主账号,点击所有其他权限旁边的删除。
点击保存。
Legacy authorization enabled
API 中的类别名称:LEGACY_AUTHORIZATION_ENABLED
在 GKE 集群上启用了旧版授权。
在 Kubernetes 中,借助基于角色的访问权限控制 (RBAC),您可以使用包含一组权限的规则定义角色,并在集群和命名空间级别授予权限。这样可确保用户仅拥有特定资源的访问权限,从而提高了安全性。请考虑停用旧版基于特性的访问权限控制 (ABAC)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
选择 Security Health Analytics 发现结果中列出的集群。
点击
修改。如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。
在旧版授权下拉列表中,选择已停用。
点击保存。
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 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 VPC 网络页面。
如需创建新的非旧版网络,请点击创建网络。
返回到 VPC 网络页面。
在网络列表中,点击 legacy_network。
在 VPC 网络详情页面中,点击
删除 VPC 网络。
Load balancer logging disabled
API 中的类别名称:LOAD_BALANCER_LOGGING_DISABLED
已为负载均衡器中的后端服务停用日志记录功能。
为负载均衡器启用日志记录功能后,您就可以查看 Web 应用的 HTTP(S) 网络流量。如需了解详情,请参阅负载均衡器。
如需修复此发现结果,请完成以下步骤:
打开 Google Cloud 控制台中的 Cloud Load Balancing 页面。
点击您的负载均衡器的名称。
点击
修改。点击后端配置。
在后端配置页面中,点击
修改。在日志记录部分,选择启用日志记录,然后为您的项目选择最佳采样率。
如需完成后端服务的修改,请点击更新。
如需完成负载均衡器修改,请点击更新。
Locked retention policy not set
API 中的类别名称:LOCKED_RETENTION_POLICY_NOT_SET
没有为日志设置锁定的保留政策。
锁定的保留政策会防止覆盖日志和删除日志存储桶。有关详情,请参阅存储分区 锁定。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的存储空间浏览器页面。
选择 Security Health Analytics 发现结果中列出的存储桶。
在存储桶详情页面上,点击保留标签页。
如果尚未设置保留政策,请点击设置保留政策。
输入保留期限。
点击保存。保留政策显示在保留标签页中。
点击锁定以确保保留期限不会缩短或移除。
Log not exported
API 中的类别名称:LOG_NOT_EXPORTED
资源没有配置适当的日志接收器。
Cloud Logging 可帮助您迅速找出系统和应用问题的根本原因。不过,大多数日志在默认情况下只保留 30 天。 导出所有日志条目的副本以延长存储期。如需了解详情,请参阅日志导出概览。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的日志路由器页面。
点击创建接收器。
为确保导出所有日志,请将包含过滤器和排除过滤器留空。
点击创建接收器。
Master authorized networks disabled
API 中的类别名称:MASTER_AUTHORIZED_NETWORKS_DISABLED
未在 GKE 集群上启用控制层面授权网络。
控制平面授权网络通过阻止指定的 IP 地址访问集群的控制平面来提高容器集群的安全性。如需了解详情,请参阅添加授权网络以实现控制层面访问。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
选择 Security Health Analytics 发现结果中列出的集群。
点击
修改。如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。
在控制平面授权网络下拉列表中,选择已启用。
点击添加已获授权的网络。
指定您要使用的授权网络。
点击保存。
MFA not enforced
API 中的类别名称:MFA_NOT_ENFORCED
此发现结果不适用于项目级激活。
为您的组织中的部分用户停用了多重身份验证(具体而言是两步验证 (2SV))。
多重身份验证可用于保护账号免遭未经授权的访问,是保护您的组织免遭登录凭据被盗的最重要工具。如需了解详情,请参阅通过两步验证来保护您的企业。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的管理控制台页面。
为所有单位部门强制执行两步验证。
禁止此类发现结果
如需禁止此类型的发现结果,请定义忽略规则以自动忽略此类型的未来发现结果。如需了解详情,请参阅在 Security Command Center 中忽略发现结果。
虽然这不是推荐用来禁止发现结果的方法,但您也可以向资产添加专用安全标记,这样 Security Health Analytics 检测器就不会为这些资产创建安全发现结果。
- 为防止再次激活此发现结果,请向资源添加值为
true
的安全标记allow_mfa_not_enforced
。 - 如需忽略特定单位部门的潜在违规行为,请在值字段中使用以英文逗号分隔的单位部门路径向资源添加
excluded_orgunits
安全标记。例如excluded_orgunits:/people/vendors/vendorA,/people/contractors/contractorA
。
Network not monitored
API 中的类别名称:NETWORK_NOT_MONITORED
日志指标和提醒未配置为监控 VPC 网络更改。
如需检测网络设置的不正确更改或未经授权的更改,请监控 VPC 网络更改。如需了解详情,请参阅基于日志的指标概览。
如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
创建指标
进入 Google Cloud 控制台中的基于日志的指标页面。
点击创建指标。
在指标类型下,选择计数器。
在详情下:
- 设置日志指标名称。
- 添加说明
- 将单位设为 1。
在过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:
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")
点击创建指标。您将看到确认。
创建提醒政策
-
在 Google Cloud 控制台中,转到基于日志的指标页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 在用户定义的指标部分下,选择您在上一部分中创建的指标。
-
点击更多
,然后点击根据指标创建提醒。系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。
- 点击下一步。
- 查看预先填充的设置。您可能需要修改阈值。
- 点击条件名称,然后输入条件的名称。
- 点击下一步。
如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定。
如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。
- 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
- 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
- 点击提醒名称,然后输入提醒政策的名称。
- 点击创建政策。
Network policy disabled
API 中的类别名称:NETWORK_POLICY_DISABLED
已在 GKE 集群上停用网络政策。
默认情况下,pod 到 pod 的通信处于开放状态。开放的通信使 pod 能够直接跨节点连接,无论是否使用网络地址转换。NetworkPolicy
资源类似于 pod 层面的防火墙,会限制 pod 之间的连接,除非 NetworkPolicy
资源明确允许连接。了解如何定义网络政策。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
点击 Security Health Analytics 发现结果中列出的集群的名称。
在网络下的 Calico Kubernetes 网络政策行中,点击
修改。如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。
在对话框中,选择为控制平面启用 Calico Kubernetes 网络政策,然后 为节点启用 Calico Kubernetes 网络政策。
点击保存更改。
Nodepool boot CMEK disabled
API 中的类别名称:NODEPOOL_BOOT_CMEK_DISABLED
此节点池中的启动磁盘未使用客户管理的加密密钥 (CMEK) 进行加密。CMEK 允许用户为节点池中的启动磁盘配置默认加密密钥。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
在集群列表中,点击发现结果中的集群的名称。
点击节点标签页。
对于每个 default-pool 节点池,点击
删除。当系统提示您确认时,点击删除。
如需使用 CMEK 创建新的节点池,请参阅使用客户管理的加密密钥 (CMEK)。CMEK 会产生与 Cloud KMS 相关的额外费用。
Nodepool secure boot disabled
API 中的类别名称:NODEPOOL_SECURE_BOOT_DISABLED
GKE 集群已停用安全启动。
为安全强化型 GKE 节点启用安全启动,以验证节点启动组件的数字签名。如需了解详情,请参阅安全启动。
如需修复此发现结果,请完成以下步骤:
预配节点池后,将无法对其进行更新以启用安全启动。您必须创建启用安全启动的新节点池。
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
点击发现结果中的集群的名称。
点击添加节点池。
在节点池菜单中,执行以下操作:
- 点击新节点池的名称以展开相应标签页。
- 选择安全,然后在安全强化选项下选中启用安全启动。
- 点击创建。
- 如需将工作负载从现有的不符合要求的节点池迁移到新节点池,请参阅将工作负载迁移到不同的机器类型。
- 迁移工作负载后,删除原有的不符合要求的节点池。
Non org IAM member
API 中的类别名称:NON_ORG_IAM_MEMBER
组织之外的用户拥有项目或组织的 IAM 权限。详细了解 IAM 权限
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中,转到 IAM 页面。
选中组织或项目外用户旁边的复选框。
点击移除。
Object versioning disabled
API 中的类别名称:OBJECT_VERSIONING_DISABLED
配置了接收器的存储桶上未启用对象版本控制。
为了支持检索已删除或覆盖的对象,Cloud Storage 提供了对象版本控制功能。启用对象版本控制可防止 Cloud Storage 的数据被覆盖或意外删除。了解如何 启用对象版本控制。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请在--versioning
gcloud storage buckets update
命令:
gcloud storage buckets update gs://finding.assetDisplayName --versioning
将 finding.assetDisplayName
替换为相关存储桶的名称。
Open Cassandra port
API 中的类别名称:OPEN_CASSANDRA_PORT
允许任何 IP 地址连接到 Cassandra 端口的防火墙规则可能会将您的 Cassandra 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
Cassandra 服务端口包括:
TCP - 7000, 7001, 7199, 8888, 9042, 9160, 61620, 61621
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open ciscosecure websm port
API 中的类别名称:OPEN_CISCOSECURE_WEBSM_PORT
允许任何 IP 地址连接到 CiscoSecure/WebSM 端口的防火墙规则可能会将您的 CiscoSecure/WebSM 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
CiscoSecure/WebSM 服务端口包括:
TCP - 9090
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open directory services port
API 中的类别名称:OPEN_DIRECTORY_SERVICES_PORT
允许任何 IP 地址连接到 Directory 端口的防火墙规则可能会将您的 Directory 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
Directory 服务端口包括:
TCP - 445
UDP - 445
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open DNS port
API 中的类别名称:OPEN_DNS_PORT
允许任何 IP 地址连接到 DNS 端口的防火墙规则可能会将您的 DNS 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
DNS 服务端口包括:
TCP - 53
UDP - 53
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open Elasticsearch port
API 中的类别名称:OPEN_ELASTICSEARCH_PORT
允许任何 IP 地址连接到 Elasticsearch 端口的防火墙规则可能会将您的 Elasticsearch 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
Elasticsearch 服务端口包括:
TCP - 9200, 9300
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open firewall
API 中的类别名称:OPEN_FIREWALL
若防火墙规则允许来自所有 IP 地址(例如 0.0.0.0/0
)或所有端口的连接,可能会使资源不必要地暴露在非预期来源的攻击之下。应移除这些规则,或将范围明确限定为预期的来源 IP 地址范围或端口。例如,在打算公开的应用中,请考虑将允许的端口限制为应用所需的端口,如 80 和 443。如果您的应用需要允许来自所有 IP 地址或端口的连接,请考虑将资源添加到许可名单。详细了解如何更新防火墙规则。
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙规则页面。
点击 Security Health Analytics 发现结果中列出的防火墙规则,然后点击
修改。在来源 IP 地址范围下,修改 IP 值以限制允许的 IP 范围。
在协议和端口下,选择指定的协议和端口,再选择允许的协议,并输入允许的端口。
点击保存。
Open FTP port
API 中的类别名称:OPEN_FTP_PORT
允许任何 IP 地址连接到 FTP 端口的防火墙规则可能会将您的 FTP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
FTP 服务端口包括:
TCP - 21
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open group IAM member
API 中的类别名称:OPEN_GROUP_IAM_MEMBER
有权访问组织、项目或文件夹的一个或多个主账号是无需批准即可加入的 Google 群组账号。
Google Cloud 客户可以使用 Google 群组管理其组织成员的角色和权限,或对一系列用户应用访问权限政策。管理员可以直接向成员授予角色和权限,然后将成员添加到特定群组,而不是直接向成员授予角色。群组成员会继承群组的所有角色和权限,使成员可以访问特定资源和服务。
如果在 IAM 绑定中将打开的 Google 群组账号用作主账号,则任何人都可以直接或间接加入群组(通过子群组),以继承关联的角色。我们建议您撤消开放群组的角色或限制对这些群组的访问权限。
要修复此发现结果,请执行以下步骤之一。
从 IAM 政策中移除群组
在 Google Cloud 控制台中,转到 IAM 页面。
如有必要,请在发现结果中选择项目、文件夹或组织。
限制对开放群组的访问权限
- 登录 Google 群组。
- 更新每个未结群组及其子群组的设置,以指定谁可以加入群组以及谁可以批准他们。
Open HTTP port
API 中的类别名称:OPEN_HTTP_PORT
允许任何 IP 地址连接到 HTTP 端口的防火墙规则可能会将您的 HTTP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
HTTP 服务端口包括:
TCP - 80
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open LDAP port
API 中的类别名称:OPEN_LDAP_PORT
允许任何 IP 地址连接到 LDAP 端口的防火墙规则可能会将您的 LDAP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
LDAP 服务端口包括:
TCP - 389, 636
UDP - 389
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open Memcached port
API 中的类别名称:OPEN_MEMCACHED_PORT
允许任何 IP 地址连接到 Memcached 端口的防火墙规则可能会将您的 Memcached 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
Memcached 服务端口包括:
TCP - 11211, 11214, 11215
UDP - 11211, 11214, 11215
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open MongoDB port
API 中的类别名称:OPEN_MONGODB_PORT
允许任何 IP 地址连接到 MongoDB 端口的防火墙规则可能会将您的 MongoDB 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
MongoDB 服务端口包括:
TCP - 27017, 27018, 27019
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open MySQL port
API 中的类别名称:OPEN_MYSQL_PORT
允许任何 IP 地址连接到 MySQL 端口的防火墙规则可能会将您的 MySQL 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
MySQL 服务端口包括:
TCP - 3306
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open NetBIOS port
API 中的类别名称:“OPEN_NETBIOS_PORT”
允许任何 IP 地址连接到 NetBIOS 端口的防火墙规则可能会将您的 NetBIOS 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
NetBIOS 服务端口包括:
TCP - 137, 138, 139
UDP - 137, 138, 139
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open OracleDB port
API 中的类别名称:OPEN_ORACLEDB_PORT
允许任何 IP 地址连接到 OracleDB 端口的防火墙规则可能会将您的 OracleDB 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
OracleDB 服务端口包括:
TCP - 1521, 2483, 2484
UDP - 2483, 2484
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open POP3 port
API 中的类别名称:OPEN_POP3_PORT
允许任何 IP 地址连接到 POP3 端口的防火墙规则可能会将您的 POP3 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
POP3 服务端口包括:
TCP - 110
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open PostgreSQL port
API 中的类别名称:OPEN_POSTGRESQL_PORT
允许任何 IP 地址连接到 PostgreSQL 端口的防火墙规则可能会将您的 PostgreSQL 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
PostgreSQL 服务端口包括:
TCP - 5432
UDP - 5432
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open RDP port
API 中的类别名称:OPEN_RDP_PORT
允许任何 IP 地址连接到 RDP 端口的防火墙规则可能会将您的 RDP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
RDP 服务端口包括:
TCP - 3389
UDP - 3389
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open Redis port
API 中的类别名称:OPEN_REDIS_PORT
允许任何 IP 地址连接到 Redis 端口的防火墙规则可能会将您的 Redis 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
Redis 服务端口包括:
TCP - 6379
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open SMTP port
API 中的类别名称:OPEN_SMTP_PORT
允许任何 IP 地址连接到 SMTP 端口的防火墙规则可能会将您的 SMTP 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
SMTP 服务端口包括:
TCP - 25
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open SSH port
API 中的类别名称:OPEN_SSH_PORT
允许任何 IP 地址连接到 SSH 端口的防火墙规则可能会将您的 SSH 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
SSH 服务端口包括:
SCTP - 22
TCP - 22
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Open Telnet port
API 中的类别名称:OPEN_TELNET_PORT
允许任何 IP 地址连接到 Telnet 端口的防火墙规则可能会将您的 Telnet 服务暴露给攻击者。如需了解详情,请参阅 VPC 防火墙规则概览。
Telnet 服务端口包括:
TCP - 23
此发现结果是为易受攻击的防火墙规则生成的,即使您有意停用了这些规则,也是如此。对于已停用的防火墙规则,如果发现严重的结果,就会提醒您,发现不安全的配置(如果启用,将会导致不需要的流量)。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的防火墙页面。
在防火墙规则列表中,点击发现结果中的防火墙规则的名称。
点击
修改。在来源 IP 地址范围下,删除
0.0.0.0/0
。添加您希望允许连接到实例的特定 IP 地址或 IP 地址范围。
添加您要在实例上打开的特定协议和端口。
点击保存。
Org policy Confidential VM policy
API 中的类别名称:ORG_POLICY_CONFIDENTIAL_VM_POLICY
Compute Engine 资源未遵守 constraints/compute.restrictNonConfidentialComputing
组织政策。如需详细了解此组织政策限制条件,请参阅实施组织政策限制条件。
您的组织要求此虚拟机启用机密虚拟机服务。未启用此服务的虚拟机不会使用运行时内存加密,这会使其面临运行时内存攻击。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
在实例列表中,点击发现结果中的实例的名称。
如果虚拟机不需要机密虚拟机服务,请将其移到新文件夹或项目。
如果虚拟机需要机密虚拟机,请点击
删除。如需创建启用机密虚拟机的新实例,请参阅快速入门:创建机密虚拟机实例。
Org policy location restriction
API 中的类别名称:ORG_POLICY_LOCATION_RESTRICTION
通过组织政策 gcp.resourceLocations
限制条件,您可以新资源的创建限制在您选择的 Cloud 区域内。如需了解详情,请参阅限制资源位置。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
ORG_POLICY_LOCATION_RESTRICTION
检测器涵盖许多资源类型,且每种资源的修复说明不同。解决位置违规行为的一般方法包括:
- 将区域外的资源或其数据复制、移动或备份到区域内的资源。如需获取有关如何移动资源的说明,请参阅各项服务的文档。
- 删除原始区域外的资源或其数据。
此方法不适用于所有资源类型。如需获取相关指导,请参阅发现结果中提供的自定义建议。
其他注意事项
修复此发现结果时,请考虑以下事项。
代管资源
资源的生命周期有时可能会被其他资源管理和控制。例如,代管式 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 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的元数据页面。
点击修改,然后点击添加一项。
添加键为 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.serviceAccountUser
或 iam.serviceAccountTokenCreator
角色。
如果将项目、文件夹或组织的这些角色授予某个用户,该用户将有权访问该项目中所有现有和未来的服务账号。这种情况可能会导致权限意外升级。如需了解详情,请参阅服务账号权限。
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中,转到 IAM 页面。
如有必要,请在发现结果中选择项目、文件夹或组织。
对于每个分配有
roles/iam.serviceAccountUser
或roles/iam.serviceAccountTokenCreator
的主账号,请执行以下操作:- 点击 修改。
- 在修改权限面板中,点击相应角色旁边的 删除。
- 点击保存。
请按照本指南授予各个用户模拟单个服务账号的权限。对于您希望允许所选用户模拟的每个服务账号,您需要遵循相应的指南。
Owner not monitored
API 中的类别名称:OWNER_NOT_MONITORED
日志指标和提醒未配置为监控项目所有权分配或更改。
IAM Owner 角色拥有项目的最高级别权限。如需保障资源安全,您可以设置提醒,以在添加新的所有者或移除所有者时收到通知。如需了解详情,请参阅基于日志的指标概览。
如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
创建指标
进入 Google Cloud 控制台中的基于日志的指标页面。
点击创建指标。
在指标类型下,选择计数器。
在详情下:
- 设置日志指标名称。
- 添加说明
- 将单位设为 1。
在过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:
(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")
点击创建指标。您将看到确认。
创建提醒政策
-
在 Google Cloud 控制台中,转到基于日志的指标页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 在用户定义的指标部分下,选择您在上一部分中创建的指标。
-
点击更多
,然后点击根据指标创建提醒。系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。
- 点击下一步。
- 查看预先填充的设置。您可能需要修改阈值。
- 点击条件名称,然后输入条件的名称。
- 点击下一步。
如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定。
如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。
- 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
- 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
- 点击提醒名称,然后输入提醒政策的名称。
- 点击创建政策。
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/owner
、roles/editor
或 roles/viewer
。这些角色权限过于宽松,不应使用。应该按项目分配这些角色。
如需了解详情,请参阅了解角色。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 IAM 页面。
对于分配有原初角色的每个用户,请考虑改用更精细的角色。
Private cluster disabled
API 中的类别名称:PRIVATE_CLUSTER_DISABLED
GKE 集群停用了专用集群。
专用集群仅允许节点具有专用 IP 地址。此功能限制节点的出站互联网访问权限。如果集群节点没有公共 IP 地址,就不会在公共互联网上被检测到,也不会被公开。您仍可以使用内部负载均衡器将流量路由到这些节点。如需了解详情,请参阅专用集群。
您无法将现有集群设置为专用。要修复此发现结果,请创建新的专用集群:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
点击创建集群。
在导航菜单的集群下,选择网络。
选择专用集群单选按钮。
在高级网络选项下,选中启用 VPC 原生流量路由(使用别名 IP)复选框。
点击创建。
Private Google access disabled
API 中的类别名称:PRIVATE_GOOGLE_ACCESS_DISABLED
有一些专用子网无权访问 Google 公共 API。
专用 Google 访问通道支持仅具有内部(专用)IP 地址的虚拟机实例访问 Google API 和服务的公共 IP 地址。
如需了解详情,请参阅配置 Google 专用访问通道。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 VPC 网络页面。
在网络列表中,点击所需网络的名称。
在 VPC 网络详情页面上,点击子网标签页。
在子网列表中,点击与发现结果中的 Kubernetes 集群关联的子网的名称。
在子网详情页面上,点击
修改。在专用 Google 访问通道下,选择开启。
点击保存。
要从其外部流量仅流向 Google API 的虚拟机实例移除公共(外部)IP 地址,请参阅取消分配静态外部 IP 地址。
Public bucket ACL
API 中的类别名称:PUBLIC_BUCKET_ACL
存储桶是公开的,互联网上的任何用户都可以访问。
如需了解详情,请参阅访问权限控制概览。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的存储空间浏览器页面。
选择 Security Health Analytics 发现结果中列出的存储桶。
在存储桶详情页面上,点击权限标签。
在查看方式旁边,点击角色。
在过滤条件框中,搜索 allUsers 和 allAuthenticatedUsers。
点击
Delete(删除)以移除授予 allUsers 和 allAuthenticatedUsers 的所有 IAM 权限。
Public Compute image
API 中的类别名称:PUBLIC_COMPUTE_IMAGE
Compute Engine 映像是公开的,互联网上的任何用户都可以访问。allUsers 表示互联网上的任何用户,allAuthenticatedUsers 表示使用 Google 账号进行了身份验证的任何用户。两者都不局限于组织内的用户。
Compute Engine 映像可能包含加密密钥或许可软件等敏感信息。此类敏感信息不应允许公开访问。如果您打算将此 Compute Engine 映像设为公开,请确保其不包含任何敏感信息。
如需了解详情,请参阅访问权限控制概览。
如需修复此发现结果,请完成以下步骤:
转到 Cloud 控制台中的 Compute Engine 映像页面。
选中 public-image 映像旁边的复选框,然后点击显示信息面板。
在过滤条件框中,搜索 allUsers 和 allAuthenticatedUsers 的主账号。
展开您要移除用户的角色。
点击
删除以从该角色中移除用户。
Public dataset
API 中的类别名称:PUBLIC_DATASET
BigQuery 数据集是公开的,互联网上的任何用户都可以访问。IAM 主账号 allUsers 表示互联网上的任何用户,allAuthenticatedUsers 表示登录了 Google 服务的任何用户。两者都不局限于组织内的用户。
如需了解详情,请参阅控制对数据集的访问。
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中转到 BigQuery 数据集页面。
在数据集列表中,点击发现结果中标识的数据集的名称。此时会打开数据集信息面板。
在数据集信息面板顶部附近,点击共享。
在下拉菜单中,点击权限。
在数据集权限面板中,输入 allUsers 和 allAuthenticatedUsers,并移除这些主账号的访问权限。
Public IP address
API 中的类别名称:PUBLIC_IP_ADDRESS
Compute Engine 实例具有公共 IP 地址。
为了缩小组织的受攻击面,请避免向虚拟机分配公共 IP 地址。已停止的实例可能仍会被标记为“公共 IP 发现结果”,例如,网络接口被配置为在启动时分配临时公共 IP 时就是如此。请确保已停止的实例的网络配置不包含外部访问权限。
如需了解详情,请参阅安全连接到虚拟机实例。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
在实例列表中,选中发现结果中的实例名称旁边的复选框。
点击
修改。对于网络接口下的每个接口,点击
修改并将外部 IP 设置为无。点击完成,然后点击保存。
Public log bucket
API 中的类别名称:PUBLIC_LOG_BUCKET
此发现结果不适用于项目级激活。
存储桶是公开的,并用作日志接收器,这意味着互联网上的任何用户都可以访问此存储桶中存储的日志。allUsers 表示互联网上的任何用户,allAuthenticatedUsers 表示已登录 Google 服务的任何用户。两者都不局限于组织内的用户。
如需了解详情,请参阅访问权限控制概览。
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中,转到 Cloud Storage 浏览器页面。
在存储桶列表中,点击发现结果中指明的存储桶的名称。
点击权限标签页。
从主账号列表中移除 allUsers 和 allAuthenticatedUsers。
Public SQL instance
API 中的类别名称:PUBLIC_SQL_INSTANCE
您的 SQL 实例使用 0.0.0.0/0
作为允许的网络。这意味着任何 IPv4 客户端(包括您不打算允许的客户端)都可以穿过网络防火墙并尝试登录您的实例。客户端仍需要提供有效凭据才能成功登录您的实例。
如需了解详情,请参阅使用授权网络进行授权。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在导航面板中,点击连接。
在已获授权的网络下,删除
0.0.0.0/0
并添加您希望允许连接实例的特定 IP 地址或 IP 范围。点击完成,然后点击保存。
Pubsub CMEK disabled
API 中的类别名称:PUBSUB_CMEK_DISABLED
Pub/Sub 主题未使用客户管理的加密密钥 (CMEK) 进行加密。
借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。
如需修复此发现结果,请删除现有主题并创建一个新主题:
转到 Google Cloud 控制台中的 Pub/Sub 的主题页面。
转到主题。
如有必要,请选择包含 Pub/Sub 主题的项目。
选中发现结果中列出的主题旁边的复选框,然后点击
删除。如需在启用 CMEK 的情况下创建新的 Pub/Sub 主题,请参阅使用客户管理的加密密钥。CMEK 会产生与 Cloud KMS 相关的额外费用。
将发现结果或其他数据发布到启用了 CMEK 的 Pub/Sub 主题。
Route not monitored
API 中的类别名称:ROUTE_NOT_MONITORED
日志指标和提醒未配置为监控 VPC 网络路由更改。
Google Cloud 路由是目的地和跃点,用于定义网络流量从虚拟机实例流向目的地 IP 所经过的路径。通过监控路由表的更改,您可以帮助确保所有 VPC 流量均经过预期的路径。
如需了解详情,请参阅基于日志的指标概览。
如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
创建指标
进入 Google Cloud 控制台中的基于日志的指标页面。
点击创建指标。
在指标类型下,选择计数器。
在详情下:
- 设置日志指标名称。
- 添加说明
- 将单位设为 1。
在过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:
resource.type="gce_route" AND (protoPayload.methodName:"compute.routes.delete" OR protoPayload.methodName:"compute.routes.insert")
点击创建指标。您将看到确认。
创建提醒政策
-
在 Google Cloud 控制台中,转到基于日志的指标页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 在用户定义的指标部分下,选择您在上一部分中创建的指标。
-
点击更多
,然后点击根据指标创建提醒。系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。
- 点击下一步。
- 查看预先填充的设置。您可能需要修改阈值。
- 点击条件名称,然后输入条件的名称。
- 点击下一步。
如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定。
如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。
- 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
- 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
- 点击提醒名称,然后输入提醒政策的名称。
- 点击创建政策。
Redis role used on org
API 中的类别名称:REDIS_ROLE_USED_ON_ORG
此发现结果不适用于项目级激活。
Redis IAM 角色在组织或文件夹级层分配。
以下 Redis IAM 角色应仅按项目(而不是在组织或文件夹级层)分配:
roles/redis.admin
roles/redis.viewer
roles/redis.editor
如需了解详情,请参阅访问权限控制和权限。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 IAM 页面。
移除发现结果中指明的 Redis IAM 角色,改为分别在每个项目上添加它们。
Release channel disabled
API 中的类别名称:RELEASE_CHANNEL_DISABLED
GKE 集群未订阅发布渠道。
订阅发布渠道以自动管理 GKE 集群的版本升级。这些功能还可以将版本管理的复杂性降低到所需的功能数量和稳定性级别。如需了解详情,请参阅发布渠道。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
在集群基本信息部分,点击
升级集群 发布版本行中的“主版本”。如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。
在对话框中,选择发布渠道,然后选择您要订阅的发布渠道。
如果集群的控制层面版本无法升级到发布渠道,则该渠道可能会作为选项停用。
点击保存更改。
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 天轮替一次密钥。另外,如果您认为密钥可能已被破解,您也可以轮替密钥。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的服务账号页面。
如有必要,选择发现结果中指明的项目。
在服务账号列表中,找到 找到并点击
删除。在继续操作之前,请考虑删除服务账号可能对生产资源产生的影响。创建新的服务账号密钥以替换旧服务账号密钥。如需了解详情,请参阅创建服务账号密钥。
Service account role separation
API 中的类别名称:SERVICE_ACCOUNT_ROLE_SEPARATION
此发现结果不适用于项目级激活。
您的组织中的一个或多个主账号分配有多项服务账号权限。任何账号都不应同时拥有 Service Account Admin 和其他服务账号权限。如需了解服务账号及其可用角色,请参阅服务账号。
如需修复此发现结果,请完成以下步骤:
在 Google Cloud 控制台中,转到 IAM 页面。
对于发现结果中列出的每个主账号,执行以下操作:
- 查看继承列,检查角色是否继承自文件夹或组织资源。如果该列包含父资源的链接,请点击链接以转到父资源的 IAM 页面。
- 点击主账号旁边的 修改。
- 要移除权限,请点击旁边的 删除 Service Account Admin。如果您要移除所有服务账号 请点击所有其他权限旁边的删除。
点击保存。
Shielded VM disabled
API 中的类别名称:SHIELDED_VM_DISABLED
此 Compute Engine 实例上停用了安全强化型虚拟机。
安全强化型虚拟机是一种经过安全控制措施强化的 Google Cloud 虚拟机,可更好地抵御 rootkit 和 bootkit 攻击。安全强化型虚拟机有助于确保对启动加载程序和固件进行签名和验证。详细了解安全强化型虚拟机。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的虚拟机实例页面。
选择与 Security Health Analytics 发现结果相关的实例。
在加载的实例详情页面上,点击
停止。实例停止后,点击
修改。在安全强化型虚拟机部分,切换开启 vTPM 和开启完整性监控,以启用安全强化型虚拟机。
或者,如果您不使用任何自定义或未签名的驱动程序,则还启用安全启动。
点击保存。新配置会显示在实例详情页面上。
点击
Start(启动)以启动实例。
SQL CMEK disabled
API 中的类别名称:SQL_CMEK_DISABLED
SQL 数据库实例未使用客户管理的加密密钥 (CMEK)。
借助 CMEK,您在 Cloud KMS 中创建和管理的密钥会封装 Google 用于加密数据的密钥,从而使您能够更好地控制对您数据的访问。如需了解详情,请参阅您产品的 CMEK 概览:Cloud SQL for MySQL、Cloud SQL for PostgreSQL 或 Cloud SQL for SQL Server。CMEK 会产生与 Cloud KMS 相关的额外费用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
删除。如需创建启用 CMEK 的新实例,请按照相应说明为产品配置 CMEK:
SQL contained database authentication
API 中的类别名称:SQL_CONTAINED_DATABASE_AUTHENTICATION
Cloud SQL for SQL Server 数据库实例没有将包含的数据库身份验证数据库标志设置为关闭。
包含的数据库身份验证标志用于控制是否可以创建包含的数据库或将包含的数据库关联到数据库引擎。包含的数据库包含定义数据库所需的所有数据库设置和元数据,并且对安装数据库的数据库引擎实例没有配置依赖项。
不建议启用此标志,原因如下:
- 用户可以在数据库引擎级别连接到数据库,而无需身份验证。
- 通过将数据库与数据库引擎隔离,您可以将数据库移至其他 SQL Server 实例。
包含的数据库面临独特的威胁,SQL Server 数据库引擎管理员应该了解并缓解此类威胁。大多数威胁都源于 USER WITH PASSWORD 身份验证流程,这会将身份验证边界从数据库引擎级别移至数据库级别。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将包含的数据库身份验证数据库标志的值设置为关闭。
点击保存。新配置会显示在实例概览页面上。
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 实例托管的所有数据库都参与跨数据库所有权链,并且您了解此设置的安全影响,否则建议不要启用此标志。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 cross db ownership chaining 数据库标志的值设置为关闭。
点击保存。新配置会显示在实例概览页面上。
SQL external scripts enabled
API 中的类别名称:SQL_EXTERNAL_SCRIPTS_ENABLED
Cloud SQL for SQL Server 数据库实例未将 external scripts enabled 数据库标志设置为关闭。
启用此设置后,您将能够通过特定的远程语言扩展程序执行脚本。由于此功能会对系统的安全性产生负面影响,因此建议将其停用。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分中,将 external scripts enabled 数据库标志的值设置为关闭。
点击保存。新配置会显示在实例概览页面上。
SQL instance not monitored
API 中的类别名称:SQL_INSTANCE_NOT_MONITORED
此发现结果不适用于项目级激活。
日志指标和提醒未配置为监控 Cloud SQL实例配置更改。
SQL 实例选项配置错误可能会导致安全风险。停用自动备份和高可用性选项可能会影响业务连续性,不限制授权网络可能会增加遭到不受信任网络侵扰的风险。监控 SQL 实例配置的更改可帮助缩短检测和纠正配置错误的时间。
如需了解详情,请参阅基于日志的指标概览。
如果信息量很大,Cloud Monitoring 的使用费有可能会非常高。接收者 了解您对服务的使用情况及其费用,请参阅 优化费用:云运维。
对于 Security Command Center 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
创建指标
进入 Google Cloud 控制台中的基于日志的指标页面。
点击创建指标。
在指标类型下,选择计数器。
在详情下:
- 设置日志指标名称。
- 添加说明
- 将单位设为 1。
在过滤器选择下,复制以下文本并粘贴到构建过滤器框中,如有需要,替换现有文本:
protoPayload.methodName="cloudsql.instances.update" OR protoPayload.methodName="cloudsql.instances.create" OR protoPayload.methodName="cloudsql.instances.delete"
点击创建指标。您将看到确认。
创建提醒政策
-
在 Google Cloud 控制台中,转到基于日志的指标页面:
如果您使用搜索栏查找此页面,请选择子标题为 Logging 的结果。
- 在用户定义的指标部分下,选择您在上一部分中创建的指标。
-
点击更多
,然后点击根据指标创建提醒。系统将打开新建条件对话框,其中预先填充了指标和数据转换选项。
- 点击下一步。
- 查看预先填充的设置。您可能需要修改阈值。
- 点击条件名称,然后输入条件的名称。
- 点击下一步。
如需将通知添加到您的提醒政策中,请点击通知渠道。在对话框中,从菜单中选择一个或多个通知渠道,然后点击确定。
如需在开启和关闭突发事件时接收通知,请选中突发事件关闭时通。默认情况下,仅在开启突发事件时发送通知。
- 可选:更新突发事件自动关闭持续时间。此字段用于确定在缺少指标数据的情况下 Monitoring 何时关闭突发事件。
- 可选:点击文档,然后添加您希望包含在通知消息中的任何信息。
- 点击提醒名称,然后输入提醒政策的名称。
- 点击创建政策。
SQL local infile
API 中的类别名称:SQL_LOCAL_INFILE
Cloud SQL for MySQL 数据库实例没有将 local_infile 数据库标志设置为关闭。由于存在与 local_infile 标志相关的安全问题,因此应停用该标志。如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 local_infile 数据库标志的值设置为关闭。
点击保存。新配置会显示在实例概览页面上。
SQL log checkpoints disabled
API 中的类别名称:SQL_LOG_CHECKPOINTS_DISABLED
Cloud SQL for PostgreSQL 数据库实例没有将 log_checkpoints 数据库标志设置为开启。
启用 log_checkpoints 会在服务器日志中记录检查点和重启点。某些统计信息包含在日志消息中,包括写入的缓冲区数量和写入缓冲区所用的时间。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_checkpoints 数据库标志的值设置为开启。
点击保存。新配置会显示在实例概览页面上。
SQL log connections disabled
API 中的类别名称:SQL_LOG_CONNECTIONS_DISABLED
Cloud SQL for PostgreSQL 数据库实例没有将 log_connections 数据库标志设置为开启。
启用 log_connections 设置会记录尝试与服务器的连接,并且成功完成客户端身份验证。这些日志在排查问题以及确认尝试与服务器的异常连接方面非常有用。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_connections 数据库标志的值设置为开启。
点击保存。新配置会显示在实例概览页面上。
SQL log disconnections disabled
API 中的类别名称:SQL_LOG_DISCONNECTIONS_DISABLED
Cloud SQL for PostgreSQL 数据库实例没有将 log_disconnections 数据库标志设置为开启。
启用 log_disconnections 设置后,系统会在每个会话结束时创建日志条目。这些日志可用于排查问题,并确认一段时间内的异常活动。如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_disconnections 数据库标志的值设置为开启。
点击保存。新配置会显示在实例概览页面上。
SQL log duration disabled
API 中的类别名称:SQL_LOG_DURATION_DISABLED
Cloud SQL for PostgreSQL 数据库实例未将 log_duration 数据库标志设置为开启。
启用 log_duration 后,系统会记录每个已完成的语句的执行时间和时长。如需找出速度较慢的查询并排查数据库问题,对执行查询所花费的时间进行监控至关重要。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_duration 数据库标志设置为开启。
点击保存。新配置会显示在实例概览页面上。
SQL log error verbosity
API 中的类别名称:SQL_LOG_ERROR_VERBOSITY
Cloud SQL for PostgreSQL 数据库实例未将 log_error_verbosity 数据库标志设置为 default 或 verbose。
log_error_verbosity 标志用于控制记录的消息的详细程度。 详细程度越高,记录的消息就越详细。 建议将此标志设置为 default 或 verbose。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分中,将 log_error_verbosity 数据库标志设置为 default 或 verbose。
点击保存。新配置会显示在实例概览页面上。
SQL log lock waits disabled
API 中的类别名称:SQL_LOG_LOCK_WAITS_DISABLED
Cloud SQL for PostgreSQL 数据库实例没有将 log_lock_waits 数据库标志设置为开启。
启用 log_lock_waits 设置后,如果会话获取锁的等待时间超过 deadlock_timeout 中的设置,系统就会创建日志条目。日志可用于确定锁等待时间是否会导致性能不佳。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_lock_waits 数据库标志的值设置为开启。
点击保存。新配置会显示在实例概览页面上。
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 语句可能包含不应记录的敏感信息。如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_min_duration_statement 数据库标志的值设置为 -1。
点击保存。新配置会显示在实例概览页面上。
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 未设置为正确的值,系统可能不会将相应消息归类为错误消息。如果将严重级别设置得过低,会导致消息数量增加,并让人难以找到实际错误。如果将严重级别设置得过高,可能会导致实际错误的相关消息得不到记录。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,根据组织的日志记录政策,将 log_min_error_statement 数据库标志的值设置为下列建议值之一。
debug5
debug4
debug3
debug2
debug1
info
notice
warning
error
点击保存。新配置会显示在实例概览页面上。
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 或更严格的值。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分中,根据组织的日志记录政策,将 log_min_error_statement 数据库标志的值设置为下列建议值之一。
error
log
fatal
panic
点击保存。新配置会显示在实例概览页面上。
SQL log min messages
API 中的类别名称:SQL_LOG_MIN_MESSAGES
Cloud SQL for PostgreSQL 数据库实例未将 log_min_messages 数据库标志至少设置为 warning。
log_min_messages 标志用于控制哪些消息级别记录在服务器日志中。严重级别越高,记录的消息数量就越少。如果阈值设置得过低,可能会导致日志存储大小和长度增加,从而难以找到实际错误。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,根据组织的日志记录政策,将 log_min_messages 数据库标志的值设置为下列建议值之一。
debug5
debug4
debug3
debug2
debug1
info
notice
warning
点击保存。新配置会显示在实例概览页面上。
SQL log executor stats enabled
API 中的类别名称:SQL_LOG_EXECUTOR_STATS_ENABLED
Cloud SQL for PostgreSQL 数据库实例未将 log_executor_stats 数据库标志设置为关闭。
当 log_executor_stats 标志激活后,执行器性能 PostgreSQL 日志中包含每个查询的统计信息。此设置对于问题排查非常有用,但可能会大大增加日志数量和性能开销。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_executor_stats 数据库标志设置为关闭。
点击保存。新配置会显示在实例概览页面上。
SQL log hostname enabled
API 中的类别名称:“SQL_LOG_HOSTNAME_ENABLED”
Cloud SQL for PostgreSQL 数据库实例未将 log_hostname 数据库标志设置为关闭。
启用 log_hostname 标志后,系统会记录连接主机的主机名。默认情况下,连接日志消息仅显示 IP 地址。此设置对于问题排查很有用。但是,它可能会给服务器性能带来开销,因为对于记录的每个语句,DNS 解析都需要将 IP 地址转换为主机名。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_hostname 数据库标志设置为关闭。
点击保存。新配置会显示在实例概览页面上。
SQL log parser stats enabled
API 中的类别名称:SQL_LOG_PARSER_STATS_ENABLED
Cloud SQL for PostgreSQL 数据库实例未将 log_parser_stats 数据库标志设置为关闭。
启用 log_parser_stats 标志后,解析器性能统计信息会添加到每个查询的 PostgreSQL 日志中。这对于问题排查非常有用,但可能会大大增加日志数量和性能开销。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_parser_stats 数据库标志设置为关闭。
点击保存。新配置会显示在实例概览页面上。
SQL log planner stats enabled
API 中的类别名称:SQL_LOG_PLANNER_STATS_ENABLED
Cloud SQL for PostgreSQL 数据库实例未将 log_planner_stats 数据库标志设置为关闭。
启用 log_planner_stats 标志后,系统会使用一个粗略的性能分析方法来记录 PostgreSQL 规划工具性能统计信息。这对于问题排查非常有用,但可能会大大增加日志数量和性能开销。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_planner_stats 数据库标志设置为关闭。
点击保存。新配置会显示在实例概览页面上。
SQL log statement
API 中的类别名称:SQL_LOG_STATEMENT
Cloud SQL for PostgreSQL 数据库实例未将 log_statement 数据库标志设置为 ddl
。
此标志的值用于控制要记录哪些 SQL 语句。借助日志记录,您可以排查操作问题,并执行取证分析。如果此标志设置为不正确的值,相关信息可能会被跳过,或者隐藏在太多消息中。除非组织的日志记录政策另有指示,否则建议使用值 ddl
(所有数据定义语句)。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_statement 数据库标志设置为
ddl
。点击保存。新配置会显示在实例概览页面上。
SQL log statement stats enabled
API 中的类别名称:SQL_LOG_STATEMENT_STATS_ENABLED
Cloud SQL for PostgreSQL 数据库实例未将 log_statement_stats 数据库标志设置为关闭。
启用 log_statement_stats 标志后,端到端性能统计信息会添加到每个查询的 PostgreSQL 日志中。此设置对于问题排查非常有用,但可能会大大增加日志数量和性能开销。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_statement_stats 数据库标志设置为关闭。
点击保存。新配置会显示在实例概览页面上。
SQL log temp files
API 中的类别名称:SQL_LOG_TEMP_FILES
Cloud SQL for PostgreSQL 数据库实例没有将 log_temp_files 数据库标志设置为 0。
您可以针对排序、哈希和临时查询结果创建临时文件。 将 log_temp_files 标志设置为 0 即可记录所有临时文件信息。记录所有临时文件有助于识别潜在的性能问题。如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分下,将 log_temp_files 数据库标志的值设为 0。
点击保存。新配置会显示在实例概览页面上。
SQL no root password
API 中的类别名称:SQL_NO_ROOT_PASSWORD
MySQL 数据库实例没有为根账号设置密码。您应该为 MySQL 数据库实例添加密码。如需了解详情,请参阅 MySQL 用户。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
在加载的实例详情页面上,选择用户标签页。
点击
root
用户旁边的更多 ,然后选择更改密码。输入安全系数高的新密码,然后点击确定。
SQL public IP
API 中的类别名称:SQL_PUBLIC_IP
Cloud SQL 数据库具有公共 IP 地址。
为了减小组织的受攻击面,Cloud SQL 数据库不应具有公共 IP。专用 IP 地址可为您的应用提高网络安全性并缩短延迟时间。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
在左侧菜单中,点击连接。
点击网络标签页,然后取消选中公共 IP 复选框。
如果实例尚未配置为使用专用 IP,请参阅为现有实例配置专用 IP。
点击保存。
SQL remote access enabled
API 中的类别名称:SQL_REMOTE_ACCESS_ENABLED
Cloud SQL for SQL Server 数据库实例未将远程访问数据库标志设置为关闭。
激活后,此设置会授予从远程服务器运行本地存储过程或从本地服务器运行远程存储过程的权限。攻击者可能会滥用此功能,将查询处理任务分流到目标,从而针对远程服务器发起拒绝服务攻击 (DoS)。为了防止滥用,我们建议停用此设置。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在标志部分,将远程访问设置为关闭。
点击保存。新配置会显示在实例概览页面上。
SQL skip show database disabled
API 中的类别名称:SQL_SKIP_SHOW_DATABASE_DISABLED
Cloud SQL for MySQL 数据库实例未将 skip_ show_database 数据库标志设置为开启。
开启后,如果用户没有 SHOW DATABASES 权限,此标志会阻止用户使用 SHOW DATABASES 语句。通过此设置,未经明确许可,用户将无法看到属于其他用户的数据库。我们建议启用此标志。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在标志部分中,将 skip_show_database 设置为开启。
点击保存。新配置会显示在实例概览页面上。
SQL trace flag 3625
API 中的类别名称:SQL_TRACE_FLAG_3625
Cloud SQL for SQL Server 数据库实例未将 3625(跟踪记录标志)数据库标志设置为开启。
此标志通过使用星号 (******
) 遮盖某些错误消息的参数,限制向未获得系统管理员固定服务器角色的用户返回的信息量。为防止敏感信息泄露,建议您启用该标志。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分中,将 3625 设置为开启。
点击保存。新配置会显示在实例概览页面上。
SQL user connections configured
API 中的类别名称:SQL_USER_CONNECTIONS_CONFIGURED
Cloud SQL for SQL Server 数据库实例配置了用户连接数据库标志。
用户连接选项指定 SQL Server 实例上允许的并发用户连接数上限。由于它是一个动态(自行配置)选项,因此 SQL Server 会根据需要自动调整用户连接数上限,直至达到允许的最大值。默认值为 0,表示最多允许 32767 个用户连接。因此,建议不要配置用户连接数据库标志。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分中,点击用户连接旁边的
删除。点击保存。新配置会显示在实例概览页面上。
SQL user options configured
API 中的类别名称:SQL_USER_OPTIONS_CONFIGURED
Cloud SQL for SQL Server 数据库实例配置了用户选项数据库标志。
这项设置会覆盖所有用户的 SET 选项的全局默认值。由于用户和应用可能会假设系统使用的是默认数据库 SET 选项,因此设置用户选项可能会造成意外结果。因此,建议不要配置用户选项数据库标志。
如需了解详情,请参阅配置数据库标志。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
点击
修改。在数据库标志部分中,点击用户选项旁边的
删除。点击保存。新配置会显示在实例概览页面上。
SQL weak root password
API 中的类别名称:SQL_WEAK_ROOT_PASSWORD
MySQL 数据库实例为根账号设置了安全系数低的密码。应为实例设置安全系数高的密码。如需了解详情,请参阅 MySQL 用户。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
在加载的实例详情页面上,选择用户标签页。
点击
root
用户旁边的更多 ,然后选择更改密码。输入安全系数高的新密码,然后点击确定。
SSL not enforced
API 中的类别名称:SSL_NOT_ENFORCED
Cloud SQL 数据库实例不要求所有传入连接使用 SSL。
为避免在未加密通信中泄露所传输的敏感数据,连至您的 SQL 数据库实例的所有传入连接都应使用 SSL。详细了解如何 配置 SSL/TLS。
要修复此发现结果,请仅允许 SSL 连接您的 SQL 实例:
转到 Google Cloud 控制台中的 Cloud SQL 实例页面。
选择 Security Health Analytics 发现结果中列出的实例。
在连接标签页上,点击只允许 SSL 连接或需要受信任的客户端证书。如需了解详情,请参阅强制执行 SSL/TLS 加密。
如果您选择需要受信任的客户端证书,请创建一个新客户端 证书。如需了解详情,请参阅创建新的客户端证书。
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 高级层级的项目级激活,此发现结果仅在父级组织中启用了标准层级时才可用。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的 Cloud KMS 密钥页面。
点击发现结果中指明的密钥环的名称。
点击发现结果中指明的密钥的名称。
选中主要版本旁边的复选框,然后点击显示信息面板。
将有权对数据进行加密、解密或签名的主用户的数量减少到三个或更少。如需撤消权限,请点击每个主账号旁边的
Delete(删除)。
Unconfirmed AppArmor profile
API 中的类别名称:GKE_APP_ARMOR
容器可以明确配置为不受 AppArmor 限制。这会确保没有任何 AppArmor 配置文件应用于该容器,从而让该容器不受其限制。停用这项预防性安全控件会增加 以及容器逃逸的风险
如需修复此发现结果,请对受影响的工作负载执行以下步骤:
- 打开每个受影响工作负载的清单。
- 将以下受限字段设置为任一允许的值。
受限字段
metadata.annotations["container.apparmor.security.beta.kubernetes.io/*"]
允许使用的值
- false
User managed service account key
API 中的类别名称:USER_MANAGED_SERVICE_ACCOUNT_KEY
用户管理服务账号密钥。 如果服务账号密钥未正确管理,则会带来安全风险。您应该尽可能选择更安全的服务账号密钥替代方案。如果必须使用服务账号密钥进行身份验证,您将负责私钥的安全性以及管理服务账号密钥的最佳实践中所述的其他操作。如果系统阻止您创建服务账号密钥,您的组织可能会停用服务账号密钥创建功能。如需了解详情,请参阅管理默认安全的组织资源。
如需修复此发现结果,请完成以下步骤:
转到 Google Cloud 控制台中的服务账号页面。
如有必要,选择发现结果中指明的项目。
删除发现结果中指明的用户管理的服务账号密钥(如果它们未被任何应用使用)。
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 政策修复
转到 Google Cloud 控制台中的目标代理页面。
找到发现结果中指明的目标代理并记下使用者列中的转发规则。
如需创建新的 SSL 政策,请参阅使用 SSL 政策。政策的最低 TLS 版本应为 1.2,并且应使用新型或受限配置文件。
如需使用自定义配置文件,请确保停用以下加密套件:
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
将 SSL 政策应用于您之前记下的每个转发规则。
弱加密套件或较低级别的 TLS 版本允许修复
在 Google Cloud 控制台中,进入 SSL 政策页面。
找到使用者列中指明的负载均衡器。
点击政策名称下方。
点击
修改。更改 将最低 TLS 版本更新为 TLS 1.2,并将配置文件更新为 Modern 或 Restricted。
如需使用自定义配置文件,请确保停用以下加密套件:
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
点击保存。
Web UI enabled
API 中的类别名称:WEB_UI_ENABLED
GKE 网页界面(信息中心)已启用。
高度特权的 Kubernetes 服务账号支持 Kubernetes 网页界面。如果泄露,则该服务账号可能会被滥用。如果您已经在使用 Google Cloud 控制台,则 Kubernetes 网页界面会不必要地扩展您的攻击面。了解如何停用 Kubernetes 网页界面。
要修复此发现结果,请停用 Kubernetes 网页界面:
转到 Google Cloud 控制台中的 Kubernetes 集群页面。
点击 Security Health Analytics 发现结果中列出的集群的名称。
点击
修改。如果最近更改了集群配置,则修改按钮可能会被停用。如果您无法修改集群设置,请等待几分钟,然后重试。
点击插件。此部分将展开,显示可用的插件。
在 Kubernetes 信息中心下拉列表中,请选择停用。
点击保存。
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 控制台
- 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
- 在左侧窗格中,选择“政策”
- 搜索并选择 AWSCloudShellFullAccess
- 在“关联的实体”标签页中,选中每项对应的复选框,然后选择“分离”
Access Keys Rotated Every 90 Days or Less
API 中的类别名称:ACCESS_KEYS_ROTATED_90_DAYS_LESS
访问密钥由访问密钥 ID 和私有访问密钥组成,用于对您发往 AWS 的程序化请求进行签名。AWS 用户需要使用自己的访问密钥,才能通过 AWS 命令行界面 (AWS CLI)、适用于 Windows PowerShell 的工具、AWS SDK 或使用各个 AWS 服务的 API 进行直接 HTTP 调用,以程序化方式调用 AWS。建议定期轮替所有访问密钥。
建议:确保访问密钥每 90 天(或更短周期)轮替一次 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 转到管理控制台 (https://console.aws.amazon.com/iam)
- 点击“
Users
” - 点击
Security Credentials
- 作为管理员
- 针对90
天内未轮替的密钥点击“Make Inactive
” - 作为 IAM 用户
- 对于90
天内未轮替或使用的密钥,点击Make Inactive
或Delete
- 点击“
Create Access Key
” - 使用新的访问密钥凭据更新程序化调用
AWS CLI
- 在第一个访问密钥仍处于有效状态时,创建第二个访问密钥,该密钥默认处于有效状态。运行以下命令:
aws iam create-access-key
此时,用户有两个有效的访问密钥。
- 更新所有应用和工具以使用新访问密钥。
- 使用以下命令确定第一个访问密钥是否仍在使用:
aws iam get-access-key-last-used
- 一种方法是等待几天,然后检查旧的访问密钥是否有任何用途,然后再继续操作。
即使第 3 步指示未使用旧密钥,我们也建议您不要立即删除第一个访问密钥。请改用以下命令将第一个访问密钥的状态更改为“Inactive”(无效):
aws iam update-access-key
-
请仅使用新的访问密钥来确认您的应用是否正常运行。仍在使用原始访问密钥的任何应用和工具都将此时停止运行,因为它们无法再访问 AWS 资源。如果您发现此类应用或工具,可以将其状态切换回“有效”,以便重新启用第一个访问密钥。然后,返回第 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 控制台
目前不支持通过 AWS 管理控制台移除过期的证书。如需通过 AWS API 删除存储在 IAM 中的 SSL/TLS 证书,请使用命令行界面 (CLI)。
AWS CLI
如需删除已过期的证书,请将 CERTIFICATE_NAME
替换为要删除的证书的名称,运行以下命令:
aws iam delete-server-certificate --server-certificate-name <CERTIFICATE_NAME>
上述命令成功执行后,不会返回任何输出。
Autoscaling Group Elb Healthcheck Required
API 中的类别名称:AUTOSCALING_GROUP_ELB_HEALTHCHECK_REQUIRED
此报告会检查与负载均衡器关联的自动扩缩组是否使用 Elastic Load Balancing 健康检查。
这可确保该组可以根据负载均衡器提供的额外测试来确定实例的健康状况。使用弹性负载均衡器健康检查有助于支持使用 EC2 自动扩缩组的应用的可用性。
建议:检查与负载均衡器相关的所有自动扩缩组是否使用健康检查 如需修复此发现结果,请完成以下步骤:AWS 控制台
启用 Elastic Load Balancing 健康检查
- 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台。
- 在导航窗格的“自动扩缩”下,选择“自动扩缩组”。
- 选中您的组对应的复选框。
- 选择“修改”。
- 在“健康检查”下,选择“健康检查类型”为 ELB。
- 对于健康检查宽限期,请输入 300。
- 在页面底部,选择“更新”。
如需详细了解如何将负载均衡器与自动扩缩组搭配使用,请参阅 AWS 自动扩缩用户指南。
Auto Minor Version Upgrade Feature Enabled Rds Instances
API 中的类别名称:AUTO_MINOR_VERSION_UPGRADE_FEATURE_ENABLED_RDS_INSTANCES
确保 RDS 数据库实例已启用“自动次要版本升级”标志,以便在指定的维护时间段内自动接收次要引擎升级。因此,RDS 实例可以获取其数据库引擎的新功能、bug 修复和安全补丁。
建议:确保已针对 RDS 实例启用次要版本自动升级功能 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/rds/ 前往 RDS 信息中心。
- 在左侧导航面板中,点击
Databases
。 - 选择要更新的 RDS 实例。
- 点击右上角的
Modify
按钮。 - 在
Modify DB Instance: <instance identifier>
页面的Maintenance
部分中,选择Auto minor version upgrade
,然后点击Yes
单选按钮。 - 点击页面底部的
Continue
,选中“立即应用”以立即应用更改,或选择Apply during the next scheduled maintenance window
以避免任何停机时间。 - 检查所做的更改,然后点击
Modify DB Instance
。实例状态应从“可用”更改为“修改”,然后再更改为“可用”。启用该功能后,Auto Minor Version Upgrade
状态应会更改为Yes
。
AWS CLI
- 运行
describe-db-instances
命令以列出所选 AWS 区域中可用的所有 RDS 数据库实例名称:
aws rds describe-db-instances --region <regionName> --query 'DBInstances[*].DBInstanceIdentifier'
- 命令输出应返回每个数据库实例标识符。
- 运行
modify-db-instance
命令以修改所选的 RDS 实例配置,此命令将立即应用更改,移除--apply-immediately
以在下一个计划维护窗口内应用更改,并避免任何停机:
aws rds modify-db-instance --region <regionName> --db-instance-identifier <dbInstanceIdentifier> --auto-minor-version-upgrade --apply-immediately
- 命令输出应该会显示 RDS 实例的新配置元数据并检查
AutoMinorVersionUpgrade
参数值。 - 运行
describe-db-instances
命令,检查是否已成功启用次要版本自动升级功能:
aws rds describe-db-instances --region <regionName> --db-instance-identifier <dbInstanceIdentifier> --query 'DBInstances[*].AutoMinorVersionUpgrade'
- 命令输出应返回功能当前状态设为
true
、功能为enabled
,并且次要引擎升级将应用于所选的 RDS 实例。
Aws Config Enabled All Regions
API 中的类别名称:AWS_CONFIG_ENABLED_ALL_REGIONS
AWS Config 是一项 Web 服务,可对您账号中的受支持 AWS 资源执行配置管理,并向您传送日志文件。记录的信息包括配置项 (AWS 资源)、配置项 (AWS 资源) 之间的关系,以及资源之间的任何配置更改。建议在所有区域中启用 AWS Config。
建议:确保在所有区域中启用 AWS Config 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 在控制台右上角选择您要重点关注的区域
- 点击“服务”
- 点击“配置”
- 如果此区域中启用了 Config Recorder,您应该从左侧导航菜单导航到“Settings”页面。如果此区域中尚未启用 Config recorder,则应选择“Get Started”(开始)。
- 选择“记录此区域中支持的所有资源”
- 选择包含全球资源(IAM 资源)
- 指定同一账号或其他受管 AWS 账号中的 S3 存储桶
- 通过同一 AWS 账号或其他托管式 AWS 账号创建 SNS 主题
AWS CLI
- 根据 AWS Config Service 前提条件,确保具有适当的 S3 存储桶、SNS 主题和 IAM 角色。
- 运行以下命令以创建新的配置记录器:
aws configservice put-configuration-recorder --configuration-recorder name=default,roleARN=arn:aws:iam::012345678912:role/myConfigRole --recording-group allSupported=true,includeGlobalResourceTypes=true
- 在本地创建一个分发渠道配置文件,该文件会指定渠道属性(根据之前设置的前提条件进行填充):
{
"name": "default",
"s3BucketName": "my-config-bucket",
"snsTopicARN": "arn:aws:sns:us-east-1:012345678912:my-config-notice",
"configSnapshotDeliveryProperties": {
"deliveryFrequency": "Twelve_Hours"
}
}
- 运行以下命令,创建新的提交渠道,并引用在上一步中创建的 JSON 配置文件:
aws configservice put-delivery-channel --delivery-channel file://deliveryChannel.json
- 通过运行以下命令启动配置记录器:
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 控制台
- 使用 IAM 身份的凭据登录安全中心控制台。
- 首次打开 Security Hub 控制台时,请选择“启用 AWS Security Hub”。
- 在欢迎页面上,“安全标准”列出了 Security Hub 支持的安全标准。
- 选择“启用安全中心”。
AWS CLI
- 运行 enable-security-hub 命令。如需启用默认标准,请添加
--enable-default-standards
。
aws securityhub enable-security-hub --enable-default-standards
- 如需在不使用默认标准的情况下启用安全中心,请添加
--no-enable-default-standards
。
aws securityhub enable-security-hub --no-enable-default-standards
Cloudtrail Logs Encrypted Rest Using Kms Cmks
API 中的类别名称:CLOUDTRAIL_LOGS_ENCRYPTED_REST_USING_KMS_CMKS
AWS CloudTrail 是一项 Web 服务,用于记录账号的 AWS API 调用,并根据 IAM 政策将这些日志提供给用户和资源。AWS Key Management Service (KMS) 是一项托管服务,可帮助创建和控制用于加密账号数据的加密密钥,并使用硬件安全模块 (HSM) 来保护加密密钥的安全性。CloudTrail 日志可配置为利用服务器端加密 (SSE) 和 KMS 客户创建的主密钥 (CMK) 来进一步保护 CloudTrail 日志。建议将 CloudTrail 配置为使用 SSE-KMS。
建议:确保使用 KMS CMK 对 CloudTrail 日志进行静态加密 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台,然后打开 CloudTrail 控制台:https://console.aws.amazon.com/cloudtrail
- 在左侧导航窗格中,选择
Trails
。 - 点击路线
- 在
S3
部分下,点击“修改”按钮(铅笔图标) - 点击
Advanced
- 从
KMS key Id
下拉菜单中选择一个现有 CMK
- 注意:确保 CMK 位于与 S3 存储桶相同的区域
- 注意:您需要对所选的 CMK 应用 KMS 密钥政策,以便 CloudTrail 作为服务使用所提供的 CMK 加密和解密日志文件。点击此处可查看修改所选 CMK 密钥政策的步骤 - 点击
Save
- 您将看到一条通知消息,指出您需要拥有指定 KMS 密钥的解密权限,才能解密日志文件。
- 点击
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 控制台
- 登录 AWS 管理控制台并在 https://console.aws.amazon.com/cloudtrail 上打开 IAM 控制台
- 点击左侧导航窗格中的
Trails
- 点击目标步道
- 在
General details
部分中,点击edit
Advanced settings
部分下- 勾选
Log file validation
下的启用复选框 - 点击
Save changes
AWS CLI
aws cloudtrail update-trail --name <trail_name> --enable-log-file-validation
请注意,您可以通过运行以下命令,使用这些摘要定期验证日志:
aws cloudtrail validate-logs --trail-arn <trail_arn> --start-time <start_time> --end-time <end_time>
Cloudtrail Trails Integrated Cloudwatch Logs
API 中的类别名称:CLOUDTRAIL_TRAILS_INTEGRATED_CLOUDWATCH_LOGS
AWS CloudTrail 是一项 Web 服务,用于记录在给定 AWS 账号中进行的 AWS API 调用。记录的信息包括 API 调用方的身份、API 调用的时间、API 调用方的来源 IP 地址、请求参数以及 AWS 服务返回的响应元素。CloudTrail 使用 Amazon S3 存储和传送日志文件,因此日志文件会永久存储。除了在指定的 S3 存储桶中捕获 CloudTrail 日志以进行长期分析之外,您还可以通过将 CloudTrail 配置为将日志发送到 CloudWatch 日志来执行实时分析。对于在账号的所有区域中启用的跟踪记录,CloudTrail 会将所有这些区域的日志文件发送到 CloudWatch Logs 日志组。建议将 CloudTrail 日志发送到 CloudWatch 日志。
注意:此建议旨在确保捕获、监控和适当提醒 AWS 账号活动。CloudWatch Logs 是使用 AWS 服务实现此目的的原生方式,但并不排除使用其他解决方案。
建议:确保 CloudTrail 跟踪记录与 CloudWatch Logs 集成 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录
https://console.aws.amazon.com/cloudtrail/
中的 CloudTrail 控制台 - 选择需要更新的
Trail
。 - 向下滚动至
CloudWatch Logs
- 点击
Edit
- 在
CloudWatch Logs
下,点击方框Enabled
- 在
Log Group
下,选择“新建”或选择现有日志组 - 修改
Log group name
以匹配 CloudTrail 或选择现有的 CloudWatch Group。 - 在
IAM Role
下,选择“新建”或选择现有项目。 - 修改
Role name
以匹配 CloudTrail,或选择现有 IAM 角色。 - 点击“保存更改”。
AWS CLI
aws cloudtrail update-trail --name <trail_name> --cloudwatch-logs-log-group-arn <cloudtrail_log_group_arn> --cloudwatch-logs-role-arn <cloudtrail_cloudwatchLogs_role_arn>
Cloudwatch Alarm Action Check
API 中的类别名称:CLOUDWATCH_ALARM_ACTION_CHECK
这将检查 Amazon Cloudwatch 是否定义了当警报在“正常”“闹钟”状态之间转换时的操作和“INSUFFICIENT_DATA”。
在 Amazon CloudWatch 警报中为 ALARM 状态配置操作非常重要,这样才能在监控的指标超出阈值时触发即时响应。
它可确保快速解决问题、缩短停机时间,实现自动修复、维护系统运行状况并防止服务中断。
警报至少包含一项操作。
当闹钟转换为“INSUFFICIENT_DATA”时,闹钟至少有一项操作从任何其他状态区分开来
(可选)当警报从任何其他状态转换为“OK”状态时,警报至少具有一项操作。
AWS 控制台
如需为您的 Amazon CloudWatch 闹钟配置闹钟操作,请执行以下操作。
- 打开 Amazon CloudWatch 控制台 (https://console.aws.amazon.com/cloudwatch/)。
- 在导航窗格中的“闹钟”下,选择“所有闹钟”。
- 选择您要修改的 Amazon CloudWatch 闹钟,然后选择“操作”然后选择“修改”
- 在左侧,选择“第 2 步 - 可选的配置操作”
- 对于“闹钟状态触发器”选择“在闹钟中”设置基于闹钟的操作的选项。
- 如需向新创建的 SNS 主题发送通知,请选择“创建新主题”。
- 在“创建新主题...”框中,指定一个唯一的 SNS 主题名称。
- 在“将接收通知的电子邮件端点…”框中,指定一个或多个电子邮件地址。
- 然后,选择“创建主题”以创建所需的 Amazon SNS 主题。
- 选择右下角的“下一步”和“下一步”然后选择“更新闹钟”以应用所做的更改。
- 打开电子邮件客户端,然后在 AWS Notifications 发送的电子邮件中,点击相应链接以确认您已订阅相关 SNS 主题。
- 重复第 4 步到第 11 步,并在第 5 步中为“闹钟状态触发器”选择“OK”和“数据不足”,以便为这两种状态设置操作。
- 对同一 AWS 区域内的所有其他 CloudWatch 警报重复此过程。
- 对所有其他 AWS 区域中的所有其他 CloudWatch 警报重复此过程。
Cloudwatch Log Group Encrypted
API 中的类别名称:CLOUDWATCH_LOG_GROUP_ENCRYPTED
此检查可确保 CloudWatch 日志已配置 KMS。
日志组数据在 CloudWatch Logs 中始终会加密。默认情况下,CloudWatch 日志会对静态日志数据使用服务器端加密。或者,您也可以使用 AWS Key Management Service 进行此类加密。如果您选择启用,系统会使用 AWS KMS 密钥进行加密。通过将 KMS 密钥与日志组相关联,可在日志组级别启用使用 AWS KMS 进行加密的功能(在创建日志组时或创建日志组后启用)。
建议:检查是否使用 KMS 对 Amazon CloudWatch Logs 中的所有日志组进行了加密如需了解详情,请参阅 Amazon CloudWatch 用户指南中的使用 AWS Key Management Service 加密 CloudWatch Logs 中的日志数据。
了解此发现结果类型的CloudTrail CloudWatch Logs Enabled
API 中的类别名称:CLOUD_TRAIL_CLOUD_WATCH_LOGS_ENABLED
此控件会检查 CloudTrail 跟踪记录是否配置为向 CloudWatch Logs 发送日志。如果跟踪记录的 CloudWatchLogsLogGroupArn 属性为空,该控件就会失败。
CloudTrail 会记录在给定账号中进行的 AWS API 调用。记录的信息包括:
- API 调用方的身份
- API 调用的时间
- API 调用方的来源 IP 地址
- 请求参数
- AWS 服务返回的响应元素
CloudTrail 使用 Amazon S3 来存储和传送日志文件。您可以在指定的 S3 存储桶中捕获 CloudTrail 日志以进行长期分析。如需执行实时分析,您可以将 CloudTrail 配置为将日志发送到 CloudWatch 日志。
对于在账号的所有区域中启用的跟踪记录,CloudTrail 会将来自所有这些区域的日志文件发送到 CloudWatch Logs 日志组。
安全中心建议您将 CloudTrail 日志发送到 CloudWatch Logs。请注意,此建议旨在确保捕获、监测并适当提醒账号活动。您可以使用 CloudWatch Logs 对您的 AWS 服务进行这项设置。此建议并不排除使用其他解决方案。
将 CloudTrail 日志发送到 CloudWatch Logs 有助于根据用户、API、资源和 IP 地址记录实时和历史活动。您可以采用此方法,针对异常或敏感的账号活动设置警报和通知。
建议:检查是否已将所有 CloudTrail 跟踪记录配置为向 AWS CloudWatch 发送日志如需将 CloudTrail 与 CloudWatch 日志集成,请参阅 AWS CloudTrail 用户指南中的将事件发送到 CloudWatch 日志。
了解此发现结果类型No AWS Credentials in CodeBuild Project Environment Variables
API 中的类别名称:CODEBUILD_PROJECT_ENVVAR_AWSCRED_CHECK
此命令会检查项目是否包含环境变量 AWS_ACCESS_KEY_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) 个人访问令牌
- 通过 https://console.aws.amazon.com/codebuild/ 打开 CodeBuild 控制台。
- 选择包含个人访问令牌或用户名和密码的 build 项目。
- 在“修改”中,选择“来源”。
- 选择“解除与 GitHub/Bitbucket 的关联”。
- 选择“使用 OAuth 连接”,然后选择“连接到 GitHub/Bitbucket”。
- 当系统提示时,根据需要选择授权。
- 根据需要重新配置代码库网址和其他配置设置。
- 选择“更新来源”。
如需了解详情,请参阅 AWS CodeBuild 用户指南中基于 CodeBuild 用例的示例。
了解此发现结果类型的Credentials Unused 45 Days Greater Disabled
API 中的类别名称:CREDENTIALS_UNUSED_45_DAYS_GREATER_DISABLED
AWS IAM 用户可以使用不同类型的凭据(如密码或访问密钥)访问 AWS 资源。建议停用或移除 45 天或更长时间未使用的所有凭据。
建议:确保已停用 45 天或更长时间未使用的凭据 如需修复此发现结果,请完成以下步骤:AWS 控制台
执行以下操作来管理未使用的密码(IAM 用户控制台访问权限)
- 登录 AWS 管理控制台:
- 点击
Services
- 点击
IAM
- 点击
Users
- 点击
Security Credentials
- 选择
Console last sign-in
超过 45 天的用户 - 点击
Security credentials
- 在
Sign-in credentials
部分,Console password
点击Manage
- 在“控制台访问权限”下,选择
Disable
10. 点击Apply
执行以下操作以停用访问密钥:
- 登录 AWS 管理控制台:
- 点击
Services
- 点击
IAM
- 点击
Users
- 点击
Security Credentials
- 选择任何使用时间超过 45 天且使用过的访问密钥
- 点击Make Inactive
- 选择任何存在时间超过 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 的默认安全群组对所有流量进行限制安全群组成员
如需实现规定的状态,请执行以下操作:
- 识别默认安全组中存在的 AWS 资源
- 为这些资源创建一组最小权限安全群组
- 将资源放入这些安全群组
- 从默认安全群组中移除第 1 条中提及的资源
安全群组状态
- 访问 https://console.aws.amazon.com/vpc/home 以登录 AWS 管理控制台
- 对所有 VPC(包括每个 AWS 区域中的默认 VPC)重复以下步骤:
- 在左侧窗格中,点击
Security Groups
- 对于每个默认安全群组,请执行以下操作:
- 选择
default
安全群组 - 点击
Inbound Rules
标签页 - 移除所有入站规则
- 点击
Outbound Rules
标签页 - 移除所有出站规则
推荐:
对于 IAM 组,您可以修改“name”字段。为所有区域中的所有 VPC 修复默认组规则后,请修改此字段,添加类似“请勿使用。DO NOT ADD RULES"
了解此发现结果类型的Dms Replication Not Public
API 中的类别名称:DMS_REPLICATION_NOT_PUBLIC
检查 AWS DMS 复制实例是否可公开访问。为此,它会检查 PubliclyAccessible
字段的值。
专用复制实例具有专用 IP 地址,您无法在复制网络之外访问该地址。当源数据库和目标数据库位于同一网络中时,复制实例应具有专用 IP 地址。该网络还必须使用 VPN、AWS Direct Connect 或 VPC 对等互连连接到复制实例的 VPC。如需详细了解公共和专用复制实例,请参阅 AWS Database Migration Service 用户指南中的公共和专用复制实例。
您还应确保只有获得授权的用户才能访问您的 AWS DMS 实例配置。为此,请限制用户的 IAM 权限,以便他们无法修改 AWS DMS 设置和资源。
建议:检查 AWS Database Migration Service 复制实例是否可公开访问DMS 复制实例创建后,您将无法更改其公共访问权限设置。如需更改公共访问权限设置,请删除当前实例,然后重新创建实例。请勿选择“可公开访问”选项。
了解此发现结果类型的Do Setup Access Keys During Initial User Setup All Iam Users Console
API 中的类别名称:DO_SETUP_ACCESS_KEYS_DURING_INITIAL_USER_SETUP_ALL_IAM_USERS_CONSOLE
AWS 控制台在创建新的 IAM 用户时默认不选中任何复选框。创建 IAM 用户凭据时,您必须确定它们需要哪种类型的访问权限。
编程访问:IAM 用户可能需要进行 API 调用、使用 AWS CLI 或使用 Tools for Windows PowerShell。在这种情况下,请为该用户创建访问密钥(访问密钥 ID 和私有访问密钥)。
AWS 管理控制台访问权限:如果用户需要访问 AWS 管理控制台,请为用户创建密码。
建议:请勿在初始用户设置期间为所有具有控制台密码的 IAM 用户设置访问密钥 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台:
- 点击
Services
- 点击
IAM
- 点击
Users
- 点击“
Security Credentials
” - 作为管理员
- 点击与用户个人资料同时创建但未使用的密钥旁边的 X 图标(Delete)
。 - 作为 IAM 用户
- 对于与用户个人资料同时创建但尚未使用的密钥,点击 X(Delete)
。
AWS CLI
aws iam delete-access-key --access-key-id <access-key-id-listed> --user-name <users-name>
Dynamodb Autoscaling Enabled
API 中的类别名称:DYNAMODB_AUTOSCALING_ENABLED
这会检查 Amazon DynamoDB 表能否根据需要扩缩其读写容量。如果表使用按需容量模式或已配置自动扩缩的预配模式,则此控件会通过。根据需求扩缩容量可避免限制异常,这有助于保持应用的可用性。
采用按需容量模式的 DynamoDB 表仅受 DynamoDB 吞吐量默认表配额的限制。如需提高这些配额,您可以通过 AWS 支持团队提交支持服务工单。
具有自动伸缩功能的预配模式下的 DynamoDB 表会根据流量模式动态调整预配的吞吐量容量。有关 DynamoDB 请求限制的更多信息,请参阅“Amazon DynamoDB 开发者指南”中的“请求限制和爆发容量”。
建议:DynamoDB 表应根据需求自动扩缩容量如需详细了解如何在容量模式下为现有表启用 DynamoDB 自动扩缩,请参阅 Amazon DynamoDB 开发者指南中的为现有表启用 DynamoDB 自动扩缩。
了解此发现结果类型的Dynamodb In Backup Plan
API 中的类别名称:DYNAMODB_IN_BACKUP_PLAN
此控件可评估备份方案是否涵盖 DynamoDB 表。如果 DynamoDB 表不在备份方案的涵盖范围内,则此控件将失败。此控件仅评估处于 ACTIVE 状态的 DynamoDB 表。
备份可帮助您更快地从安全事件中恢复。它们还可以增强系统的弹性。在备份方案中添加 DynamoDB 表有助于保护您的数据免遭意外丢失或删除。
建议:DynamoDB 表应纳入备份方案中如需将 DynamoDB 表添加到 AWS 备份备份方案,请参阅 AWS 备份开发者指南中的将资源分配到备份方案。
了解此发现结果类型Dynamodb Pitr Enabled
API 中的类别名称:DYNAMODB_PITR_ENABLED
时间点恢复 (PITR) 是可用于备份 DynamoDB 表的机制之一。
某个时间点的备份会保留 35 天。如果您需要更长的保留期限,请参阅 AWS 文档中的使用 AWS Backup 为 Amazon DynamoDB 设置定期备份。
建议:检查是否对所有 AWS DynamoDB 表启用了时间点恢复 (PITR) 如需修复此发现结果,请完成以下步骤:Terraform
如需为 DynamoDB 表设置 PITR,请设置 point_in_time_recovery
块:
resource "aws_dynamodb_table" "example" {
# ... other configuration ...
point_in_time_recovery {
enabled = true
}
}
AWS 控制台
为现有表启用 DynamoDB 时间点恢复
- 通过 https://console.aws.amazon.com/dynamodb/ 打开 DynamoDB 控制台。
- 选择您要使用的表,然后选择“备份”。
- 在“时间点恢复”部分的“状态”下,选择“启用”。
- 再次选择“启用”以确认更改。
AWS CLI
aws dynamodb update-continuous-backups \
--table-name "GameScoresOnDemand" \
--point-in-time-recovery-specification "PointInTimeRecoveryEnabled=true"
Dynamodb Table Encrypted Kms
API 中的类别名称:DYNAMODB_TABLE_ENCRYPTED_KMS
检查是否使用客户管理的 KMS 密钥(非默认密钥)对所有 DynamoDB 表进行了加密。
建议:检查是否使用 AWS Key Management Service (KMS) 对所有 DynamoDB 表进行了加密 如需修复此发现结果,请完成以下步骤:Terraform
要修复此控制措施,请创建一个 AWS KMS 密钥并使用它加密违规的 DynamoDB 资源。
resource "aws_kms_key" "dynamodb_encryption" {
description = "Used for DynamoDB encryption configuration"
enable_key_rotation = true
}
resource "aws_dynamodb_table" "example" {
# ... other configuration ...
server_side_encryption {
enabled = true
kms_key_arn = aws_kms_key.dynamodb_encryption.arn
}
}
AWS 控制台
假设有一个可用于加密 DynamoDB 的表单中现有的 AWS KMS 密钥。
将 DynamoDB 表加密更改为客户管理和拥有的 KMS 密钥。
- 通过 https://console.aws.amazon.com/dynamodb/ 打开 DynamoDB 控制台。
- 选择您要使用的表格,然后选择“其他设置”。
- 在“加密”下,选择“管理加密”。
- 对于“静态加密”,请选择“存储在您的账号中,并由您拥有和管理”。
- 选择要使用的 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 快照设为不公开,请执行以下操作:
- 通过 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台。
- 在导航窗格中,选择“弹性块存储区”下的“快照”菜单,然后选择您的公共快照。
- 从“操作”中,选择“修改权限”。
- 选择“不公开”。
- (可选)添加要与其共享快照的授权账号的 AWS 账号,然后选择“添加权限”。
- 选择“保存”。
Ebs Volume Encryption Enabled All Regions
API 中的类别名称:EBS_VOLUME_ENCRYPTION_ENABLED_ALL_REGIONS
Elastic Compute Cloud (EC2) 在使用 Elastic Block Store (EBS) 服务时支持静态加密。虽然默认处于停用状态,但支持在创建 EBS 卷时强制加密。
建议:确保在所有区域中启用 EBS 卷加密 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台,然后使用 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台
- 在
Account attributes
下,点击EBS encryption
。 - 点击
Manage
。 - 点击
Enable
复选框。 - 点击
Update EBS encryption
- 对需要更改的每个区域重复此操作。
注意:EBS 卷加密是按区域配置的。
AWS CLI
- 运行
aws --region <region> ec2 enable-ebs-encryption-by-default
- 验证
"EbsEncryptionByDefault": true
是否显示。 - 重复每个需要更改的区域。
注意:EBS 卷加密是按区域配置的。
Ec2 Instances In Vpc
API 中的类别名称:EC2_INSTANCES_IN_VPC
与 EC2 Classic 相比,Amazon VPC 提供更多安全功能。建议所有节点都属于 Amazon VPC。
建议:确保所有实例都属于 VPC 如需修复此发现结果,请完成以下步骤:Terraform
如果您在 Terraform 中定义了 EC2 传统版实例,则可以将资源修改为 VPC 的一部分。此迁移将依赖于最适合您需求的架构。以下是一个简单的 Terraform 示例,展示了在 VPC 中公开公开的 EC2。
resource "aws_vpc" "example_vpc" {
cidr_block = "10.0.0.0/16"
}
resource "aws_subnet" "example_public_subnet" {
vpc_id = aws_vpc.example_vpc.id
cidr_block = "10.0.1.0/24"
availability_zone = "1a"
}
resource "aws_internet_gateway" "example_igw" {
vpc_id = aws_vpc.example_vpc.id
}
resource "aws_key_pair" "example_key" {
key_name = "web-instance-key"
public_key = "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD3F6tyPEFEzV0LX3X8BsXdMsQz1x2cEikKDEY0aIj41qgxMCP/iteneqXSIFZBp5vizPvaoIR3Um9xK7PGoW8giupGn+EPuxIA4cDM4vzOqOkiMPhz5XK0whEjkVzTo4+S0puvDZuwIsdiW9mxhJc7tgBNL0cYlWSYVkz4G/fslNfRPW5mYAM49f4fhtxPb5ok4Q2Lg9dPKVHO/Bgeu5woMc7RY0p1ej6D4CKFE6lymSDJpW0YHX/wqE9+cfEauh7xZcG0q9t2ta6F6fmX0agvpFyZo8aFbXeUBr7osSCJNgvavWbM/06niWrOvYX2xwWdhXmXSrbX8ZbabVohBK41 email@example.com"
}
resource "aws_security_group" "web_sg" {
name = "http and ssh"
vpc_id = aws_vpc.some_custom_vpc.id
ingress {
from_port = 80
to_port = 80
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
egress {
from_port = 0
to_port = 0
protocol = -1
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_instance" "web" {
ami = <ami_id>
instance_type = <instance_flavor>
key_name = aws_key_pair.example_key.name
monitoring = true
subnet_id = aws_subnet.example_public_subnet.id
vpc_security_group_ids = [aws_security_group.web_sg.id]
metadata_options {
http_tokens = "required"
}
}
AWS 控制台
如需将 EC2 Classic 迁移到 VPC,请参阅从 EC2-Classic 迁移到 VPC
AWS CLI
此 AWS CLI 示例展示了使用 Terraform 定义的相同基础架构。这是 VPC 中公开公开的 EC2 实例的简单示例
创建 VPC
aws ec2 create-vpc \
--cidr-block 10.0.0.0/16
创建公共子网
aws ec2 create-subnet \
--availability-zone 1a \
--cidr-block 10.0.1.0/24 \
--vpc-id <id_from_create-vpc_command>
创建互联网网关
aws ec2 create-internet-gateway
将互联网网关连接到 VPC
aws ec2 attach-internet-gateway \
--internet-gateway-id <id_from_create-internet-gateway_command> \
--vpc-id <id_from_create-vpc_command>
创建密钥对 - 这会将您的私钥保存在 /.ssh/web-instance-key.pem
中
aws ec2 create-key-pair \
--key-name web-instance-key \
--query "KeyMaterial" \
--output text > ~/.ssh/web-instance-key.pem && \
chmod 400 ~/.ssh/web-instance-key.pem
创建安全群组
aws ec2 create-security-group \
--group-name "http and ssh" \
--vpc-id <id_from_create-vpc_command>
创建安全群组规则 - 如需更严格的访问权限,请为端口 22 上的 SSH 定义更严格的 CIDR
aws ec2 authorize-security-group-ingress \
--group-id <id_from_create-security-group_command>
--protocol tcp \
--port 80 \
--cidr 0.0.0.0/0
aws ec2 authorize-security-group-ingress \
--group-id <id_from_create-security-group_command>
--protocol tcp \
--port 22 \
--cidr 0.0.0.0/0
aws ec2 authorize-security-group-egress \
--group-id <id_from_create-security-group_command>
--protocol -1 \
--port 0 \
--cidr 0.0.0.0/0
创建 EC2 实例
aws ec2 run-instances \
--image-id <ami_id> \
--instance-type <instance_flavor> \
--metadata-options "HttpEndpoint=enabled,HttpTokens=required" \
--monitoring true \
--key-name web-instance-key \
--subnet-id <id_from_create-subnet_command> \
--security-group-ids <id_from_create-security-group_command>
Ec2 Instance No Public Ip
API 中的类别名称:EC2_INSTANCE_NO_PUBLIC_IP
具有公共 IP 地址的 EC2 实例遭到入侵的风险更高。建议不要为 EC2 实例配置公共 IP 地址。
建议:确保没有实例拥有公共 IP 如需修复此发现结果,请完成以下步骤:Terraform
将 associate_public_ip_address = false
参数与 aws_instance
资源搭配使用,以确保预配的 EC2 实例没有公共 IP 地址
resource "aws_instance" "no_public_ip" {
...
associate_public_ip_address = false
}
AWS 控制台
默认情况下,非默认子网的 IPv4 公共寻址属性设为 false,默认子网的此属性设为 true。由 Amazon EC2 启动实例向导创建的非默认子网例外 - 向导会将该属性设置为 true。您可以使用 Amazon VPC 控制台修改此属性。
修改子网的公共 IPv4 寻址行为
- 访问 https://console.aws.amazon.com/vpc/,打开 Amazon VPC 控制台。
- 在导航窗格中,选择子网。
- 选择您的子网,然后依次选择操作 > 修改子网设置。
- 如果您选中启用自动分配公共 IPv4 地址复选框,系统会为启动到所选子网中的所有实例请求公共 IPv4 地址。根据需要选中或取消选中该复选框,然后选择保存。
AWS CLI
以下命令在默认子网中运行 EC2 实例,但不将公共 IP 地址与其相关联。
aws ec2 run-instances \
--image-id <ami_id> \
--instance-type <instance_flavor> \
--no-associate-public-ip-address \
--key-name MyKeyPair
Ec2 Managedinstance Association Compliance Status Check
API 中的类别名称:EC2_MANAGEDINSTANCE_ASSOCIATION_COMPLIANCE_STATUS_CHECK
状态管理器关联是分配给托管实例的配置。该配置定义了您要在实例上维护的状态。例如,关联可以指定必须在实例上安装并运行杀毒软件,或者必须关闭某些端口。与 AWS Systems Manager 相关联的 EC2 实例由 Systems Manager 管理,这样您就可以更轻松地应用补丁、修正错误配置并响应安全事件。
建议:确认 AWS 系统管理器关联的合规状态 如需修复此发现结果,请完成以下步骤:Terraform
以下示例演示了如何创建简单的 EC2 实例、AWS Systems Manager (SSM) 文档以及 SSM 和 EC2 实例之间的关联。支持的文档类型为 Command
和 Policy
。
resource "aws_instance" "web" {
ami = "<iam_id>"
instance_type = "<instance_flavor>"
}
resource "aws_ssm_document" "check_ip" {
name = "check-ip-config"
document_type = "Command"
content = <<DOC
{
"schemaVersion": "1.2",
"description": "Check ip configuration of a Linux instance.",
"parameters": {
},
"runtimeConfig": {
"aws:runShellScript": {
"properties": [
{
"id": "0.aws:runShellScript",
"runCommand": ["ifconfig"]
}
]
}
}
}
DOC
}
resource "aws_ssm_association" "check_ip_association" {
name = aws_ssm_document.check_ip.name
targets {
key = "InstanceIds"
values = [aws_instance.web.id]
}
}
AWS 控制台
如需了解如何使用控制台配置与 AWS Systems Manager 的关联,请参阅 AWS Systems Manager 文档中的创建关联。
AWS CLI
创建 SSM 文档
aws ssm create-document \
--name <document_name> \
--content file://path/to-file/document.json \
--document-type "Command"
创建 SSM 关联
aws ssm create-association \
--name <association_name> \
--targets "Key=InstanceIds,Values=<instance-id-1>,<instance-id-2>"
Ec2 Managedinstance Patch Compliance Status Check
API 中的类别名称:EC2_MANAGEDINSTANCE_PATCH_COMPLIANCE_STATUS_CHECK
此控件用于检查在实例上运行关联后,AWS Systems Manager 关联合规性的状态是 COMPLIANT 还是 NON_COMPLIANT。如果关联合规性状态为 NON_COMPLIANT,则控制操作会失败。
状态管理器关联是分配给托管实例的配置。该配置定义了您要在实例上维护的状态。例如,关联可以指定必须在实例上安装并运行杀毒软件,或者必须关闭某些端口。
创建一个或多个状态经理关联后,您会立即看到合规状态信息。您可以在控制台中查看合规性状态,也可以查看合规状态如何响应 AWS CLI 命令或相应 Systems Manager API 操作。对于关联,“配置合规性”会显示合规状态(“合规”或“不合规”)。还会显示分配给该关联的严重级别,例如“严重”或“中”。
如需详细了解 State Manager 关联合规性,请参阅 AWS 系统管理器用户指南中的 State Manager 关联合规性简介。
建议:检查 AWS Systems Manager 补丁合规性的状态关联失败可能与多种因素有关,包括目标和 SSM 文档名称。要解决该问题,您必须先查看关联历史记录,以确定并调查关联。如需了解如何查看关联历史记录,请参阅 AWS Systems Manager 用户指南中的查看关联历史记录。
调查后,您可以修改关联以更正发现的问题。您可以修改关联来指定新名称、时间表、严重级别或目标。修改关联后,AWS Systems Manager 会创建一个新版本。如需了解如何修改关联,请参阅 AWS Systems Manager 用户指南中的修改关联和创建关联的新版本。
了解此发现结果类型的Ec2 Metadata Service Allows Imdsv2
API 中的类别名称:EC2_METADATA_SERVICE_ALLOWS_IMDSV2
在 AWS EC2 实例上启用元数据服务时,用户可以选择使用实例元数据服务版本 1 (IMDSv1;请求/响应方法) 或实例元数据服务版本 2 (IMDSv2;会话型方法)。
建议:确保 EC2 元数据服务仅允许 IMDSv2通过控制台:
1.登录 AWS 管理控制台,然后使用 https://console.aws.amazon.com/ec2/
打开 Amazon EC2 控制台
2.在“实例”菜单下,选择“实例”。
3. 对于每个实例,请选择该实例,然后依次选择“操作”>“修改实例元数据”选项。
4.如果实例元数据服务已启用,请将 IMDSv2 设置为“必需”。
通过命令行:
aws ec2 modify-instance-metadata-options --instance-id <instance_id> --http-tokens required
Ec2 Volume Inuse Check
API 中的类别名称:EC2_VOLUME_INUSE_CHECK
确定并移除 AWS 账号中未挂接(未使用的)Elastic Block Store (EBS) 卷,以降低每月 AWS 账单的费用。删除未使用的 EBS 卷还有助于降低机密/敏感数据离开您的场所的风险。此外,此控件还会检查归档的 EC2 实例是否配置为在终止时删除卷。
默认情况下,EC2 实例会配置为删除与实例关联的任何 EBS 卷中的数据,并删除实例的根 EBS 卷。不过,默认情况下,在启动或执行期间挂接到实例的任何非根 EBS 卷在实例终止后都会保留。
建议:检查 EBS 卷是否挂接到 EC2 实例以及是否配置为在实例终止时删除 如需修复此发现结果,请完成以下步骤:Terraform
为了避免使用 Terraform 出现这种情况,请创建包含嵌入式 EBS 块的 EC2 实例。这可确保与实例(而不仅仅是根)关联的任何 EBS 块在实例终止时被删除,方法是将属性 ebs_block_device.delete_on_termination
默认为 true
。
resource "aws_instance" "web" {
ami = <ami_id>
instance_type = <instance_flavor>
ebs_block_device {
delete_on_termination = true # Default
device_name = "/dev/sdh"
}
AWS 控制台
如需使用控制台删除 EBS 卷,请执行以下操作
- 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台。
- 在导航窗格中,选择卷。
- 选择要删除的音量,然后依次选择操作、删除音量。
- 注意:如果“删除卷”呈灰显状态,则表示该卷已附加到实例。您必须先将卷从实例中分离,然后才能将其删除。
- 在确认对话框中,选择删除。
AWS CLI
以下示例命令会删除卷 ID 为 vol-049df61146c4d7901 的可用卷。如果命令成功,则不会返回任何输出。
aws ec2 delete-volume --volume-id vol-049df61146c4d7901
Efs Encrypted Check
API 中的类别名称:EFS_ENCRYPTED_CHECK
Amazon EFS 支持两种文件系统加密形式,即传输中的数据加密和静态加密。此检查会检查账号中所有已启用区域中的所有 EFS 文件系统是否均配置了静态数据加密。
建议:检查 EFS 是否配置为使用 KMS 对文件数据进行加密 如需修复此发现结果,请完成以下步骤:Terraform
以下代码段可用于创建 KMS 加密的 EFS(注意:kms_key_id
属性是可选的,如果未传递任何 KMS 密钥 ID,系统将创建一个密钥)
resource "aws_efs_file_system" "encrypted-efs" {
creation_token = "my-kms-encrypted-efs"
encrypted = true
kms_key_id = "arn:aws:kms:us-west-2:12344375555:key/16393ebd-3348-483f-b162-99b6648azz23"
tags = {
Name = "MyProduct"
}
}
AWS 控制台
如需使用 AWS 控制台配置带加密功能的 EFS,请参阅使用控制台对文件系统进行静态加密。
AWS CLI
请务必注意,虽然通过控制台创建 EFS 会默认启用静态加密,但使用 CLI、API 或 SDK 创建的 EFS 并非如此。以下示例允许您在基础架构中创建加密文件系统。
aws efs create-file-system \
--backup \
--encrypted \
--region us-east-1 \
Efs In Backup Plan
API 中的类别名称:EFS_IN_BACKUP_PLAN
Amazon 最佳实践建议为 Elastic File System (EFS) 配置备份。这会检查您 AWS 账号中所有已启用区域中的所有 EFS,以确定是否已启用备份。
建议:检查 EFS 文件系统是否纳入了 AWS 备份方案 如需修复此发现结果,请完成以下步骤:Terraform
使用 aws_efs_backup_policy
资源为 EFS 文件系统配置备份政策。
resource "aws_efs_file_system" "encrypted-efs" {
creation_token = "my-encrypted-efs"
encrypted = true
tags = merge({
Name = "${local.resource_prefix.value}-efs"
}, {
git_file = "terraform/aws/efs.tf"
git_org = "your_git_org"
git_repo = "your_git_repo"
})
}
resource "aws_efs_backup_policy" "policy" {
file_system_id = aws_efs_file_system.encrypted-efs.id
backup_policy {
status = "ENABLED"
}
}
AWS 控制台
您可以通过以下两种方式备份 EFS:AWS Backup 服务和 EFS 到 EFS 备份解决方案。如需使用控制台修复未备份的 EFS,请参阅:
AWS CLI
您可以通过以下几种方式使用 CLI 创建合规的 EFS 文件系统:
- 创建启用自动备份的 EFS(默认用于单区存储,并根据 AWS 区域的备份可用性而定)
- 创建 EFS 并添加备份政策
不过,如果修复需要在现有 EFS 中进行,最好的选择是创建备份政策并将其关联到不合规的 EFS。对于基础架构中的每个 EFS,您都需要一个命令。
arr=( $(aws efs describe-file-systems | jq -r '.FileSystems[].FileSystemId') )
for efs in "${arr[@]}"
do
aws efs put-backup-policy \
--file-system-id "${efs}" \
--backup-policy "Status=ENABLED"
done
Elb Acm Certificate Required
API 中的类别名称:ELB_ACM_CERTIFICATE_REQUIRED
检查传统负载平衡器是否使用 AWS Certificate Manager (ACM) 提供的 HTTPS/SSL 证书。如果使用 HTTPS/SSL 监听器配置的传统负载均衡器未使用 ACM 提供的证书,则控制组将失败。
如需创建证书,您可以使用 ACM 或支持 SSL 和 TLS 协议的工具(例如 OpenSSL)。Security Hub 建议您使用 ACM 为负载均衡器创建或导入证书。
ACM 与传统负载均衡器集成,以便您在负载均衡器上部署证书。您还应自动续订这些证书。
建议:检查是否所有传统负载平衡器都使用 AWS Certificate Manager 提供的 SSL 证书如需了解如何将 ACM SSL/TLS 证书与传统负载平衡器相关联,请参阅 AWS 知识中心文章 How can I associated an ACM SSL/TLS Certificate with a Classic, Application, or Network Load Balancer?(如何将 ACM SSL/TLS 证书与传统负载平衡器、应用负载平衡器或网络负载平衡器相关联?)
了解此发现结果类型Elb Deletion Protection Enabled
API 中的类别名称:ELB_DELETION_PROTECTION_ENABLED
检查应用负载平衡器是否启用了删除保护。如果未配置删除保护,则控件会失败。
启用删除防护,以防止应用负载均衡器被删除。
建议:应启用应用负载均衡器删除防护 如需修复此发现结果,请完成以下步骤:AWS 控制台
为防止负载均衡器被意外删除,您可以启用删除保护。默认情况下,负载均衡器的删除保护处于停用状态。
如果您为负载均衡器启用了删除保护,则必须先停用删除保护,然后才能删除负载均衡器。
通过控制台启用删除保护。
- 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台。
- 在导航窗格的负载均衡下,选择负载平衡器。
- 选择负载均衡器。
- 在说明标签页上,选择修改属性。
- 在“修改负载均衡器属性”页面上,选择启用删除保护,然后选择保存。
- 选择保存。
Elb Logging Enabled
API 中的类别名称:ELB_LOGGING_ENABLED
这会检查是否已为应用负载均衡器和传统负载均衡器启用日志记录。如果 access_logs.s3.enabled 为 false,该控件将失败。
Elastic Load Balancing 提供访问日志,用于捕获有关发送到负载均衡器的请求的详细信息。每个日志都包含诸如接收请求的时间、客户端的 IP 地址、延迟时间、请求路径和服务器响应等信息。您可以使用这些访问日志来分析流量模式和排查问题。
如需了解详情,请参阅传统版负载平衡器用户指南中的传统版负载平衡器的访问日志。
建议:检查是否对传统负载平衡器和应用负载平衡器启用了日志记录 如需修复此发现结果,请完成以下步骤:AWS 控制台
如需解决此问题,请更新您的负载平衡器以启用日志记录。
如需启用访问日志,请执行以下操作:
- 访问 https://console.aws.amazon.com/ec2/,打开 Amazon EC2 控制台。
- 在导航窗格中,选择负载均衡器。
- 选择应用负载平衡器或传统负载平衡器。
- 从操作中,选择修改属性。
- 在访问日志下,选择启用。
- 输入您的 S3 位置。此营业地点可以存在,也可以由系统为您创建。如果未指定前缀,访问日志将存储在 S3 存储桶的根目录中。
- 选择保存。
Elb Tls Https Listeners Only
API 中的类别名称:ELB_TLS_HTTPS_LISTENERS_ONLY
此检查可确保所有传统负载平衡器都配置为使用安全通信。
监听器是检查连接请求的过程。它配置了用于前端(客户端到负载均衡器)连接的协议和端口,以及用于后端(负载均衡器到实例)连接的协议和端口。如需了解 Elastic Load Balancing 支持的端口、协议和监听器配置,请参阅传统负载平衡器的监听器。
建议:检查是否对所有传统负载均衡器配置了 SSL 或 HTTPS 监听器如需为传统负载均衡器配置 SSL 或 TLS,请参阅使用 AWS 管理控制台创建 HTTPS/SSL 负载均衡器。
了解此发现结果类型的Encrypted Volumes
API 中的类别名称:ENCRYPTED_VOLUMES
检查处于已挂接状态的 EBS 卷是否已加密。若要通过此检查,EBS 卷必须处于使用且已加密。如果 EBS 卷未挂接,则不受此检查的约束。
为了进一步提高 EBS 卷中敏感数据的安全性,您应启用 EBS 静态加密。Amazon EBS 加密为您的 EBS 资源提供了简单明了的加密解决方案,无需您构建、维护和保护自己的密钥管理基础架构。在创建加密卷和快照时,它会使用 KMS 密钥。
如需详细了解 Amazon EBS 加密,请参阅适用于 Linux 实例的 Amazon EC2 用户指南中的 Amazon EBS 加密。
建议:应对挂接的 Amazon EBS 卷进行静态加密 如需修复此发现结果,请完成以下步骤:AWS 控制台
无法直接加密现有的未加密卷或快照。您只能在创建新卷或快照时对其进行加密。
如果您默认启用了加密功能,则 Amazon EBS 会使用 Amazon EBS 加密的默认密钥对生成的新卷或快照进行加密。即使您默认未启用加密,也可以在创建单个卷或快照时启用加密。在这两种情况下,您都可以替换 Amazon EBS 加密的默认密钥,并选择客户管理的对称密钥。
如需了解详情,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的创建 Amazon EBS 卷和复制 Amazon EBS 快照。
Encryption At Rest Enabled Rds Instances
API 中的类别名称:ENCRYPTION_AT_REST_ENABLED_RDS_INSTANCES
Amazon RDS 加密型数据库实例使用业界标准 AES-256 加密算法,在托管 Amazon RDS 数据库实例的服务器上加密您的数据。数据加密后,Amazon RDS 会以透明的方式处理数据访问和解密行为的身份验证,同时将对性能的影响降至最低。
建议:确保已针对 RDS 实例启用静态加密 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台并在 https://console.aws.amazon.com/rds/ 上打开 RDS 信息中心。
- 在左侧导航面板中,点击
Databases
- 选择需要加密的数据库实例。
- 点击右上角的
Actions
按钮,然后选择Take Snapshot
。 - 在“Take Snapshot”(拍摄快照)页面的
Snapshot Name
字段中输入要截取快照的数据库名称,然后点击Take Snapshot
。 - 选择新创建的快照,点击位于右上角的
Action
按钮,然后从“操作”菜单中选择Copy snapshot
。 - 在“复制数据库快照”页面上,执行以下操作:
- 在“New DB Snapshot Identifier”(新的数据库快照标识符)字段中,输入
new snapshot
的名称。 - 选中
Copy Tags
,新快照必须与来源快照具有相同的标记。 - 从
Enable Encryption
下拉列表中选择Yes
以启用加密。您可以选择使用主密钥下拉列表中的 AWS 默认加密密钥或自定义密钥。
- 点击
Copy Snapshot
以创建所选实例快照的加密副本。 - 选择新的“快照加密副本”,然后点击右上角的
Action
按钮,再从“操作”菜单中选择Restore Snapshot
按钮,这会将加密快照恢复到新的数据库实例。 - 在“恢复数据库实例”页面上的“数据库实例标识符”字段中输入新数据库实例的唯一名称。
- 查看实例配置详细信息,然后点击
Restore DB Instance
。 - 完成新实例预配过程后,可以更新应用配置以引用新加密数据库实例的端点。在应用级别更改数据库端点后,您可以移除未加密的实例。
AWS CLI
- 运行
describe-db-instances
命令以列出所选 AWS 区域中可用的所有 RDS 数据库名称,该命令输出应返回数据库实例标识符。
aws rds describe-db-instances --region <region-name> --query 'DBInstances[*].DBInstanceIdentifier'
- 运行
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>
- 现在,运行
list-aliases
命令以列出指定区域中可用的 KMS 密钥别名,命令输出应返回每个key alias currently available
。对于我们的 RDS 加密激活流程,请找到 AWS 默认 KMS 密钥的 ID。
aws kms list-aliases --region <region-name>
- 使用之前返回的 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>
- 运行
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>
- 运行
describe-db-instances
命令以列出所选 AWS 区域中可用的所有 RDS 数据库名称,输出将返回数据库实例标识符名称。选择我们刚刚创建的“DB-Name-Encrypted”的加密数据库名称。
aws rds describe-db-instances --region <region-name> --query 'DBInstances[*].DBInstanceIdentifier'
- 使用之前返回的 RDS 实例标识符再次运行
describe-db-instances
命令,以确定所选数据库实例是否已加密。该命令的输出应返回加密状态True
。
aws rds describe-db-instances --region <region-name> --db-instance-identifier <DB-Name-Encrypted> --query 'DBInstances[*].StorageEncrypted'
Encryption Enabled Efs File Systems
API 中的类别名称:ENCRYPTION_ENABLED_EFS_FILE_SYSTEMS
EFS 数据应使用 AWS KMS (Key Management Service) 进行静态加密。
建议:确保为 EFS 文件系统启用加密 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台并导航到
Elastic File System (EFS)
信息中心。 - 从左侧导航面板中选择
File Systems
。 - 点击信息中心顶部菜单中的“
Create File System
”按钮即可开始文件系统设置流程。 -
在
Configure file system access
配置页面上,执行以下操作。
- 从 VPC 下拉列表中选择正确的 VPC。
- 在“创建挂载目标”部分中,选中所选 VPC 中的所有可用区 (AZ) 对应的复选框。这些将成为您的装载目标。
- 点击Next step
以继续。 -
在
Configure optional settings
页面上执行以下操作。
- 创建tags
来描述新的文件系统。
- 根据您的要求选择performance mode
。
- 选中Enable encryption
复选框,然后从“选择 KMS 主密钥”下拉列表中选择aws/elasticfilesystem
,以使用 AWS KMS 提供和管理的默认主密钥为新文件系统启用加密。
- 点击Next step
以继续。 -
查看
review and create
页面上的文件系统配置详细信息,然后点击Create File System
以创建新的 AWS EFS 文件系统。 - 将数据从旧的未加密 EFS 文件系统复制到新创建的加密文件系统。
- 将数据迁移到新创建的加密文件系统后,请立即移除未加密的文件系统。
- 在导航栏中更改 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>
- 命令输出应返回所请求的配置信息。
- 如需预配新的 AWS EFS 文件系统,您需要生成一个通用唯一标识符 (UUID),以便创建 create-file-system 命令所需的令牌。如需创建所需的令牌,您可以使用“https://www.uuidgenerator.net”中随机生成的 UUID。
- 使用上一步中创建的唯一令牌运行 create-file-system 命令。
aws efs create-file-system --region <region> --creation-token <Token (randomly generated UUID from step 3)> --performance-mode generalPurpose --encrypted
- 该命令输出应返回新的文件系统配置元数据。
- 使用上一步返回的新创建的 EFS 文件系统 ID 作为标识符和代表装载目标的可用区 (AZ) 的 ID 来运行 create-mount-target 命令:
aws efs create-mount-target --region <region> --file-system-id <file-system-id> --subnet-id <subnet-id>
- 命令输出应返回新的装载目标元数据。
- 现在您可以从 EC2 实例装载文件系统。
- 将数据从旧的未加密 EFS 文件系统复制到新创建的加密文件系统。
- 将数据迁移到新创建的加密文件系统后,请立即移除未加密的文件系统。
aws efs delete-file-system --region <region> --file-system-id <unencrypted-file-system-id>
- 通过更新 --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 控制台
创建自定义密码政策
- 登录 AWS 管理控制台,并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
- 在导航窗格中,选择“账号设置”。
- 在“密码政策”部分,选择“更改密码政策”。
- 选择要应用于密码政策的选项,然后选择“保存更改”。
更改自定义密码政策
- 登录 AWS 管理控制台,并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
- 在导航窗格中,选择“账号设置”。
- 在“密码政策”部分,选择“更改”。
- 选择要应用于密码政策的选项,然后选择“保存更改”。
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 控制台
- 登录 AWS 控制台(具有查看 Identity Access Management 账号设置的适当权限)
- 前往 AWS 控制台上的 IAM 服务
- 点击左侧窗格中的“账号设置”
- 选中“禁止重复使用密码”
- 将“要记住的密码数量”设置为
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 控制台
- 登录 AWS 控制台(具有查看 Identity Access Management 账号设置的适当权限)
- 前往 AWS 控制台上的 IAM 服务
- 点击左侧窗格中的“账号设置”
- 设置“最小密码长度”不小于
14
。 - 点击“应用密码政策”
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 控制台
如需解除具有完整管理员权限的政策的关联,请执行以下操作:
- 登录 AWS 管理控制台并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
- 在导航窗格中,点击“政策”,然后搜索在审核步骤中找到的政策名称。
- 选择需要删除的政策。
- 在政策操作菜单中,选择前
Detach
项 - 选择已附加此政策的所有用户、群组和角色
- 点击
Detach Policy
- 在政策操作菜单中,选择
Detach
AWS CLI
执行以下操作,分离具有审核步骤中发现的完整管理权限的政策:
- 列出已附加指定的托管式政策的所有 IAM 用户、群组和角色。
aws iam list-entities-for-policy --policy-arn <policy_arn>
- 从所有 IAM 用户分离政策:
aws iam detach-user-policy --user-name <iam_user> --policy-arn <policy_arn>
- 从所有 IAM 组分离政策:
aws iam detach-group-policy --group-name <iam_group> --policy-arn <policy_arn>
- 从所有 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 组并向其分配政策:
- 登录 AWS 管理控制台并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
- 在导航窗格中,点击
Groups
,然后点击Create New Group
。 - 在
Group Name
框中,输入群组的名称,然后点击Next Step
。 - 在政策列表中,选中您要应用于所有群组成员的每个政策对应的复选框。然后点击
Next Step
。 - 点击
Create Group
若要将用户添加到给定群组,请执行以下操作:
- 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
- 在导航窗格中,点击
Groups
- 选择要添加用户的目标群组
- 点击
Add Users To Group
- 选择要添加到群组的用户
- 点击
Add Users
执行以下操作,取消用户和政策之间的直接关联:
- 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
- 在左侧导航窗格中,点击“用户”
- 对于每位用户:
- 选择用户
- 点击“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 会自动为您删除以下信息:
- 用户
- 任何用户群组成员资格 - 也就是说,用户会从用户所属的任何 IAM 用户群组中移除
- 与用户关联的任何密码
- 属于用户的任何访问密钥
- 用户中嵌入的所有内嵌政策(通过用户组权限应用于用户的政策不受影响)
如需删除 IAM 用户,请执行以下操作:
- 登录 AWS 管理控制台,并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
- 在导航窗格中,选择“用户”,然后选中要删除的用户名的旁边的复选框。
- 在页面顶部,选择“删除”。
- 在确认对话框中的文本输入字段中输入用户名,以确认删除该用户。
- 选择“删除”。
如需将用户添加到 IAM 用户组,请执行以下操作:
- 登录 AWS 管理控制台,并在 https://console.aws.amazon.com/iam/ 上打开 IAM 控制台。
- 在导航窗格中,选择“用户群组”,然后选择群组名称。
- 选择“用户”标签页,然后选择“添加用户”。选中要添加的用户旁边的复选框。
- 选择“添加用户”。
AWS CLI
与 Amazon Web Services 管理控制台不同,以编程方式删除用户时,您必须手动删除附加到该用户的项目,否则删除失败。
在尝试删除用户之前,请先移除以下内容:
- 密码 (DeleteLoginProfile)
- 访问密钥 ( DeleteAccessKey )
- 签名证书 (DeleteSigningCertificate)
- SSH 公钥 ( DeleteSSHPublicKey )
- Git 凭据 ( DeleteServiceSpecificCredential )
- 多重身份验证 (MFA) 设备( DisallowMFADevice 、 DeleteVirtualMFADevice )
- 内嵌政策 (DeleteUserPolicy)
- 附加的受管政策 (DetachUserPolicy)
- 群组成员资格 ( RemoveUserFromGroup )
如需删除用户,请在删除与用户关联的所有内容后执行以下操作:
aws iam delete-user \
--user-name "test-user"
如需将 IAM 用户添加到 IAM 群组,请执行以下操作:
aws iam add-user-to-group \
--group-name "test-group"
--user-name "test-user"
Iam User Mfa Enabled
API 中的类别名称:IAM_USER_MFA_ENABLED
多重身份验证 (MFA) 是一种最佳做法,可在用户名和密码的基础上增添一道额外的安全屏障。启用多重身份验证后,当用户登录 AWS 管理控制台时,必须提供由已注册的虚拟或实体设备提供的限时身份验证码。
建议:检查 AWS IAM 用户是否启用了多重身份验证 (MFA) 如需修复此发现结果,请完成以下步骤:Terraform
对于 Terraform,您可以通过以下几种方式来解决 MFA 设备缺失的问题。您可能已经有了合理的结构,可以将用户划分到各个群组和限制性政策中。
以下示例展示了如何执行以下操作:
- 创建用户。
- 使用 PGP 公钥创建用户登录个人资料。
- 创建允许自行管理 IAM 个人资料的群组和群组政策。
- 将用户附加到群组。
- 为用户创建虚拟 MFA 设备。
- 向每位用户提供输出二维码和密码。
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 控制台
如需停用非活跃账号的凭据,请执行以下操作:
- 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
- 选择“用户”。
- 选择凭据的使用时间超过 90 天/上次使用时间超过 90 天的用户的名称。
- 选择“安全凭据”。
- 对于至少 90 天内未使用的每个登录凭据和访问密钥,请选择“设为无效”。
如需要求控制台用户在下次登录时设置新密码,请执行以下操作:
- 通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
- 选择“用户”。
- 选择凭据的使用时间超过 90 天/上次使用时间超过 90 天的用户的名称。
- 选择“安全凭据”。
- 在“登录凭据和控制台密码”下,选择“管理”。
- 设置新密码(自动生成的密码或自定义密码)。
- 勾选“要求重设密码”对应的复选框。
- 选择“应用”。
AWS CLI
停用访问密钥
aws iam update-access-key \
--access-key-id <value> \
--status "Inactive"
删除访问密钥
aws iam delete-access-key \
--access-key-id <value>
重置用户登录个人资料密码
aws iam update-login-profile \
--user-name "test@example.com" \
--password <temporary_password> \
--password-reset-required
Kms Cmk Not Scheduled For Deletion
API 中的类别名称:KMS_CMK_NOT_SCHEDULED_FOR_DELETION
此控件会检查 KMS 密钥是否已被安排删除。如果计划删除 KMS 密钥,控制将失败。
KMS 密钥一经删除,便无法恢复。如果使用 KMS 密钥删除,使用 KMS 密钥加密的数据也永远无法恢复。如果有重要数据已使用已安排删除的 KMS 密钥加密,请考虑解密这些数据或使用新的 KMS 密钥对这些数据重新加密,除非您有意执行加密擦除。
计划删除 KMS 密钥时,系统会强制执行强制性等待期,以便有时间撤消删除操作(如果安排错误的话)。默认等待期为 30 天,但在安排删除 KMS 密钥时,最短可缩短至 7 天。在等待期内,您可以取消预定的删除操作,并且系统不会删除 KMS 密钥。
如需详细了解如何删除 KMS 密钥,请参阅《AWS Key Management Service 开发者指南》中的删除 KMS 密钥。
建议:检查是否所有 CMK 都未安排删除如需取消安排的 KMS 密钥删除操作,请参阅《AWS Key Management Service 开发者指南》中的“在‘安排和取消密钥删除操作’下取消密钥删除操作”。
了解此发现结果类型的Lambda Concurrency Check
API 中的类别名称:LAMBDA_CONCURRENCY_CHECK
检查 Lambda 函数是否配置了函数级并发执行限制。如果 Lambda 函数未配置函数级并发执行限制,则规则为 NON_COMPLIANT。
建议:检查 Lambda 函数是否配置了函数级并发执行限制要配置函数级并发执行限制,请参阅 AWS Lambda 文档中的配置预留并发设置。
了解此发现结果类型Lambda Dlq Check
API 中的类别名称:LAMBDA_DLQ_CHECK
检查 Lambda 函数是否配置了死信队列。如果 Lambda 函数未配置死信队列,则规则的状态为 NON_COMPLIANT。
建议:检查 Lambda 函数是否配置了死信队列如需更新 Lambda 函数以使用 DLQ,请参阅 AWS 文档中的死信队列。
了解此发现结果类型Lambda Function Public Access Prohibited
API 中的类别名称:LAMBDA_FUNCTION_PUBLIC_ACCESS_PROHIBITED
AWS 最佳实践建议不要公开公开 Lambda 函数。此政策会检查在您的账号内所有已启用区域中部署的所有 Lambda 函数;如果它们被配置为允许公开访问,这些函数将会失败。
建议:检查与 Lambda 函数关联的政策是否禁止公开访问 如需修复此发现结果,请完成以下步骤:Terraform
以下示例展示了如何使用 Terraform 预配限制对 Lambda 函数的访问权限的 IAM 角色,并将该角色附加到 Lambda 函数
resource "aws_iam_role" "iam_for_lambda" {
name = "iam_for_lambda"
assume_role_policy = <<EOF
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Effect": "Allow",
"Sid": ""
}
]
}
EOF
}
resource "aws_lambda_function" "test_lambda" {
filename = "lambda_function_payload.zip"
function_name = "lambda_function_name"
role = aws_iam_role.iam_for_lambda.arn
handler = "index.test"
source_code_hash = filebase64sha256("lambda_function_payload.zip")
runtime = "nodejs12.x"
}
AWS 控制台
如果 Lambda 函数未通过此控制,则表示 Lambda 函数基于资源的政策声明允许公开访问。
如需解决此问题,您必须更新政策以移除相应权限或添加 AWS:SourceAccount
条件。您只能通过 Lambda API 更新基于资源的政策。
以下说明使用控制台查看政策,并使用 AWS 命令行界面移除权限。
查看 Lambda 函数的基于资源的政策
- 访问 https://console.aws.amazon.com/lambda/,打开 AWS Lambda 控制台。
- 在导航窗格中,选择“函数”。
- 选择相应函数。
- 选择“权限”。基于资源的政策会显示当其他账号或 AWS 服务尝试访问该函数时应用的权限。
- 检查基于资源的政策。
- 找到包含公开政策的“主账号”字段值的政策声明。例如,允许
"*"
或{ "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) 中的专用子网,请执行以下操作:
- 通过 https://console.aws.amazon.com/lambda/ 打开 AWS Lambda 控制台。
- 前往“函数”,然后选择您的 Lambda 函数。
- 滚动到“网络”,然后选择满足该函数连接要求的 VPC。
- 如需在高可用性模式下运行函数,Security Hub 建议您至少选择两个子网。
- 请至少选择一个符合函数连接要求的安全群组。
- 选择“保存”。
如需了解详情,请参阅 AWS Lambda 开发者指南中有关配置 Lambda 函数以访问 VPC 中资源的部分。
Mfa Delete Enabled S3 Buckets
API 中的类别名称:MFA_DELETE_ENABLED_S3_BUCKETS
为敏感和已分类的 S3 存储桶启用 MFA 删除功能后,用户需要进行两种形式的身份验证。
建议:确保已针对 S3 存储分区启用 MFA 删除功能请按以下步骤为 S3 存储桶启用多重身份验证删除功能。
注意:
-您无法使用 AWS Management Console 启用多重身份验证删除功能。您必须使用 AWS CLI 或 API。
-您必须使用“root”账号才能在 S3 存储桶上启用多重身份验证删除功能。
通过命令行:
- 运行 s3api put-bucket-versioning 命令
aws s3api put-bucket-versioning --profile my-root-profile --bucket Bucket_Name --versioning-configuration Status=Enabled,MFADelete=Enabled --mfa “arn:aws:iam::aws_account_id:mfa/root-account-mfa-device passcode”
Mfa Enabled Root User Account
API 中的类别名称:MFA_ENABLED_ROOT_USER_ACCOUNT
“根”user account 是 AWS 账号中最具特权的用户。多重身份验证 (MFA) 在用户名和密码的基础上增加了一层额外的保护。启用 MFA 后,当用户登录 AWS 网站时,系统将提示他们输入用户名和密码,以及来自 AWS MFA 设备的身份验证代码。
注意:将虚拟 MFA 用于“root”时账号,最好不要使用个人设备,而是使用专门的移动设备(平板电脑或手机),这种设备可以独立于任何个人设备保持充电和安全性。(“非个人虚拟 MFA”)可降低因设备丢失、设备以旧换新或拥有设备的个人不再在公司工作而失去 MFA 访问权限的风险。
建议:确保为“root”启用 MFA用户账号若要为“root”用户账号设置多重身份验证 (MFA),请执行以下操作:
- 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
注意:管理“root”权限的 MFA 设备则必须使用“root”账号凭据登录 AWS。您无法管理“root”权限的 MFA 设备使用其他凭据登录
- 选择
Dashboard
,然后在Security Status
下展开根账号的Activate MFA
。 - 选择
Activate MFA
- 在向导中,选择
A virtual MFA
设备,然后选择Next Step
。 - IAM 会为虚拟 MFA 设备生成并显示配置信息,包括二维码图片。此图显示了“秘密配置密钥”,可在不支持二维码的设备上手动输入。
- 打开您的虚拟 MFA 应用。(如需查看可用于托管虚拟多重身份验证 (MFA) 设备的应用列表,请参阅虚拟 MFA 应用。)如果虚拟 MFA 应用支持多个账号(多台虚拟 MFA 设备),请选择创建新账号(新的虚拟 MFA 设备)的选项。
- 确定 MFA 应用是否支持二维码,然后执行以下操作之一:
- 使用该应用扫描二维码。例如,您可以选择摄像头图标或选择“扫描二维码”之类的选项,然后使用设备的摄像头扫描二维码。
- 在“Manage MFA Device”(管理 MFA 设备)向导中,选择“Show secret key”(显示密钥)以进行手动配置,然后在 MFA 应用中键入密钥配置密钥。
完成后,虚拟多重身份验证 (MFA) 设备会开始生成动态密码。
在“管理多重身份验证设备”向导的“身份验证码 1”框中,输入虚拟 MFA 设备中当前显示的一次性密码。等待最多 30 秒,以便设备生成新的动态密码。然后,在“Authentication Code 2”(身份验证码 2)框中输入第二个一次性密码。选择“分配虚拟身份验证器”。
了解此发现结果类型Multi Factor Authentication Mfa Enabled All Iam Users Console
API 中的类别名称:MULTI_FACTOR_AUTHENTICATION_MFA_ENABLED_ALL_IAM_USERS_CONSOLE
除了传统凭据之外,多重身份验证 (MFA) 还提供了额外的身份验证保障。启用多重身份验证后,当用户登录 AWS 控制台时,系统会提示他们输入用户名和密码,以及实体或虚拟 MFA 令牌中的身份验证码。建议为所有具有控制台密码的账号启用多重身份验证 (MFA)。
建议:确保为拥有控制台密码的所有 IAM 用户启用多重身份验证 (MFA) 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台并在“https://console.aws.amazon.com/iam/”上打开 IAM 控制台
- 在左侧窗格中,选择
Users
。 - 在
User Name
列表中,选择要设置多重身份验证的用户的名称。 - 选择
Security Credentials
标签页,然后选择Manage MFA Device
。 - 在
Manage MFA Device wizard
中,选择Virtual MFA
设备,然后选择Continue
。
IAM 会生成并显示虚拟 MFA 设备的配置信息,包括二维码图形。此图显示了“秘密配置密钥”,可在不支持二维码的设备上手动输入。
- 打开您的虚拟 MFA 应用。(如需查看可用于托管虚拟 MFA 设备的应用列表,请访问 https://aws.amazon.com/iam/details/mfa/#Virtual_MFA_Applications,查看虚拟 MFA 应用)。如果虚拟 MFA 应用支持多个账号(多个虚拟 MFA 设备),请选择用于创建新账号(新虚拟 MFA 设备)的选项。
- 确定 MFA 应用是否支持二维码,然后执行以下操作之一:
- 使用该应用扫描二维码。例如,您可以选择摄像头图标或选择“扫描二维码”之类的选项,然后使用设备的摄像头扫描二维码。
- 在“Manage MFA Device”(管理 MFA 设备)向导中,选择“Show secret key”(显示密钥)以进行手动配置,然后在 MFA 应用中键入密钥配置密钥。
配置完成后,虚拟 MFA 设备便会开始生成动态密码。
-
在
Manage MFA Device wizard
的MFA Code 1 box
中,输入虚拟 MFA 设备中当前显示的one-time password
。最多等待 30 秒,以便设备生成新的动态密码。然后,在MFA Code 2 box
中输入第二个one-time password
。 -
点击
Assign MFA
。
No Network Acls Allow Ingress 0 0 0 0 Remote Server Administration
API 中的类别名称:NO_NETWORK_ACLS_ALLOW_INGRESS_0_0_0_0_REMOTE_SERVER_ADMINISTRATION
网络访问控制列表 (NACL) 函数可对到达和离开 AWS 资源的网络流量进行无状态过滤。建议使用 TDP (6)、UDP (17) 或 ALL (-1) 协议,任何 NACL 都允许对远程服务器管理端口(例如通过 SSH 连接到端口 22
和 RDP 到端口 3389
)进行不受限制的入站流量访问
AWS 控制台
请执行以下操作:
1. 访问 https://console.aws.amazon.com/vpc/home,登录 AWS 管理控制台
2.在左侧窗格中,点击 Network ACLs
3. 对于要修复的每个网络 ACL,请执行以下操作:
- 选择网络 ACL
- 点击 Inbound Rules
标签页
- 点击 Edit inbound rules
- 执行以下任一操作:A) 将“来源”字段更新为 0.0.0.0/0 以外的范围,或 B) 点击 Delete
移除有问题的入站规则
- 点击 Save
No Root User Account Access Key Exists
API 中的类别名称:NO_ROOT_USER_ACCOUNT_ACCESS_KEY_EXISTS
“根”user account 是 AWS 账号中最具特权的用户。AWS 访问密钥提供对给定 AWS 账号的编程访问。建议将与“root”权限相关的所有访问密钥用户账号。
建议:确保不存在“root”用户账号访问密钥 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 以“root”身份登录 AWS 管理控制台并通过 https://console.aws.amazon.com/iam/ 打开 IAM 控制台。
- 点击右上角的
<root_account>
,然后从下拉列表中选择My Security Credentials
。 - 在弹出式窗口中,点击
Continue to Security Credentials
。 - 点击
Access Keys
(访问密钥 ID 和私有访问密钥)。 Status
列下(如果有任何有效的按键)。- 点击
Delete
(注意:已删除的密钥无法恢复)。
注意:虽然您可以将密钥设为无效,但此无效密钥仍会在审核过程中的 CLI 命令中显示,并可能会导致密钥被误标记为不合规。
No Security Groups Allow Ingress 0 0 0 0 Remote Server Administration
API 中的类别名称:NO_SECURITY_GROUPS_ALLOW_INGRESS_0_0_0_0_REMOTE_SERVER_ADMINISTRATION
安全群组可对传入和传出 AWS 资源的网络流量进行有状态过滤。建议任何安全群组都不允许通过 TDP (6)、UDP (17) 或 ALL (-1) 协议,允许对远程服务器管理端口(例如通过 SSH 连接到端口 22
和 RDP 到端口 3389
)进行不受限制的入站流量访问
执行以下操作以实现指定状态:
- 前往 https://console.aws.amazon.com/vpc/home 登录 AWS 管理控制台
- 在左侧窗格中,点击
Security Groups
- 对于每个安全群组,请执行以下操作:
- 选择安全群组
- 点击
Inbound Rules
标签页 - 点击
Edit inbound rules
按钮 - 确定要修改或移除的规则
- 请执行以下操作之一:A) 将“来源”字段更新为 0.0.0.0/0 以外的范围,或 B) 点击
Delete
以移除有问题的入站规则 - 点击
Save rules
No Security Groups Allow Ingress 0 Remote Server Administration
API 中的类别名称:NO_SECURITY_GROUPS_ALLOW_INGRESS_0_REMOTE_SERVER_ADMINISTRATION
安全群组可对传入和传出 AWS 资源的网络流量进行有状态过滤。建议任何安全群组都不允许对远程服务器管理端口(例如 SSH 到端口 22
和 RDP 到端口 3389
)进行不受限制的入站访问。
执行以下操作以实现指定状态:
- 前往 https://console.aws.amazon.com/vpc/home 登录 AWS 管理控制台
- 在左侧窗格中,点击
Security Groups
- 对于每个安全群组,请执行以下操作:
- 选择安全群组
- 点击
Inbound Rules
标签页 - 点击
Edit inbound rules
按钮 - 确定要修改或移除的规则
- 请执行以下操作之一:A) 将“来源”字段更新为 ::/0 以外的范围,或 B) 点击
Delete
以移除有问题的入站规则 - 点击
Save rules
One Active Access Key Available Any Single Iam User
API 中的类别名称:ONE_ACTIVE_ACCESS_KEY_AVAILABLE_ANY_SINGLE_IAM_USER
访问密钥是 IAM 用户或 AWS 账号“root”用户的长期凭据。您可以使用访问密钥对发送到 AWS CLI 或 AWS API 的程序化请求进行签名(直接或使用 AWS SDK)
建议:确保任何单个 IAM 用户只有一个有效的访问密钥 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台,然后导航到
https://console.aws.amazon.com/iam/
的 IAM 信息中心。 - 在左侧导航面板中,选择
Users
。 - 点击您要检查的 IAM 用户名。
- 在 IAM 用户配置页面上,选择
Security Credentials
标签页。 - 在
Access Keys
部分中,选择一个存在时间少于 90 天的访问密钥。这应该是此 IAM 用户用于以编程方式访问 AWS 资源的唯一有效密钥。测试您的应用,确保所选的访问密钥有效。 - 在同一
Access Keys
部分中,找到您的非操作性访问密钥(除所选的访问密钥之外),然后点击Make Inactive
链接将其停用。 - 如果您收到
Change Key Status
确认框,请点击Deactivate
关闭所选按键。 - 针对您 AWS 账号中的每个 IAM 用户重复第 3-7 步。
AWS CLI
-
使用
Audit CLI
中提供的 IAM 用户和访问密钥信息,选择一个存在时间少于 90 天的访问密钥。该密钥应该是此 IAM 用户在以编程方式访问 AWS 资源时使用的唯一有效密钥。测试您的应用,确保所选的访问密钥有效。 -
使用 IAM 用户名和非操作的访问密钥 ID 运行以下
update-access-key
命令,以停用不必要的密钥。查看“审核”部分,找出所选 IAM 用户的不需要的访问密钥 ID
注意 - 该命令不会返回任何输出:
aws iam update-access-key --access-key-id <access-key-id> --status Inactive --user-name <user-name>
- 如需确认所选访问密钥对是否已成功
deactivated
,请再次为该 IAM 用户运行list-access-keys
审核命令:
aws iam list-access-keys --user-name <user-name>
- 该命令的输出应显示与 IAM 用户关联的每个访问密钥的元数据。如果非操作密钥对
Status
设为Inactive
,则密钥已成功停用,并且 IAM 用户访问权限配置现在会遵循此建议。
- 重复第 5 步您的 AWS 账号中的每个 IAM 用户为 1 - 3 项。
Public Access Given Rds Instance
API 中的类别名称:PUBLIC_ACCESS_GIVEN_RDS_INSTANCE
请确保并验证您在 AWS 账号中预配的 RDS 数据库实例确实限制了未经授权的访问,以尽可能降低安全风险。如需限制对任何可公开访问的 RDS 数据库实例的访问,您必须停用数据库“可公开访问”标志,并更新与实例关联的 VPC 安全组。
建议:确保没有向 RDS 实例提供公开访问权限 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/rds/ 前往 RDS 信息中心。
- 在导航面板下,点击“RDS 信息中心”中的
Databases
。 - 选择要更新的 RDS 实例。
- 点击信息中心顶部菜单中的
Modify
。 - 在“修改数据库实例”面板上的
Connectivity
部分下,点击Additional connectivity configuration
并将Publicly Accessible
的值更新为“不可公开访问”,以限制公开访问。如需更新子网配置,请按以下步骤操作:
- 选择Connectivity and security
标签页,然后点击Networking
部分中的 VPC 属性值。
- 从 VPC 信息中心底部面板中选择Details
标签页,然后点击“路由表配置属性值”。
- 在路由表详细信息页面上,从信息中心底部面板中选择“路由”标签页,然后点击Edit routes
。
- 在“修改路线”页面上,更新设为igw-xxxxx
的目标的“目的地”,然后点击Save
路线。 - 在“修改数据库实例”面板中,点击
Continue
,然后在“安排修改时间”部分,根据您的要求执行以下操作之一:
- 选择“在下一个定期维护窗口期间应用”,以在下一个定期维护窗口期间自动应用更改。
- 选择“立即应用”,立即应用更改。使用此选项,无论该 RDS 数据库实例的维护窗口设置如何,所有待处理的修改都会尽快异步应用。请注意,待处理修改队列中的所有更改也会应用。如果有任何待处理的修改需要停机,选择该选项可能导致应用程序意外停机。 - 对当前区域中可用的每个 RDS 实例重复第 3 步到第 6 步。
- 在导航栏中更改 AWS 区域,对其他区域重复此过程。
AWS CLI
- 运行
describe-db-instances
命令以列出所选 AWS 区域中可用的所有 RDS 数据库名称标识符:
aws rds describe-db-instances --region <region-name> --query 'DBInstances[*].DBInstanceIdentifier'
- 该命令的输出应返回每个数据库实例标识符。
- 运行
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
- 命令输出应在待处理值下显示
PubliclyAccessible
配置,并应在指定时间应用。 - 目前不支持通过 AWS CLI 更新互联网网关目的地。如需更新互联网网关的相关信息,请使用 AWS 控制台过程。
- 针对当前区域中预配的每个 RDS 实例重复第 1 步到第 5 步。
- 使用 --region 过滤条件更改 AWS 区域,对其他区域重复此过程。
Rds Enhanced Monitoring Enabled
API 中的类别名称:RDS_ENHANCED_MONITORING_ENABLED
增强型监控通过在实例中安装的代理,针对 RDS 实例所运行的操作系统提供实时指标。
如需了解详情,请参阅使用增强型监控监控操作系统指标。
建议:检查是否为所有 RDS 数据库实例启用了增强型监控 如需修复此发现结果,请完成以下步骤:Terraform
要修复此控制措施,请在 RDS 实例上启用增强型监控,如下所示:
为 RDS 创建 IAM 角色:
resource "aws_iam_role" "rds_logging" {
name = "CustomRoleForRDSMonitoring"
assume_role_policy = jsonencode({
Version = "2012-10-17"
Statement = [
{
Action = "sts:AssumeRole"
Effect = "Allow"
Sid = "CustomRoleForRDSLogging"
Principal = {
Service = "monitoring.rds.amazonaws.com"
}
},
]
})
}
检索适用于 RDS 增强监控的 AWS Managed Policy:
data "aws_iam_policy" "rds_logging" {
name = "AmazonRDSEnhancedMonitoringRole"
}
将政策附加到角色:
resource "aws_iam_policy_attachment" "rds_logging" {
name = "AttachRdsLogging"
roles = [aws_iam_role.rds_logging.name]
policy_arn = data.aws_iam_policy.rds_logging.arn
}
为违规的 RDS 实例定义监控间隔和监控角色 arn,以启用增强型监控:
resource "aws_db_instance" "default" {
identifier = "test-rds"
allocated_storage = 10
engine = "mysql"
engine_version = "5.7"
instance_class = "db.t3.micro"
db_name = "mydb"
username = "foo"
password = "foobarbaz"
parameter_group_name = "default.mysql5.7"
skip_final_snapshot = true
monitoring_interval = 60
monitoring_role_arn = aws_iam_role.rds_logging.arn
}
AWS 控制台
您可以在创建数据库实例、多可用区数据库集群或读取副本,或者修改数据库实例或多可用区数据库集群时开启增强型监控。如果您修改数据库实例以启用增强型监控,则无需重启数据库实例即可使更改生效。
在“数据库”页面中执行以下某项操作时,您可以在 RDS 控制台中启用增强型监控:
- 创建数据库实例或多可用区数据库集群 - 选择“创建数据库”。
- 创建只读副本 - 依次选择“操作”和“创建只读副本”。
- 修改数据库实例或多可用区数据库集群 - 选择“修改”。
如需在 RDS 控制台中开启或关闭增强型监控,请执行以下操作
- 滚动到“其他配置”。
- 在“监控”中,为您的数据库实例或读取副本选择“为数据库实例或读取副本启用增强型监控”。如需停用增强型监控,请选择“停用增强型监控”。
- 将 Monitoring Role 属性设置为您创建的 IAM 角色,以允许 Amazon RDS 为您与 Amazon CloudWatch Logs 通信,或选择“Default”让 RDS 为您创建名为 rds-monitoring-role 的角色。
- 将“Granularity”(精细程度)属性设置为为数据库实例或读取副本收集指标时各个数据点之间的间隔(以秒为单位)。粒度属性可以设置为以下值之一:1、5、10、15、30 或 60。RDS 控制台的刷新速度最快是每 5 秒刷新一次。如果您在 RDS 控制台中将粒度设置为 1 秒,您仍然只能看到每 5 秒更新一次的指标。您可以使用 CloudWatch Logs 检索 1 秒的指标更新。
AWS CLI
创建 RDS IAM 角色:
aws iam create-role \
--role-name "CustomRoleForRDSMonitoring" \
--assume-role-policy-document file://rds-assume-role.json
将政策 AmazonRDSEnhancedMonitoringRole
附加到角色:
aws iam attach-role-policy \
--role-name "CustomRoleForRDSMonitoring"\
--policy-arn "arn:aws:iam::aws:policy/service-role/AmazonRDSEnhancedMonitoringRole"
修改 RDS 实例以启用增强型监控,方法是设置 --monitoring-interval
和 --monitoring-role-arn
:
aws rds modify-db-instance \
--db-instance-identifier "test-rds" \
--monitoring-interval 30 \
--monitoring-role-arn "arn:aws:iam::<account_id>:role/CustomRoleForRDSMonitoring"
Rds Instance Deletion Protection Enabled
API 中的类别名称:RDS_INSTANCE_DELETION_PROTECTION_ENABLED
启用实例删除保护可额外防范数据库意外删除或被未经授权的实体删除。
启用删除保护后,无法删除 RDS 数据库实例。必须先停用删除保护,删除请求才能成功。
建议:检查是否所有 RDS 实例都启用了删除保护 如需修复此发现结果,请完成以下步骤:Terraform
如需修复此控件,请在 aws_db_instance
资源中将 deletion_protection
设置为 true
。
resource "aws_db_instance" "example" {
# ... other configuration ...
deletion_protection = true
}
AWS 控制台
为 RDS 数据库实例启用删除保护
- 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
- 在导航窗格中,选择“数据库”,然后选择要修改的数据库实例。
- 选择“修改”。
- 在“删除防护”下,选择“启用删除防护”。
- 选择“继续”。
- 在“修改时间安排”下,选择何时应用修改。选项包括“在下一个预定的维护窗口期间应用”或“立即应用”。
- 选择“修改数据库实例”。
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 控制台
立即启用自动备份
- 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
- 在导航窗格中,选择“数据库”,然后选择要修改的数据库实例。
- 选择“修改”以打开“修改数据库实例”页面。
- 在“备份保留期限”下,选择一个非零正值(例如 30 天),然后选择“继续”。
- 选择“修改时间安排”部分,然后选择何时应用修改:您可以选择“在下一个预定的维护期内应用”或“立即应用”。
- 然后,在确认页面上,选择“修改数据库实例”以保存更改并启用自动备份。
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 控制台
如需创建自定义数据库参数组,请执行以下操作:
- 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
- 在导航窗格中,选择“参数组”。
- 选择“创建参数组”。
- 在“参数组族”列表中,选择一个数据库参数组族。
- 在“类型”列表中,选择“数据库参数组”。
- 在“组名称”中,输入新数据库参数组的名称。
- 在 说明 中,输入新数据库参数组的说明。
- 选择“创建”。
如需使用控制台为 MariaDB 日志记录创建新的选项组,请执行以下操作
- 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
- 在导航窗格中,选择“选项组”。
- 选择“创建群组”。
- 在“创建选项组”窗口中,提供以下内容:
* 名称:在您的 AWS 账号中必须是唯一的。只能使用字母、数字和连字符。
* 说明:仅用于显示目的。
* 引擎:选择您的数据库引擎。
* 主要引擎版本:选择数据库引擎的主要版本。 - 选择“创建”。
- 选择您刚刚创建的选项组的名称。
- 选择“添加”选项。
- 从“选项名称”列表中选择 MARIADB_AUDIT_PLUGIN。
- 将 SERVER_AUDIT_EVENTS 设置为 CONNECT、QUERY、TABLE、QUERY_DDL、QUERY_DML、QUERY_DCL。
- 选择“添加”选项。
从 AWS 管理控制台将 SQL Server DB、Oracle DB 或 PostgreSQL 日志发布到 CloudWatch Logs
- 访问 https://console.aws.amazon.com/rds/,打开 Amazon RDS 控制台。
- 在导航窗格中,选择“数据库”。
- 选择要修改的数据库实例。
- 选择“修改”。
- 在“日志导出”下,选择要开始发布到 CloudWatch 日志的所有日志文件。
- 日志导出功能仅适用于支持发布到 CloudWatch 日志的数据库引擎版本。
- 选择“继续”。然后,在摘要页面上,选择“修改数据库实例”。
如需将新的数据库参数组或数据库选项组应用于 RDS 数据库实例,请执行以下操作
- 访问 https://console.aws.amazon.com/rds/,打开 Amazon RDS 控制台。
- 在导航窗格中,选择“数据库”。
- 选择要修改的数据库实例。
- 选择“修改”。
- 在“数据库选项”下,根据需要更改数据库参数组和数据库选项组。
- 完成更改后,选择“继续”。查看修改摘要。
- 选择“修改数据库实例”以保存更改。
AWS CLI
检索引擎族,然后选择与数据库实例引擎和版本匹配的引擎族。
aws rds describe-db-engine-versions \
--query "DBEngineVersions[].DBParameterGroupFamily" \
--engine "mysql"
根据引擎和版本创建参数组。
aws rds create-db-parameter-group \
--db-parameter-group-name "rds-mysql-parameter-group" \
--db-parameter-group-family "mysql5.7" \
--description "Example parameter group for logs"
根据数据库引擎创建一个包含必要参数的 rds-parameters.json
文件,此示例使用 MySQL5.7。
[
{
"ParameterName": "general_log",
"ParameterValue": "1",
"ApplyMethod": "immediate"
},
{
"ParameterName": "slow_query_log",
"ParameterValue": "1",
"ApplyMethod": "immediate"
},
{
"ParameterName": "log_output",
"ParameterValue": "FILE",
"ApplyMethod": "immediate"
}
]
修改参数组,根据数据库引擎添加参数。本示例使用 MySQL5.7
aws rds modify-db-parameter-group \
--db-parameter-group-name "rds-mysql-parameter-group" \
--parameters file://rds-parameters.json
修改数据库实例以关联参数组。
aws rds modify-db-instance \
--db-instance-identifier "test-rds" \
--db-parameter-group-name "rds-mysql-parameter-group"
此外,对于 MariaDB,请按如下方式创建一个选项组。
aws rds create-option-group \
--option-group-name "rds-mariadb-option-group" \
--engine-name "mariadb" \
--major-engine-version "10.6" \
--option-group-description "Option group for MariaDB logs"
创建一个 rds-mariadb-options.json
文件,如下所示。
{
"OptionName": "MARIADB_AUDIT_PLUGIN",
"OptionSettings": [
{
"Name": "SERVER_AUDIT_EVENTS",
"Value": "CONNECT,QUERY,TABLE,QUERY_DDL,QUERY_DML,QUERY_DCL"
}
]
}
将选项添加到选项组。
aws rds add-option-to-option-group \
--option-group-name "rds-mariadb-option-group" \
--options file://rds-mariadb-options.json
通过修改 MariaDB 实例,将选项组关联到数据库实例。
aws rds modify-db-instance \
--db-instance-identifier "rds-test-mariadb" \
--option-group-name "rds-mariadb-option-group"
Rds Multi Az Support
API 中的类别名称:RDS_MULTI_AZ_SUPPORT
RDS 数据库实例应配置为跨多个可用区 (AZ) 部署。这可确保所存储数据的可用性。在可用区可用性出现问题时以及在进行常规 RDS 维护期间,多可用区部署支持自动故障切换。
建议:检查是否为所有 RDS 数据库实例启用了高可用性 如需修复此发现结果,请完成以下步骤:Terraform
要修复此控件,请在 aws_db_instance
资源中将 multi_az
设置为 true。
resource "aws_db_instance" "example" {
# ... other configuration ...
multi_az = true
}
AWS 控制台
为数据库实例启用多个可用区
- 通过 https://console.aws.amazon.com/rds/ 打开 Amazon RDS 控制台。
- 在导航窗格中,选择“数据库”,然后选择要修改的数据库实例。
- 选择“修改”。系统会显示“修改数据库实例”页面。
- 在“实例规范”下,将“多可用区部署”设置为“是”。
- 选择“继续”,然后查看修改摘要。
- (可选)选择“立即应用”以立即应用更改。在某些情况下,选择此选项可能会导致服务中断。如需了解详情,请参阅 Amazon RDS 用户指南中的“使用‘立即应用’设置”。
- 在确认页面上,查看您的更改。如果正确,请选择“修改数据库实例”以保存更改。
AWS CLI
AWS CLI 也是如此。通过提供 --multi-az
选项启用多 Az 支持。
modify-db-instance
--db-instance-identifier "test-rds" \
--multi-az
Redshift Cluster Configuration Check
API 中的类别名称:REDSHIFT_CLUSTER_CONFIGURATION_CHECK
这会检查 Redshift 集群的基本元素:静态加密、日志记录和节点类型。
这些配置项对于维护安全且可观察的 Redshift 集群非常重要。
建议:检查是否所有 Redshift 集群都进行了静态加密、已启用日志记录且具有节点类型。 如需修复此发现结果,请完成以下步骤:Terraform
resource "aws_kms_key" "redshift_encryption" {
description = "Used for Redshift encryption configuration"
enable_key_rotation = true
}
resource "aws_redshift_cluster" "example" {
# ... other configuration ...
encrypted = true
kms_key_id = aws_kms_key.redshift_encryption.id
logging {
enable = true
log_destination_type = "cloudwatch"
log_exports = ["connectionlog", "userlog", "useractivitylog"]
}
}
AWS 控制台
如需启用集群审核日志记录,请执行以下操作:
- 访问 https://console.aws.amazon.com/redshift/,打开 Amazon Redshift 控制台。
- 在导航菜单中,选择“集群”,然后选择要修改的集群的名称。
- 选择“媒体资源”。
- 选择“修改”和“修改审核日志”。
- 将“配置审核日志记录”设置为“开启”,将“日志导出类型”设置为“CloudWatch”(推荐),然后选择要导出的日志。
如需使用 AWS S3 管理 Redshift 审核日志,请参阅 AWS 文档中的 Redshift - 数据库审核日志记录。
- 选择“保存更改”。
修改集群上的数据库加密
- 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/redshift/ 打开 Amazon Redshift 控制台。
- 在导航菜单中,选择“集群”,然后选择您要修改加密的集群。
- 选择“媒体资源”。
- 选择“修改加密”和“修改加密”。
- 选择要使用的加密方式(KMS 或 HSM),并提供:
- 对于 KMS:要使用的密钥
- 对于 HSM:连接和客户端证书
AWS CLI
- 创建 KMS 密钥并检索密钥 ID
aws kms create-key \
--description "Key to encrypt Redshift Clusters"
- 修改集群
aws redshift modify-cluster \
--cluster-identifiers "test-redshift-cluster" \
--encrypted \
--kms-key-id <value>
Redshift Cluster Maintenancesettings Check
API 中的类别名称:REDSHIFT_CLUSTER_MAINTENANCESETTINGS_CHECK
根据维护窗口进行自动主要版本升级
建议:检查是否所有 Redshift 集群都启用了 allowVersionUpgrade 并设置了 preferredMaintenanceWindow 和 automatedSnapshotRetentionPeriod 如需修复此发现结果,请完成以下步骤:Terraform
此检查符合 Terraform 提供的所有默认值。如果 Redshift 集群失败,请查看相关要求,并移除 aws_redshift_cluster
资源的以下属性的默认替换项。
resource "aws_redshift_cluster" "example" {
# ...other configuration ...
# The following values are compliant and set by default if omitted.
allow_version_upgrade = true
preferred_maintenance_window = "sat:10:00-sat:10:30"
automated_snapshot_retention_period = 1
}
AWS 控制台
通过 AWS 控制台创建 Redshift 集群时,默认值已符合此控制措施的要求。
如需了解详情,请参阅使用控制台管理集群
AWS CLI
如需使用 AWS CLI 修复此控制措施,请执行以下操作:
aws redshift modify-cluster \
--cluster-identifier "test-redshift-cluster" \
--allow-version-upgrade
Redshift Cluster Public Access Check
API 中的类别名称:REDSHIFT_CLUSTER_PUBLIC_ACCESS_CHECK
Amazon Redshift 集群配置的 PubliclyAccessible 属性指示集群是否可公开访问。如果集群配置了 PubliclyAccessible 并将其设置为 true,则表示集群是面向互联网的实例,具有可公开解析的 DNS 名称,该名称会解析为公共 IP 地址。
如果集群不可公开访问,则它是具有解析为专用 IP 地址的 DNS 名称的内部实例。除非您打算公开访问集群,否则不应将集群配置为将 PubliclyAccessible 设置为 true。
建议:检查是否可以公开访问 Redshift 集群 如需修复此发现结果,请完成以下步骤:Terraform
如需修复此控件,您必须修改 Redshift 集群资源,并将 publicly_accessible
设置为 false
(默认值为 true
)。
resource "aws_redshift_cluster" "example" {
# ... other configuration ...
publicly_accessible = false
}
AWS 控制台
如需停用对 Amazon Redshift 集群的公开访问权限,请执行以下操作
- 访问 https://console.aws.amazon.com/redshift/,打开 Amazon Redshift 控制台。
- 在导航菜单中,选择“集群”,然后选择要修改的安全组集群的名称。
- 选择“操作”,然后选择“修改公开访问权限设置”。
- 在“允许 VPC 之外的实例和设备通过集群端点连接到您的数据库”下,选择“否”。
- 选择“确认”。
AWS CLI
使用 modify-cluster
命令设置 --no-publicly-accessible
。
aws redshift modify-cluster \
--cluster-identifier "test-redshift-cluster" \
--no-publicly-accessible
Restricted Common Ports
API 中的类别名称:RESTRICTED_COMMON_PORTS
此政策会检查安全群组的不受限制的传入流量能否通过具有最高风险的指定端口访问。如果安全组中的任何规则允许针对这些端口从“0.0.0.0/0”或“::/0”传入流量,则此控件会失败。
访问不受限制 (0.0.0.0/0) 会增加恶意活动(例如黑客攻击、拒绝服务攻击和数据丢失)的几率。
安全群组对 AWS 资源的入站和出站网络流量进行有状态过滤。任何安全群组都不应允许对以下端口进行不受限制的入站访问:
- 20、21 (FTP)
- 22(SSH)
- 23(Telnet)
- 25 (SMTP)
- 110 (POP3)
- 135 (RPC)
- 143 (IMAP)
- 445 (CIFS)
- 1433、1434 (MSSQL)
- 3000(Go、Node.js 和 Ruby Web 开发框架)
- 3306 (mySQL)
- 3389 (RDP)
- 4333 (ahsp)
- 5000(Python Web 开发框架)
- 5432 (postgresql)
- 5500 (fcp-addr-srvr1)
- 5601(OpenSearch 信息中心)
- 8080(代理)
- 8088(旧版 HTTP 端口)
- 8888(备用 HTTP 端口)
- 9200 或 9300(OpenSearch)
AWS 控制台
如需删除安全群组规则,请执行以下操作:
- 通过 https://console.aws.amazon.com/ec2/ 打开 Amazon EC2 控制台。
- 在导航窗格中,选择“安全群组”。
- 选择要更新的安全群组,选择“操作”,然后选择“修改入站规则”以移除入站规则,或选择“修改出站规则”以移除出站规则。
- 选择要删除的规则右侧的“删除”按钮。
- 依次选择“预览更改”“确认”。
如需了解如何从安全群组中删除规则,请参阅 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 控制台。
- 在左侧窗格中,选择安全群组。
- 选择一个安全群组。
- 在页面底部,选择入站规则标签页。
- 选择修改规则。
- 确定允许通过端口 22 进行访问的规则,然后选择 X 将其移除。
- 选择保存规则。
Rotation Customer Created Cmks Enabled
API 中的类别名称:ROTATION_CUSTOMER_CREATED_CMKS_ENABLED
检查是否为每个密钥启用了自动密钥轮替,并与客户创建的 AWS KMS 密钥的密钥 ID 相匹配。如果资源的 AWS Config 记录器角色没有 kms:DescribeKey 权限,则规则的状态为 NON_COMPLIANT。
建议:确保已为客户创建的 CMK 启用轮替如需为 AWS KMS 启用自动化密钥轮替,请参阅 AWS 文档中的轮替 AWS KMS 密钥。
了解此发现结果类型的Rotation Customer Created Symmetric Cmks Enabled
API 中的类别名称:ROTATION_CUSTOMER_CREATED_SYMMETRIC_CMKS_ENABLED
借助 AWS Key Management Service (KMS),客户可以轮替后备密钥,后备密钥是指存储在 KMS 中的密钥材料,与客户创建的客户主密钥 (CMK) 的密钥 ID 相关联。它是用于执行加密和解密等加密操作的后备密钥。自动密钥轮替目前会保留所有之前的后备密钥,以便透明地解密加密数据。建议为对称密钥启用 CMK 密钥轮替。无法为任何非对称 CMK 启用密钥轮替。
建议:确保已为客户创建的对称 CMK 启用轮替 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台并在 https://console.aws.amazon.com/iam 上打开 IAM 控制台。
- 在左侧导航窗格中,选择
Customer managed keys
。 - 选择一个客户管理的 CMK,其中
Key spec = SYMMETRIC_DEFAULT
- 在“General configuration”下方打开“密钥轮替”标签页
- 选中“每年自动轮替此 KMS 密钥”。复选框
AWS CLI
- 运行以下命令以启用密钥轮替:
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 存储分区的“禁止公开访问”设置。
- 登录 AWS 管理控制台,然后访问 https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台。
- 为此账号选择“禁止公开访问”设置。
- 选择“修改”可更改 AWS 账号中所有存储分区的禁止公开访问设置。
- 选择要更改的设置,然后选择“保存更改”。
- 当系统要求您确认时,请输入“确认”。然后,选择“确认”以保存更改。
AWS CLI
aws s3control put-public-access-block \
--account-id <value> \
--public-access-block-configuration '{"BlockPublicAcls": true, "BlockPublicPolicy": true, "IgnorePublicAcls": true, "RestrictPublicBuckets": true}'
S3 Buckets Configured Block Public Access Bucket And Account Settings
API 中的类别名称:S3_BUCKETS_CONFIGURED_BLOCK_PUBLIC_ACCESS_BUCKET_AND_ACCOUNT_SETTINGS
Amazon S3 提供 Block public access (bucket settings)
和 Block public access (account settings)
,可帮助您管理对 Amazon S3 资源的公开访问权限。默认情况下,创建 S3 存储桶和对象时,公开访问权限处于停用状态。不过,具有足够 S3 权限的 AWS IAM 主体可以在存储桶级或对象级启用公开访问权限。启用 Block public access (bucket settings)
后,系统会阻止单个存储桶及其包含的对象被公开访问。同样,Block public access (account settings)
会阻止整个账号中的所有存储分区和包含的对象可公开访问。
确保 S3 存储桶配置了 Block public access (bucket settings)
。
AWS 控制台
如果输出显示单独的配置设置为 true,则表示该设置已在账号中设置。
- 登录 AWS 管理控制台,然后使用 https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台
- 选择屏蔽公开访问权限(账号设置)
- 选择 Edit(修改)可更改 AWS 账号中所有存储分区的禁止公开访问设置
- 选择要更改的设置,然后选择保存。如需详细了解各项设置,请将光标悬停在 i 图标上。
- 当系统要求您确认时,请输入 confirm。然后,点击确认以保存更改。
AWS CLI
如需为此账号设置“屏蔽公开访问”设置,请运行以下命令:
aws s3control put-public-access-block
--public-access-block-configuration BlockPublicAcls=true, IgnorePublicAcls=true, BlockPublicPolicy=true, RestrictPublicBuckets=true
--account-id <value>
S3 Bucket Access Logging Enabled Cloudtrail S3 Bucket
API 中的类别名称:S3_BUCKET_ACCESS_LOGGING_ENABLED_CLOUDTRAIL_S3_BUCKET
S3 存储桶访问日志记录功能会生成一个日志,其中包含对您的 S3 存储桶发出的每个请求的访问记录。访问日志记录包含有关请求的详细信息,例如请求类型、请求中指定的资源以及处理请求的时间和日期。建议针对 CloudTrail S3 存储桶启用存储桶访问日志记录。
建议:确保已针对 CloudTrail S3 存储桶启用 S3 存储桶访问日志记录功能
如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录 AWS 管理控制台,然后在 https://console.aws.amazon.com/s3 上打开 S3 控制台。
- 在所有存储桶下,点击目标 S3 存储桶
- 点击控制台右上角的属性
- 在存储分区下:<s3\_bucket\_for\_cloudtrail>点击 Logging</s3\_bucket\_for\_cloudtrail>
- 配置存储桶日志记录
- 点击已启用复选框
- 从列表中选择目标存储分区
- 输入目标前缀 - 点击保存。
AWS CLI
- 获取 CloudTrail 记录到的 S3 存储桶的名称:
aws cloudtrail describe-trails --region <region-name> --query trailList[*].S3BucketName
- 复制并在
中添加目标存储桶名称,在 中添加日志文件的前缀,并在以下模板中选择添加电子邮件地址,然后将其保存为 :
{
"LoggingEnabled": {
"TargetBucket": "<Logging_BucketName>",
"TargetPrefix": "<LogFilePrefix>",
"TargetGrants": [
{
"Grantee": {
"Type": "AmazonCustomerByEmail",
"EmailAddress": "<EmailID>"
},
"Permission": "FULL_CONTROL"
}
]
}
}
- 使用存储桶名称和
作为输入运行 put-bucket-logging 命令。如需了解详情,请参阅 put-bucket-logging:
aws s3api put-bucket-logging --bucket <BucketName> --bucket-logging-status file://<FileName.Json>
S3 Bucket Logging Enabled
API 中的类别名称:S3_BUCKET_LOGGING_ENABLED
AWS S3 服务器访问日志记录功能会记录对存储桶的访问请求,这对安全审核很有用。默认情况下,系统不会为 S3 存储分区启用服务器访问日志记录。
建议:检查是否对所有 S3 存储分区启用了日志记录 如需修复此发现结果,请完成以下步骤:Terraform
以下示例演示了如何创建 2 个存储分区:
- 日志记录存储桶
- 合规存储桶
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
以下示例演示了如何:
- 创建存储桶政策,向日志记录服务主账号授予日志记录存储桶中的
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
- 将政策应用于日志记录存储桶
logging.json
{
"LoggingEnabled": {
"TargetBucket": "MyBucket",
"TargetPrefix": "Logs/"
}
}
aws s3api put-bucket-logging \
--bucket MyBucket \
--bucket-logging-status file://logging.json
S3 Bucket Policy Set Deny Http Requests
API 中的类别名称:S3_BUCKET_POLICY_SET_DENY_HTTP_REQUESTS
在 Amazon S3 存储桶一级,您可以通过存储桶政策配置权限,使对象只能通过 HTTPS 访问。
建议:确保将 S3 存储分区政策设置为拒绝 HTTP 请求 如需修复此发现结果,请完成以下步骤:AWS 控制台
使用 AWS 政策生成器:
- 重复上述第 1-4 步。
- 点击存储桶政策编辑器底部的
Policy Generator
- 选择政策类型
S3 Bucket Policy
- 添加语句
-Effect
= 拒绝
-Principal
= *
-AWS Service
= Amazon S3
-Actions
= *
-Amazon Resource Name
= - 生成政策
- 复制文本并将其添加到存储桶政策中。
AWS CLI
- 将存储桶政策导出为 JSON 文件。
aws s3api get-bucket-policy --bucket <bucket_name> --query Policy --output text > policy.json
- 修改 policy.json 文件,在以下语句中添加以下内容:
{
"Sid": <optional>",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::<bucket_name>/*",
"Condition": {
"Bool": {
"aws:SecureTransport": "false"
}
}
}
- 将此修改后的政策重新应用于 S3 存储桶:
aws s3api put-bucket-policy --bucket <bucket_name> --policy file://policy.json
S3 Bucket Replication Enabled
API 中的类别名称:S3_BUCKET_REPLICATION_ENABLED
此控件用于检查 Amazon S3 存储桶是否启用了跨区域复制。如果存储桶未启用跨区域复制,或者同时启用了同区域复制,则控制操作会失败。
复制是指在同一 AWS 区域或不同 AWS 区域中的存储桶之间自动异步复制对象。复制功能会将新创建的对象和对象更新从源存储桶复制到一个或多个目标存储桶。AWS 最佳实践建议对属于同一 AWS 账号的源存储分区和目标存储分区执行复制操作。除了可用性,您还应考虑其他系统安全强化设置。
建议:检查是否已为 S3 存储分区启用跨区域复制如需对 S3 存储桶启用跨区域复制,请参阅《Amazon Simple Storage Service 用户指南》中的为归同一账号所有的源存储桶和目标存储桶配置复制。对于“源存储桶”,选择“应用到存储桶中的所有对象”。
了解此发现结果类型的S3 Bucket Server Side Encryption Enabled
API 中的类别名称:S3_BUCKET_SERVER_SIDE_ENCRYPTION_ENABLED
这将检查您的 S3 存储桶是否启用了 Amazon S3 默认加密,或者 S3 存储桶政策是否明确拒绝未使用服务器端加密的 put-object 请求。
建议:确保所有 S3 存储桶都采用了静态加密 如需修复此发现结果,请完成以下步骤:Terraform
resource "aws_s3_bucket_server_side_encryption_configuration" "enable" {
bucket = "my-bucket"
rule {
apply_server_side_encryption_by_default {
sse_algorithm = "AES256"
}
}
}
AWS 控制台
如需在 S3 存储桶上启用默认加密,请执行以下操作:
- 通过 https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台。
- 在左侧导航窗格中,选择“存储分区”。
- 从列表中选择 S3 存储桶。
- 选择“媒体资源”。
- 选择“默认加密”。
- 对于加密,请选择 AES-256 或 AWS-KMS。
- 选择 AES-256 以使用由 Amazon S3 管理的密钥进行默认加密。如需详细了解如何使用 Amazon S3 服务器端加密功能加密数据,请参阅 Amazon Simple Storage Service 用户指南。
- 选择 AWS-KMS 以使用由 AWS KMS 管理的密钥进行默认加密。然后从您创建的 AWS KMS 主密钥列表中选择一个主密钥。
- 输入要使用的 AWS KMS 密钥的 Amazon 资源名称 (ARN)。您可以在 IAM 控制台中的“加密密钥”下方找到 AWS KMS 密钥的 ARN。或者,您也可以从下拉列表中选择密钥名称。
- 重要提示:如果您为默认加密配置使用 AWS KMS 选项,则需要遵守 AWS KMS 的 RPS(每秒请求数)配额。如需详细了解 AWS KMS 配额以及如何申请增加配额,请参阅 AWS 密钥管理服务开发者指南。
- 选择“保存”。
如需详细了解如何创建 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 存储桶启用或停用版本控制
- 登录 AWS 管理控制台,然后在 https://console.aws.amazon.com/s3/ 上打开 Amazon S3 控制台。
- 在“存储桶”列表中,选择要为其启用版本控制的存储桶的名称。
- 选择“媒体资源”。
- 在“存储分区版本控制”下,选择“修改”。
- 选择“暂停”或“启用”,然后选择“保存更改”。
AWS CLI
aws s3control put-bucket-versioning \
--bucket <bucket_name> \
--versioning-configuration Status=Enabled
S3 Default Encryption Kms
API 中的类别名称:S3_DEFAULT_ENCRYPTION_KMS
检查是否使用 AWS Key Management Service (AWS KMS) 对 Amazon S3 存储分区进行了加密
建议:检查是否使用 KMS 对所有存储分区进行了加密 如需修复此发现结果,请完成以下步骤:Terraform
resource "aws_kms_key" "s3_encryption" {
description = "Used for S3 Bucket encryption configuration"
enable_key_rotation = true
}
resource "aws_s3_bucket_server_side_encryption_configuration" "enable" {
bucket = "my-bucket"
rule {
apply_server_side_encryption_by_default {
kms_master_key_id = aws_kms_key.s3_encryption.arn
sse_algorithm = "aws:kms"
}
}
}
AWS 控制台
如需在 S3 存储桶上启用默认加密,请执行以下操作:
- 通过 https://console.aws.amazon.com/s3/ 打开 Amazon S3 控制台。
- 在左侧导航窗格中,选择“存储分区”。
- 从列表中选择 S3 存储桶。
- 选择“媒体资源”。
- 选择“默认加密”。
- 对于加密,请选择 AWS-KMS。
- 选择 AWS-KMS 以使用由 AWS KMS 管理的密钥进行默认加密。然后,从您创建的 AWS KMS 主密钥列表中选择一个主密钥。如需详细了解如何创建 KMS 密钥,请参阅 AWS 文档 - 创建密钥
- 输入要使用的 AWS KMS 密钥的 Amazon 资源名称 (ARN)。您可以在 IAM 控制台中的“加密密钥”下方找到 AWS KMS 密钥的 ARN。或者,您也可以从下拉列表中选择一个键名称。
- 重要提示:此解决方案受 AWS KMS 的 RPS(每秒请求次数)配额的约束。如需详细了解 AWS KMS 配额以及如何申请增加配额,请参阅 AWS Key Management Service 开发者指南。
- 选择“保存”。
如需详细了解如何将 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 笔记本实例配置为拒绝直接访问互联网,请执行以下操作:
- 访问 https://console.aws.amazon.com/sagemaker/,打开 SageMaker 控制台
- 前往“Notebooks 实例”。
- 删除启用了互联网直接访问的实例。依次选择相应实例、“操作”和“停止”。
- 实例停止后,选择“操作”,然后选择“删除”。
- 选择“创建笔记本实例”。提供配置详细信息。
- 展开“网络”部分,然后选择 VPC、子网和安全组。在“直接互联网访问权限”下,选择“停用 - 通过 VPC 访问互联网”。
- 选择“创建笔记本实例”。
如需了解详情,请参阅 Amazon SageMaker 开发者指南中的“将记事本实例连接到 VPC 中的资源”。
Secretsmanager Rotation Enabled Check
API 中的类别名称:SECRETSMANAGER_ROTATION_ENABLED_CHECK
检查存储在 AWS Secrets Manager 中的密文是否配置为自动轮替。如果未配置自动轮替的 Secret,则控制操作会失败。如果您为 maximumAllowedRotationFrequency
参数提供自定义值,则仅当相应密钥在指定时间范围内自动轮替时,该控件才会传递。
Secret Manager 可帮助您改善组织的安全状况。Secret 包括数据库凭据、密码和第三方 API 密钥。您可以使用 Secret Manager 集中存储密文、自动加密密文、控制对密文的访问权限,以及安全地自动轮替密文。
Secrets Manager 可以轮替 Secret。您可以使用轮替将长期 Secret 替换为短期 Secret。轮替 Secret 可限制未经授权的用户使用已泄露 Secret 的时间。因此,您应该经常轮替您的密钥。如需详细了解轮替,请参阅“AWS Secrets Manager 用户指南”中的“轮替 AWS Secrets Manager Secret”。
建议:检查是否对所有 AWS Secrets Manager 密钥都启用了轮替如需为 Secret Manager 中的 Secret 开启自动轮替功能,请参阅 AWS Secrets Manager 用户指南中的“使用控制台为 AWS Secrets Manager 中的 Secret 设置自动轮替”。您必须选择并配置要轮替的 AWS Lambda 函数。
了解此发现结果类型的Sns Encrypted Kms
API 中的类别名称:SNS_ENCRYPTED_KMS
检查是否使用 AWS KMS 对 SNS 主题进行了静态加密。如果 SNS 主题不使用 KMS 密钥进行服务器端加密 (SSE),控制将失败。
对静态数据进行加密可降低未经 AWS 身份验证的用户访问存储在磁盘上的数据的风险。它还添加了另一组访问控制功能,以限制未经授权的用户访问数据。例如,必须有 API 权限才能对数据进行解密,然后才能读取数据。应对 SNS 主题进行静态加密,以增强安全性。
建议:检查是否使用 KMS 对所有 SNS 主题进行了加密如需为 SNS 主题开启 SSE,请参阅 Amazon Simple Notification Service 开发者指南中的“为 Amazon SNS 主题启用服务器端加密 (SSE)”。在使用 SSE 之前,您还必须配置 AWS KMS 密钥政策,以允许对主题进行加密,以及对消息进行加密和解密。如需了解详情,请参阅《Amazon Simple Notification Service 开发者指南》中的“配置 AWS KMS 权限”。
了解此发现结果类型的Vpc Default Security Group Closed
API 中的类别名称:VPC_DEFAULT_SECURITY_GROUP_CLOSED
此控制机制会检查 VPC 的默认安全群组是允许入站还是出站流量。如果安全群组允许入站或出站流量,该控件将失败。
默认安全群组的规则允许分配给同一安全群组的网络接口(及其关联的实例)中的所有出站和入站流量。我们建议您不要使用默认安全群组。由于无法删除默认安全组,因此您应更改默认安全组规则设置,以限制入站和出站流量。如果您不小心为 EC2 实例等资源配置了默认安全群组,这可以防止意外流量。
建议:确保每个 VPC 的默认安全群组对所有流量进行限制如需解决此问题,请先创建新的最低特权安全群组。如需了解相关说明,请参阅《Amazon VPC 用户指南》中的“创建安全组”。然后,将新的安全组分配给您的 EC2 实例。如需了解相关说明,请参阅《Amazon EC2 用户指南(适用于 Linux 实例)》中的“更改实例的安全组”。
为资源分配新的安全群组后,请从默认安全群组中移除所有入站和出站规则。有关说明,请参阅 Amazon VPC 用户指南中的“删除安全群组规则”。
了解此发现结果类型Vpc Flow Logging Enabled All Vpcs
API 中的类别名称:VPC_FLOW_LOGGING_ENABLED_ALL_VPCS
VPC 流日志是一项功能,可让您捕获有关进出 VPC 中网络接口的 IP 流量的信息。创建数据流日志后,您可以在 Amazon CloudWatch Logs 中查看和检索其数据。建议为数据包“拒绝”启用 VPC 流日志。
建议:确保已在所有 VPC 中启用 VPC 流日志记录 如需修复此发现结果,请完成以下步骤:AWS 控制台
- 登录管理控制台
- 选择
Services
,然后选择VPC
- 在左侧导航窗格中,选择
Your VPCs
- 选择 VPC
- 在右侧窗格中,选择
Flow Logs
标签页。 - 如果不存在流日志,请点击
Create Flow Log
- 对于“过滤条件”,请选择
Reject
- 输入
Role
和Destination Log Group
- 点击
Create Log Flow
- 点击“
CloudWatch Logs Group
”
注意:将过滤器设置为“拒绝”会大幅减少此建议的日志记录数据积累,并提供足够的信息来进行数据泄露检测、研究和修复。不过,在最小特权安全群组工程期间,将此过滤条件设为“全部”非常有助于发现已运行环境正常运行所需的现有流量。
AWS CLI
- 创建一个政策文档,并将其命名为
role_policy_document.json
,然后粘贴以下内容:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "test",
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
- 创建另一个政策文档,并将其命名为
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": "*"
}
]
}
- 运行以下命令以创建 IAM 角色:
aws iam create-role --role-name <aws_support_iam_role> --assume-role-policy-document file://<file-path>role_policy_document.json
- 运行以下命令以创建 IAM 政策:
aws iam create-policy --policy-name <ami-policy-name> --policy-document file://<file-path>iam-policy.json
- 使用上一步中返回的 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>
- 运行
describe-vpcs
以获取所选区域中可用的 VpcId:
aws ec2 describe-vpcs --region <region>
- 该命令输出应返回所选区域中可用的 VPC ID。
- 运行
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>
- 对所选区域中可用的其他 VPC 重复第 8 步。
- 通过更新 --region 更改区域,然后针对其他 VPC 重复执行修复程序。
Vpc Sg Open Only To Authorized Ports
API 中的类别名称:VPC_SG_OPEN_ONLY_TO_AUTHORIZED_PORTS
此控件用于检查 Amazon EC2 安全群组是否允许来自未经授权的端口的无限制传入流量。控制状态按如下方式确定:
如果您为 authorizedTcpPorts 使用默认值,当安全组允许来自 80 和 443 端口以外的任何端口的无限制入站流量时,控制操作将失败。
如果您为 authorizedTcpPorts 或 authorizedUdpPorts 提供了自定义值,并且安全群组允许来自任何未列出的端口的无限制入站流量,则控制操作会失败。
如果不使用任何参数,则对于具有无限制入站流量规则的任何安全群组,控制操作都会失败。
安全群组可对传入和传出 AWS 的网络流量进行有状态过滤。安全群组规则应遵循最小权限原则。无限制访问权限(带有 /0 后缀的 IP 地址)会增加遭到黑客入侵、遭到拒绝服务攻击和数据丢失等恶意活动的可能性。除非明确允许某个端口,否则该端口应拒绝不受限制的访问。
建议:检查任何 VPC 具有 0.0.0.0/0 的任何安全群组是否仅允许特定入站 TCP/UDP 流量如需修改安全组,请参阅 Amazon VPC 用户指南中的使用安全组。
了解此发现结果类型Both VPC VPN Tunnels Up
API 中的类别名称:VPC_VPN_2_TUNNELS_UP
VPN 隧道是一种加密链路,通过 AWS 站点到站点 VPN 连接,数据可以从客户网络传入或传出 AWS。每个 VPN 连接都包含两个 VPN 隧道,您可以同时使用这两个隧道来实现高可用性。确保两个 VPN 隧道都处于 VPN 连接状态对于确认 AWS VPC 与远程网络之间的连接是否安全且具有高可用性至关重要。
此控件会检查 AWS 站点到站点 VPN 提供的两个 VPN 隧道是否都处于运行状态。如果一个或两个隧道处于 DOWN 状态,则控制操作会失败。
建议:确认 AWS 站点到站点 VPN 提供的两个 AWS VPN 隧道都处于运行状态如需修改 VPN 隧道选项,请参阅 AWS 站点到站点 VPN 用户指南中的修改站点到站点 VPN 隧道选项。
了解此发现结果类型的