AWS 基础安全最佳实践控件 - AWS Security Hub
[ACM.1] 导入的ACM证书应在指定时间段后续订[APIGateway.1] 应启用 API 网关 REST 和 HTTP API 日志记录[AutoScaling.1] 与负载均衡器关联的 Auto Scaling 组应使用负载均衡器运行状况检查[CloudFront.1] CloudFront 分配应配置默认根对象[CloudFront.2] CloudFront 分配应启用源访问身份[CloudFront.3] CloudFront 分配应要求在传输过程中进行加密[CloudFront.4] CloudFront 分配应已配置源故障转移[CloudTrail.1] CloudTrail 应启用并配置至少一个多区域跟踪[CloudTrail.2] CloudTrail 应启用静态加密[CodeBuild.1] CodeBuild GitHub 或 Bitbucket 源存储库 URL 应使用 OAuth[CodeBuild.2] CodeBuild 项目环境变量不应包含明文凭证[Config.1] 应启用 AWS Config[DMS.1] 数据库迁移服务复制实例不应是公有的[DynamoDB.1] DynamoDB 表应自动根据需要扩展容量[DynamoDB.2] DynamoDB 表应启用时间点恢复[DynamoDB.3] DynamoDB Accelerator (DAX) 集群应进行静态加密[EC2.1] Amazon EBS 快照不应公开,这取决于所有人都可进行恢复的能力[EC2.2] VPC 默认安全组不应允许入站和出站流量 [EC2.3] 挂载的 EBS 卷应进行静态加密[EC2] 停止的 EC2 实例应在指定时间段后删除[EC2] 应在所有 VPC 中启用 VPCs流日志记录 [EC2] 应启用 EBS 默认加密[EC2] EC2 实例应使用 IMDSv2[EC2] EC2 实例不应具有公有 IP 地址[EC2] Amazon EC2 应配置为使用 VPC 终端节点[EFS Amazon EFS 应配置为使用 对文件数据进行静态加密 AWS KMS[EFS Amazon EFS 卷应位于备份计划中[ELB.3] 传统 Load Balancer 侦听器应配置 HTTPS 或 TLS 终止[ELB.4] 应用程序负载均衡器应配置为删除 HTTP 标头[ELB.5] 应启用应用程序和 Classic Load Balancer 日志记录[ELB.6] 应启用 Application Application Load Balancer 删除保护[ELBV2.1] 应用程序负载均衡器 应配置为将所有 HTTP 请求重定向到 HTTPS[EMR.1] Amazon EMR 集群主节点不应具有公有 IP 地址[ES.1] Elasticsearch 域应启用静态加密[ES.2] Amazon Elasticsearch Service 域应位于 VPC 中[ES.3] Amazon Elasticsearch Service 域应加密在节点之间发送的数据[GuardDuty.1] 应启用 GuardDuty[IAM.1] IAM 策略不应允许完全“*”管理权限[IAM.2] IAM 用户不应附加 IAM 策略[IAM.3] IAM 用户访问密钥应每 90 天或更短时间轮换一次[IAM.4] 不应存在 IAM 根用户访问密钥[IAM.5] 应为拥有控制台密码的所有 IAM 用户启用 MFA[IAM.6] 应该为根用户启用硬件 MFA[IAM.7] IAM 用户的密码策略应具有可靠的配置[IAM.8] 应删除未使用的IAM用户凭证[KMS.1] IAM 客户托管策略不应允许对所有 KMS 密钥执行解密操作[KMS.2] IAM 委托人不应具有允许对所有 KMS 密钥执行解密操作的IAM内联策略 [KMS.3] AWS KMS 密钥不应意外删除[Lambda.1] Lambda 函数策略应禁止公开访问[Lambda.2] Lambda 函数应该使用最新的运行时[RDS.1] RDS 快照应为私有快照[RDS.2] RDS 数据库实例应禁止公有访问,这取决于 PubliclyAccessible 配置[RDS.3] RDS 数据库实例应启用静态加密[RDS.4] RDS 集群快照和数据库快照应进行静态加密[RDS.5] RDS 数据库实例应配置了多个可用区[RDS.6] 应为 RDS 数据库实例和集群配置增强监控[RDS.7] RDS 集群应启用删除保护[RDS.8] RDS 数据库实例应启用删除保护[RDS.9] 应启用数据库日志记录[RDS.10] 应为 RDS 实例配置IAM身份验证[Redshift.1] Amazon Redshift 集群应禁止公开访问[Redshift.2] 到 Amazon Redshift 集群的连接应在传输过程中加密[Redshift.3] Amazon Redshift 集群应启用自动快照[Redshift.6] Amazon Redshift 应启用到主要版本的自动升级[S3.1] 应启用 S3 阻止公有访问设置[S3.2] S3 存储桶应禁止公开读取访问[S3.3] S3 存储桶应禁止公开写入访问[S3.4] S3 存储桶应启用服务器端加密[S3] S3 存储桶应要求请求使用安全套接字层[S3] 应限制存储桶策略中授予其他Amazon S3账户AWS的权限[SageMaker.1] SageMaker 笔记本实例不应具有直接 Internet 访问权限[SecretsManager.1] Secrets Manager 密钥应启用自动轮换[SecretsManager.2] 配置有自动轮换的Secrets Manager密钥应成功轮换[SNS.1] SNS 主题应使用 进行静态加密 AWS KMS[SSM.1] EC2 实例应由 管理 AWS Systems Manager[SSM.2] 由 Systems Manager 管理的所有 EC2 实例都应符合修补要求[SSM.3] 由 管理的实例Systems Manager应具有 COMPLIANT 关联合规性状态
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

AWS 基础安全最佳实践控件

AWS 基础安全最佳实践标准包含以下控件。对于每个控件,介绍内容包括以下信息。

  • 控件适用的类别和子类别

  • 严重程度

  • 适用资源

  • 必需的 AWS Config 规则以及由 AWS Security Hub 设置的任意特定参数值

  • 补救步骤

[ACM.1] 导入的ACM证书应在指定时间段后续订

类别:保护 > 数据保护 > 传输中数据加密

严重性:

资源:ACM 证书

AWS Config 规则: acm-certificate-expiration-check

参数:

  • daysToExpiration: 30

该控制检查您账户中的 ACM 证书是否标记为在 30 天内过期。它会检查导入的证书和 AWS Certificate Manager 提供的证书。

将自动续订由 ACM 提供的证书。如果您使用 ACM 提供的证书,则无需轮换 SSL/TLS 证书。ACM 为您管理证书续订。

ACM 不会自动续订您导入的证书。您必须手动续订导入的证书。

有关更多信息,请参阅 AWS Certificate Manager 用户指南 中的托管续订

注意

以下区域不支持此控制。

  • 非洲(开普敦)

  • 中国(北京)

  • 中国 (宁夏)

  • 欧洲(米兰)

Remediation

ACM 针对您的由 Amazon 颁发的 SSL/TLS 证书提供托管续订。这包括通过使用 ACM 颁发的公有和私有证书。如果可能,ACM 会自动续订您的证书,而无需您执行任何操作。如果证书与其他 AWS 服务(如 Elastic Load Balancing 或 Amazon CloudFront)相关联,则有资格续订。如果自发布或上次续订以来已经导出,也可以续订。

如果 ACM 无法自动验证证书中的一个或多个域名,ACM 会通知域拥有者必须手动验证域。域出于以下原因可能需要手动验证。

  • ACM 无法与域建立 HTTPS 连接。

  • 响应 HTTPS 请求时返回的证书与 ACM 要续订的证书不匹配。

如果证书距过期还有 45 天,并且证书中的一个或多个域名需要手动验证,ACM 将通知域拥有者。

通过电子邮件(对于电子邮件验证的证书)

如果上次通过电子邮件验证了证书,则 ACM 将针对需要手动验证的每个域名向域拥有者发送一封电子邮件。为确保能够收到此电子邮件,域拥有者必须为每个域正确配置电子邮件。

有关详细信息,请参阅(可选)为域配置电子邮件。此电子邮件包含一个用于执行验证的链接。此链接将在 72 小时后过期。如有必要,可以使用 ACM 控制台、AWS CLI 或 API 请求 ACM 重新发送域验证电子邮件。有关更多信息,请参阅请求证书续订的域验证电子邮件

重要

电子邮件验证的证书在其最后一个手动验证日期的 825 天后自动续订。825 天之后,要继续续订,域拥有者或授权代表必须手动重新验证域的所有权。若要避免此问题,Security Hub 建议您创建新证书并在可能的情况下使用 DNS 验证。如果配置正确,DNS 验证的证书将无限期地重新验证。

通过 中的通知 AWS Personal Health Dashboard

ACM 将向您的 Personal Health Dashboard 发送通知,告知您证书中的一个或多个域名需要验证,然后才能续订证书。ACM 将在证书过期之前的 45 天、30 天、15 天、7 天、3 天和 1 天时发送这些通知。这些通知仅作提供信息之用。

[APIGateway.1] 应启用 API 网关 REST 和 HTTP API 日志记录

类别:识别 > 日志记录

严重性:

资源:阶段 (v1阶段 (v2

AWS Config 规则: api-gw-execution-logging-enabled

参数:

该控制检查 Amazon API Gateway REST 或 HTTP API 阶段的所有方法是否已启用日志记录。如果不是某个阶段的所有方法都启用了日志记录,或者既不是 loggingLevel 也不ERROR是 ,则控制将失败INFO

API 网关 REST 或 HTTP API 阶段应启用相关日志。 API 网关REST API 执行日志记录提供向 API 网关 REST API 阶段发出的请求的详细记录。这些阶段包括 API 集成后端响应、Lambda 授权方响应和requestId集成终端节点AWS的 。

HTTP API 访问日志包含有关向 HTTP API 发出的请求的信息。该信息包括调用方的 IP 地址、请求的 方法、请求的时间以及 HTTP 状态代码响应。日志可以帮助进行安全和访问审计,支持其他威胁检测,并帮助诊断可用性问题。

注意

以下区域不支持此控制:

  • 非洲(开普敦)

  • 欧洲(米兰)

Remediation

要为 REST APIs 启用日志记录,请参阅 中的使用 控制台CloudWatchAPI 网关设置 API API 网关 开发人员指南 日志记录。要为 HTTP APIs 启用日志记录,请参阅 中的为阶段启用日志记录API 网关 开发人员指南

[AutoScaling.1] 与负载均衡器关联的 Auto Scaling 组应使用负载均衡器运行状况检查

类别:识别 > 清单

严重性:

资源类型: AutoScaling AutoScalingGroup

AWS Config 规则: autoscaling-group-elb-healthcheck-required

参数:

该控制检查与负载均衡器关联的 Auto Scaling 组是否正在使用Elastic Load Balancing运行状况检查。

这可确保该组可以根据负载均衡器提供的其他测试确定实例的运行状况。使用Elastic Load Balancing运行状况检查可帮助支持使用 EC2 Auto Scaling 组的应用程序的可用性。

Remediation

要修复,请更新您的 Auto Scaling 组以使用 Elastic Load Balancing 运行状况检查。

启用 Elastic Load Balancing 运行状况检查

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中的 Auto Scaling 下,选择 Auto Scaling Groups

  3. 选中您的 组对应的复选框。

  4. 选择 Edit

  5. Health checks (运行状况检查) 下,对于 Health check type 运行状况检查类型),选择 ELB。

  6. 对于 Health check grace period (运行状况检查宽限期),输入 300

  7. 选择页面底部的更新

有关将负载均衡器与 Auto Scaling 组结合使用的更多信息AWS Auto Scaling 用户指南,请参阅

[CloudFront.1] CloudFront 分配应配置默认根对象

类别:保护 > 安全访问管理 > 资源不可公开访问

严重性:严重

资源:分配

AWS Config 规则: cloudfront-default-root-object-configured

参数:

该控制检查 Amazon CloudFront 分配是否配置为返回作为默认根对象的特定对象。如果CloudFront分配未配置默认根对象,则控制将失败。

用户有时可能会请求分配根 URL 而不是分配中的对象。出现这种情况时,指定默认根对象可以帮助您避免公开 Web 分配的内容。

注意

此控制仅在 中受支持美国东部(弗吉尼亚北部)。以下区域不支持它:

  • 美国东部(俄亥俄州)

  • 美国西部(加利福尼亚北部)

  • 美国西部(俄勒冈)

  • 非洲(开普敦)

  • 亚太地区(香港)

  • 亚太地区(孟买)

  • 亚太区域 (大阪当地)

  • 亚太区域(首尔)

  • 亚太区域(新加坡)

  • 亚太区域(悉尼)

  • 亚太区域(东京)

  • 加拿大 (中部)

  • 中国(北京)

  • 中国 (宁夏)

  • 欧洲(法兰克福)

  • 欧洲(爱尔兰)

  • 欧洲(伦敦)

  • 欧洲(米兰)

  • 欧洲(巴黎)

  • 欧洲(斯德哥尔摩)

  • 中东(巴林)

  • 南美洲(圣保罗)

  • AWS GovCloud(美国东部)

  • AWS GovCloud (US-West)

Remediation

有关如何为分配指定默认根对象的详细说明,请参阅 中的https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/DefaultRootObject.html#DefaultRootObjectHowToDefine如何指定默认根对象Amazon CloudFront 开发人员指南

[CloudFront.2] CloudFront 分配应启用源访问身份

类别:保护 > 安全访问管理 > 资源策略配置

严重性:

资源:分配

AWS Config 规则: cloudfront-origin-access-identity-enabled

参数:

该控制检查具有Amazon CloudFront源类型的 Amazon S3 分配是否配置了源访问身份 (OAI)。如果未配置 OAI,则控制失败。

CloudFront OAI 阻止用户直接访问 S3 存储桶内容。当用户直接访问 S3 存储桶时,他们实际上会绕过CloudFront分配以及应用于基础 S3 存储桶内容的任何权限。

注意

此控制仅在 中受支持美国东部(弗吉尼亚北部)。以下区域不支持它:

  • 美国东部(俄亥俄州)

  • 美国西部(加利福尼亚北部)

  • 美国西部(俄勒冈)

  • 非洲(开普敦)

  • 亚太地区(香港)

  • 亚太地区(孟买)

  • 亚太区域 (大阪当地)

  • 亚太区域(首尔)

  • 亚太区域(新加坡)

  • 亚太区域(悉尼)

  • 亚太区域(东京)

  • 加拿大 (中部)

  • 中国(北京)

  • 中国 (宁夏)

  • 欧洲(法兰克福)

  • 欧洲(爱尔兰)

  • 欧洲(伦敦)

  • 欧洲(米兰)

  • 欧洲(巴黎)

  • 欧洲(斯德哥尔摩)

  • 中东(巴林)

  • 南美洲(圣保罗)

  • AWS GovCloud(美国东部)

  • AWS GovCloud (US-West)

Remediation

有关详细的修复说明,请参阅 中的创建 CloudFront OAI 并将其添加到您的分配Amazon CloudFront 开发人员指南中

[CloudFront.3] CloudFront 分配应要求在传输过程中进行加密

类别:保护 > 数据保护 > 传输中的数据加密

严重性:

资源:分配

AWS Config 规则: cloudfront-viewer-policy-https

参数:

该控制检查 Amazon CloudFront 分配是否要求查看器直接使用 HTTPS,或者它是否使用重定向。如果 设置为 ViewerProtocolPolicy (对于 allow-alldefaultCacheBehavior或 (对于 ),则控制失败cacheBehaviors

HTTPS (TLS) 可用于帮助防止潜在攻击者使用中间人攻击或类似攻击来窃听或操作网络流量。只允许通过 HTTPS (TLS) 的加密连接。加密传输中的数据可能会影响性能。您应使用此功能测试应用程序,以了解性能状况和 TLS 的影响。

注意

此控制仅在 中受支持美国东部(弗吉尼亚北部)。以下区域不支持它:

  • 美国东部(俄亥俄州)

  • 美国西部(加利福尼亚北部)

  • 美国西部(俄勒冈)

  • 非洲(开普敦)

  • 亚太地区(香港)

  • 亚太地区(孟买)

  • 亚太区域 (大阪当地)

  • 亚太区域(首尔)

  • 亚太区域(新加坡)

  • 亚太区域(悉尼)

  • 亚太区域(东京)

  • 加拿大 (中部)

  • 中国(北京)

  • 中国 (宁夏)

  • 欧洲(法兰克福)

  • 欧洲(爱尔兰)

  • 欧洲(伦敦)

  • 欧洲(米兰)

  • 欧洲(巴黎)

  • 欧洲(斯德哥尔摩)

  • 中东(巴林)

  • 南美洲(圣保罗)

  • AWS GovCloud(美国东部)

  • AWS GovCloud (US-West)

Remediation

有关详细的修复说明,请参阅 中的要求在查看器和 CloudFront 之间使用 HTTPS Amazon CloudFront 开发人员指南 进行通信。

[CloudFront.4] CloudFront 分配应已配置源故障转移

类别:恢复 > 弹性 > 高可用性

严重性:

资源:分配

AWS Config 规则: cloudfront-origin-failover-enabled

参数:

该控制检查 Amazon CloudFront 分配是否配置了具有两个或更多源的源组。

CloudFront 源故障转移可以提高可用性。如果主源不可用或返回特定 HTTP 响应状态代码,源故障转移会自动将流量重定向到辅助源。

注意

此控制仅在 中受支持美国东部(弗吉尼亚北部)。以下区域不支持它:

  • 美国东部(俄亥俄州)

  • 美国西部(加利福尼亚北部)

  • 美国西部(俄勒冈)

  • 非洲(开普敦)

  • 亚太地区(香港)

  • 亚太地区(孟买)

  • 亚太区域 (大阪当地)

  • 亚太区域(首尔)

  • 亚太区域(新加坡)

  • 亚太区域(悉尼)

  • 亚太区域(东京)

  • 加拿大 (中部)

  • 中国(北京)

  • 中国 (宁夏)

  • 欧洲(法兰克福)

  • 欧洲(爱尔兰)

  • 欧洲(伦敦)

  • 欧洲(米兰)

  • 欧洲(巴黎)

  • 欧洲(斯德哥尔摩)

  • 中东(巴林)

  • 南美洲(圣保罗)

  • AWS GovCloud(美国东部)

  • AWS GovCloud (US-West)

Remediation

有关详细修复说明,请参阅 中的https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/high_availability_origin_failover.html#concept_origin_groups.creating创建源组Amazon CloudFront 开发人员指南

[CloudTrail.1] CloudTrail 应启用并配置至少一个多区域跟踪

类别:识别 > 日志记录

严重性:

资源:账户

AWS Config 规则: multi-region-cloudtrail-enabled

参数:

  • readWriteType: ALL

该控制检查是否至少有一个多区域 CloudTrail 跟踪。

AWS CloudTrail 记录您账户的 AWS API 调用并向您发送日志文件。记录的内容包括以下信息。

  • API 调用方的身份

  • API 调用的时间

  • API 调用方的源 IP 地址

  • 请求参数

  • AWS 服务返回的响应元素

CloudTrail 提供账户的 AWS API 调用历史记录,包括从 AWS 管理控制台、 AWS SDKs和命令行工具进行的 API 调用。历史记录还包括来自更高级别 AWS 服务(如 AWS CloudFormation)的 API 调用。

由 AWS 生成的 CloudTrail API 调用历史记录可用于安全分析、资源变更跟踪以及合规性审计。多区域跟踪还提供以下好处。

  • 多区域跟踪有助于检测在其他本不应使用的区域中发生的意外活动。

  • 多区域跟踪可确保默认情况下为跟踪启用全局服务事件日志记录。全局服务事件日志记录将记录 AWS 全局服务生成的事件。

  • 对于多区域跟踪,所有读取和写入操作的管理事件可确保 CloudTrail 记录 AWS 账户所有资源上的管理操作。

默认情况下,使用 创建的CloudTrail跟踪AWS 管理控制台是多区域跟踪。

Remediation

在 CloudTrail 中创建新的跟踪

  1. https://console.amazonaws.cn/cloudtrail/ 打开 CloudTrail 控制台。

  2. 如果以前未使用过 CloudTrail,请选择 Get Started Now (立即开始使用)

  3. 选择 Trails (跟踪),然后选择 Create trail (创建跟踪)

  4. 输入跟踪的名称。

  5. Storage location (存储位置) 下,执行下列操作之一:

    1. 要为 CloudTrail 日志创建新的 S3 存储桶,对于 Create a new S3 bucket (创建新的 S3 存储桶),请选择 Yes (是),然后输入新 S3 存储桶的名称。

    2. 要使用现有 S3 存储桶,对于 Create a new S3 bucket (创建新 S3 存储桶),请选择 No (否),然后选择要使用的 S3 存储桶。

  6. Additional settings (其他设置) 下,选择 Advanced (高级)。对于 Enable log file validation (启用日志文件验证),选择 Enabled (启用)。

  7. 选择创建

更新 CloudTrail 中的现有跟踪

  1. https://console.amazonaws.cn/cloudtrail/ 打开 CloudTrail 控制台。

  2. 选择 Trails (跟踪)

  3. Name (名称) 列中选择跟踪的名称。

  4. 对于 Management events (管理事件),选择 Edit (编辑)。

  5. 对于 Read/Write events (读写事件),选择 Management events (管理事件)。

  6. API Activity (API 活动) 下,选择 Read (读取) 和 Write (写入)。

[CloudTrail.2] CloudTrail 应启用静态加密

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源:CloudTrail 跟踪

AWS Config 规则: cloud-trail-encryption-enabled

参数:

该控制检查是否将 CloudTrail 配置为使用服务器端加密 (SSE) AWS Key Management Service 客户主密钥 (CMK) 加密。如果定义了 KmsKeyId,则检查通过。

为了增加敏感 CloudTrail 日志文件的安全性,您应使用带有 AWS KMS 托管密钥 (SSE-KMS) 的服务器端加密来对 CloudTrail 日志文件进行静态加密。请注意,默认情况下,CloudTrail 提交到您存储桶的日志文件是用 Amazon S3 托管加密密钥 (SSE-S3) 通过 Amazon 服务器端加密进行加密的

Remediation

为 CloudTrail 日志启用加密

  1. https://console.amazonaws.cn/cloudtrail/ 打开 CloudTrail 控制台。

  2. 选择 Trails (跟踪)

  3. 选择要更新的跟踪。

  4. General details (常规详细信息) 下,选择 Edit (编辑)。

  5. 对于 Log file SSE-KMS encryption (日志文件 SSE-KMS 加密),选择 Enabled (已启用)。

  6. 对于 Create a new KMS key (创建新的 KMS 密钥),执行以下操作之一:

    • 要创建密钥,请选择 New (新建)。然后,在AWS KMS别名中输入密钥的别名。密钥是在与 S3 存储桶相同的区域中创建的。

    • 要使用现有密钥,请选择 Existing (现有),然后从AWS KMS别名中选择密钥。

      AWS KMS 密钥和 S3 存储桶必须位于同一区域。

  7. 选择 Save

    您可能需要修改 CloudTrail 的策略才能成功与 CMK 进行交互。有关更多信息,请参阅 中的使用 托管密钥 (SSE-KMS)CloudTrail AWS KMS AWS CloudTrail User Guide加密 日志文件。

[CodeBuild.1] CodeBuild GitHub 或 Bitbucket 源存储库 URL 应使用 OAuth

类别:保护 > 安全开发

严重性:严重

资源:CodeBuild 项目

AWS Config 规则: codebuild-project-source-repo-url-check

参数:

该控制检查 GitHub 或 Bitbucket 源存储库 URL 是否包含个人访问令牌或用户名和密码。

注意

以下区域不支持此控制。

  • 非洲(开普敦)

  • 欧洲(米兰)

  • AWS GovCloud(美国东部)

  • AWS GovCloud (US-West)

身份验证凭证绝不应以明文方式存储或传输,也不应显示在存储库 URL 中。您应该使用 OAuth 授予权限以访问 GitHub 或 Bitbucket 存储库,而不是使用个人访问令牌或用户名和密码。使用个人访问令牌或用户名和密码可能会导致您的凭证遭受意外的数据暴露和未经授权的访问。

Remediation

从 CodeBuild 项目源中删除基本身份验证/(GitHub) 个人访问令牌

  1. 通过以下网址打开 CodeBuild 控制台:https://console.amazonaws.cn/codebuild/

  2. 选择包含个人访问令牌或用户名和密码的构建项目。

  3. Edit (编辑) 中,选择 Source (源)

  4. 选择 Disconnect from GitHub / Bitbucket (从 GitHub/Bitbucket 断开连接)

  5. 选择 Connect using OAuth (使用 OAuth 连接),然后选择 Connect to GitHub / Bitbucket (连接到 GitHub/Bitbucket)

  6. 出现提示时,选择 authorize as appropriate (相应授权)

  7. 根据需要,重新配置存储库 URL 和其他配置设置。

  8. 选择 Update source (更新源)

有关更多信息,请参阅 中的基于CodeBuild使用案例的示例AWS CodeBuild 用户指南

[CodeBuild.2] CodeBuild 项目环境变量不应包含明文凭证

类别:保护 > 安全开发

严重性:严重

资源:CodeBuild 项目

AWS Config 规则: codebuild-project-envvar-awscred-check

参数:

该控制检查项目是否包含环境变量 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY

身份验证凭证 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 决不能以明文方式存储,因为这可能会导致意外的数据暴露和未经授权的访问。

注意

以下区域不支持此控制。

  • 非洲(开普敦)

  • 欧洲(米兰)

  • AWS GovCloud(美国东部)

  • AWS GovCloud (US-West)

Remediation

删除环境变量

  1. 通过以下网址打开 CodeBuild 控制台:https://console.amazonaws.cn/codebuild/

  2. 展开 Build (构建)

  3. 选择 Build project (构建项目),然后选择包含明文凭证的构建项目。

  4. Edit (编辑) 中,选择 Environment (环境)

  5. 展开 Additional configuration (其他配置)

  6. 选择环境变量旁边的 Remove (删除)

  7. 选择 Update environment (更新环境)

将敏感值存储在 Amazon EC2 Systems Manager Parameter Store 中,然后从构建规范中检索它们

  1. 通过以下网址打开 CodeBuild 控制台:https://console.amazonaws.cn/codebuild/

  2. 展开 Build (构建)

  3. 选择 Build project (构建项目),然后选择包含明文凭证的构建项目。

  4. Edit (编辑) 中,选择 Environment (环境)

  5. 展开 Additional configuration (其他配置),然后滚动到 Environment variables (环境变量)

  6. 按照本教程创建包含敏感数据的 Systems Manager 参数。

  7. 在创建参数后,复制参数名称。

  8. 返回到 CodeBuild 控制台,然后选择 Create environmental variable (创建环境变量)

  9. 输入在构建规范中显示的变量名称。

  10. 对于 Value (值),粘贴参数名称。

  11. 对于 Type (类型),选择 Parameter (参数)

  12. 要删除包含明文凭证的不合规环境变量,请选择 Remove (删除)

  13. 选择 Update environment (更新环境)

有关更多信息,请参阅 中的构建环境中https://docs.amazonaws.cn/codebuild/latest/userguide/build-env-ref-env-vars.html的环境变量AWS CodeBuild 用户指南

[Config.1] 应启用 AWS Config

类别:识别 > 清单

严重性:

资源:账户

AWS Config 规则:

参数:

该控制检查是否已在账户中为本地区域启用了 AWS Config,并记录所有资源。

AWS Config 服务对您账户中支持的 AWS 资源执行配置管理,并向您提供日志文件。记录的信息包括配置项(AWS 资源)、配置项之间的关系以及资源之间的任何配置更改。

Security Hub 建议您在所有区域中启用 AWS Config。AWS 捕获的 AWS Config 配置项历史记录可用于安全分析、资源更改跟踪和合规性审计。

注意

由于 Security Hub 是一项区域性服务,因此,针对此控制执行的检查仅检查账户的当前区域。它不会检查所有区域。

要允许针对每个区域中的全局资源进行安全检查,您还必须记录全局资源。如果您仅在一个区域中记录全局资源,则可以在所有区域(记录全局资源的区域除外)中禁用此控件。

要了解更多信息,请参阅 AWS Config 中的 入门AWS Config Developer Guide

Remediation

配置 AWS Config 设置

  1. 通过以下网址打开 AWS Config 控制台:https://console.amazonaws.cn/config/

  2. 选择要在其中配置 AWS Config 的区域。

  3. 如果您以前未使用过 AWS Config,请选择 Get started (开始使用)

  4. Settings (设置) 页面上,执行以下操作:

    1. Resource types to record (要记录的资源类型) 下,选择 Record all resources supported in this region (记录此区域支持的所有资源)Include global resources (e.g., AWS IAM resources) (包括全局资源(例如 AWS IAM 资源)

    2. Amazon S3 bucket (Amazon S3 存储桶) 下面,指定要使用的存储桶,或者创建存储桶并包括前缀(可选)。

    3. Amazon SNS topic (Amazon SNS 主题) 下面,从您的账户中选择一个 Amazon SNS 主题,或者创建一个主题。有关 的更多信息Amazon SNS,请参阅 Amazon Simple Notification Service 入门指南

    4. AWS Config role 下,选择 Create AWS Config service-linked roleChoose a role from your account,然后选择要使用的角色。

  5. 选择 Next

  6. AWS Config 规则页面上,选择 Skip (跳过)

  7. 选择 Confirm

有关AWS Config从 使用 的更多信息AWS CLI,请参阅 AWS Config 中的启用 AWS Config Developer Guide

您还可以使用 AWS CloudFormation 模板自动执行这一过程。有关更多信息,请参阅 中的 AWS CloudFormation StackSets AWS CloudFormation 用户指南示例模板

[DMS.1] 数据库迁移服务复制实例不应是公有的

严重性:严重

资源: DMS:ReplicationInstance

AWS Config 规则: dms-replication-not-public

参数:

该控制检查AWS DMS复制实例是否为公有。为此,它会检查 PubliclyAccessible 字段的值。

私有复制实例具有您无法在复制网络之外访问的私有 IP 地址。当源数据库和目标数据库位于同一网络中时,复制实例应具有私有 IP 地址。网络还必须使用 VPN、 AWS Direct Connect或 VPC 对等连接连接到复制实例的 VPC。要了解有关公有和私有复制实例的更多信息,请参阅 https://docs.amazonaws.cn/dms/latest/userguide/CHAP_ReplicationInstance.html#CHAP_ReplicationInstance.PublicPrivate 中的AWS Database Migration Service 用户指南公有和私有复制实例

您还应该确保对AWS DMS实例配置的访问仅限于授权用户。为此,请限制用户修改IAM设置和资源AWS DMS的权限。

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

请注意,在创建复制实例后,您无法更改公有访问设置。必须删除并重新创建它。

配置AWS DMS复制实例设置以阻止公有访问

  1. 打开 AWS Database Migration Service 控制台 (https://console.amazonaws.cn/dms/)。

  2. 导航到 Replication instances (复制实例),然后删除公有实例。选择实例,选择 Actions (操作),然后选择 delete (删除)。

  3. 选择创建复制实例。提供配置详细信息。

  4. 要禁用公有访问,请确保未选择 Publicly accessible (公开访问)。

  5. 选择创建

有关更多信息,请参阅 中有关创建复制实例AWS Database Migration Service 用户指南的部分

[DynamoDB.1] DynamoDB 表应自动根据需要扩展容量

类别:恢复 > 弹性 > 高可用性

严重性:

资源:

AWS Config 规则: dynamodb-autoscaling-enabled

参数:

该控制检查 Amazon DynamoDB 表是否可以根据需要扩展其读取和写入容量。如果表使用按需容量模式或配置了 Auto Scaling 的预置模式,则此控制通过。利用需求扩展容量可避免限制异常,这有助于保持应用程序的可用性。

DynamoDB 按需容量模式下的 表仅受DynamoDB吞吐量默认表配额的限制。要提高这些配额,您可以通过 https://aws.amazon.com/support 提交支持票证。

DynamoDB 具有 Auto Scaling 的预置模式下的 表根据流量模式动态调整预置的吞吐容量。有关DynamoDB请求限制的其他信息,请参阅 https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/ProvisionedThroughput.html#ProvisionedThroughput.Throttling 中的Amazon DynamoDB 开发人员指南请求限制和突增容量

注意

AWS GovCloud(美国东部) 或 AWS GovCloud (US-West) 中不支持该控制。

Remediation

有关在容量模式下对现有表启用 DynamoDB 自动扩展的https://docs.amazonaws.cn/amazondynamodb/latest/developerguide/AutoScaling.Console.html#AutoScaling.Console.ExistingTable详细说明,请参阅 中的对现有表Amazon DynamoDB 开发人员指南启用 DynamoDB 自动扩展。

[DynamoDB.2] DynamoDB 表应启用时间点恢复

类别:恢复 > 弹性 > 启用备份

严重性:

资源:

AWS Config 规则: dynamodb-pitr-enabled

参数:

该控制检查是否为 Amazon DynamoDB 表启用了时间点恢复 (PITR)。

备份可帮助您更快地从安全事件中恢复。它们还增强了系统的恢复能力。 DynamoDB 时间点恢复可自动执行 DynamoDB 表的备份。它缩短了从意外删除或写入操作中恢复的时间。启用了 PITR 的 DynamoDB 表可以还原到过去 35 天内的任何时间点。

Remediation

为现有表启用DynamoDB时间点恢复

  1. 通过以下网址打开 DynamoDB 控制台:https://console.amazonaws.cn/dynamodb/

  2. 选择要使用的表,然后选择 Backups (备份)。

  3. 时间点恢复部分的状态下,选择启用

  4. 再次选择 Enable (启用) 以确认更改。

[DynamoDB.3] DynamoDB Accelerator (DAX) 集群应进行静态加密

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源:集群

AWS Config 规则: dax_encryption_enabled

参数:

该控制检查 DAX 集群是否进行了静态加密。

静态加密数据可降低存储在磁盘上的数据被未通过 身份验证的用户访问的风险AWS。加密添加了另一组访问控制,以限制未经授权的用户访问数据的能力。例如,需要 API 权限才能解密数据,然后才能读取数据。

Remediation

创建集群后,您无法启用或禁用静态加密。您必须重新创建集群才能启用静态加密。有关如何创建启用了静态加密的 DAX AWS 管理控制台 集群的详细说明,请参阅 Amazon DynamoDB 开发人员指南 中的使用 启用静态加密。

[EC2.1] Amazon EBS 快照不应公开,这取决于所有人都可进行恢复的能力

类别:保护 > 安全网络配置

严重性:严重

资源:账户

AWS Config 规则: ebs-snapshot-public-restorable-check

参数:

该控制检查 Amazon Elastic Block Store 快照是否未公开,因为这取决于任何人都可以进行还原的能力。

EBS 快照用于在特定时间点将 EBS 卷上的数据备份到 Amazon S3。您可以使用快照还原 EBS 卷的先前状态。与公众共享快照几乎是不允许的。通常,公开共享快照的决定要么是决策错误,要么是没有完全理解其含义。此检查有助于确保所有此类共享都是完全经过规划并且是有意进行的。

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

将公有 EBS 快照变为私有快照

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中的 Elastic Block Store 下,选择 Snapshots 菜单,然后选择您的公有快照。

  3. Actions (操作) 中,选择 Modify permissions (修改权限)

  4. 选择 Private (私有)

  5. (可选)添加授权账户的AWS账号以与之共享您的快照,然后选择 Add Permission (添加权限)。

  6. 选择 Save

[EC2.2] VPC 默认安全组不应允许入站和出站流量

类别:保护 > 安全网络配置

严重性:

资源:EC2 安全组

AWS Config 规则: vpc-default-security-group-closed

参数:

该控制检查 VPC 的默认安全组是否不允许入站或出站流量。

默认安全组的规则允许来自分配给相同安全组的网络接口(及其关联实例)的所有出站和入站流量。

我们不建议使用默认安全组。由于无法删除默认安全组,因此您应更改默认安全组规则设置以限制入站和出站流量。如果意外为 EC2 实例等资源配置了默认安全组,这可以防止意外的流量。

Remediation

要修复此问题,请创建新的安全组并将这些安全组分配给您的资源。要防止使用默认安全组,请删除其入站和出站规则。

创建新的安全组并将其分配给您的资源

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Security groups (安全组)。查看默认安全组详细信息以了解分配给它们的资源。

  3. 为资源创建一组最小权限安全组。有关如何创建安全组的详细信息,请参阅 中的https://docs.amazonaws.cn/vpc/latest/userguide/VPC_SecurityGroups.html#CreatingSecurityGroups创建安全组Amazon VPC 用户指南

  4. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  5. 在 Amazon EC2 控制台上,将使用默认安全组的资源的安全组更改为您创建的最小权限安全组。请参阅 中的https://docs.amazonaws.cn/vpc/latest/userguide/VPC_SecurityGroups.html#SG_Changing_Group_Membership更改实例的安全组Amazon VPC 用户指南

将新安全组分配给资源后,请从默认安全组中删除入站和出站规则。这可确保不使用默认安全组。

从默认安全组中删除规则

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择 Security groups (安全组)

  3. 选择默认安全组,然后选择入站规则选项卡。选择 Edit inbound rules (编辑入站规则)。然后,删除所有入站规则。选择 Save rules (保存规则)

  4. 对每个默认安全组重复上一步。

  5. 选择默认安全组,然后选择 Outbound rule (出站规则) 选项卡。选择 Edit outbound rules (编辑出站规则)。然后删除所有出站规则。选择 Save rules (保存规则)

  6. 对每个默认安全组重复上一步。

有关更多信息,请参阅 中的https://docs.amazonaws.cn/vpc/latest/userguide/VPC_SecurityGroups.html#WorkingWithSecurityGroups使用安全组Amazon VPC 用户指南

[EC2.3] 挂载的 EBS 卷应进行静态加密

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源:EC2 卷

AWS Config 规则: encrypted-volumes

参数:

该控制检查处于连接状态的 EBS 卷是否已加密。要通过此检查,EBS 卷必须处于使用中并加密。如果 EBS 卷未挂载,则不需要接受此检查。

为了增加 EBS 卷中敏感数据的安全性,您应启用 EBS 静态加密。Amazon EBS 加密提供了直接用于 EBS 资源的加密解决方案,无需您构建、维护和保护自己的密钥管理基础设施。它在创建加密卷和快照时使用 AWS KMS 客户主密钥 (CMK)。

要了解有关Amazon EBS加密的更多信息,请参阅 Amazon EBS 中的Amazon EC2 用户指南(适用于 Linux 实例)加密

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

没有直接对现有未加密卷或快照进行加密的方法。您只能在新的卷或快照创建时对其进行加密。

如果您启用了默认加密,Amazon EBS 使用您用于 Amazon EBS 加密的默认密钥对生成的新卷或快照实施加密。即使您未启用默认加密,也可以在创建单个卷或快照时启用加密。在这两种情况下,您可以覆盖默认 Amazon EBS 加密的密钥并选择对称客户托管 CMK。

有关更多信息,请参阅 中的Amazon EBS创建 和Amazon EBS复制 快照Amazon EC2 用户指南(适用于 Linux 实例)

[EC2] 停止的 EC2 实例应在指定时间段后删除

类别:识别 > 清单

严重性:

资源EC2 实例

AWS Config 规则: ec2-stopped-instance

参数:

  • allowedDays: 30

该控制检查是否有任何 EC2 实例的停止时间超过了允许的天数。如果 EC2 实例的停止时间超过了允许的最大时间段(默认情况下为 30 天),则该实例将无法通过此检查。

失败的调查结果指示 EC2 实例在很长一段时间内未运行。这将产生安全风险,因为 EC2 实例未得到主动维护(已分析、修补、更新)。如果它稍后启动,则缺少适当的维护可能会导致您的AWS环境中出现意外问题。要随着时间的推移将 EC2 实例安全地保持非运行状态,请定期启动该实例进行维护,然后在维护后停止该实例。理想情况下,这是一个自动化的过程。

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

您可以使用 控制台或命令行终止 EC2 实例。

在终止 EC2 实例之前,请确认您不会丢失任何数据:

  • 检查您的 Amazon EBS 卷在终止时是否不会被删除。

  • 将所需的任何数据从 EC2 实例存储卷复制到 Amazon EBS 或 Amazon S3。

终止 EC2 实例(控制台)

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中的 Instances 下,选择 Instances

  3. 选择实例,然后依次选择 Actions (操作)、Instance State (实例状态) 和 Terminate (终止)。

  4. 当系统提示您确认时,选择 Yes, Terminate

终止 EC2 实例AWS CLI(、Windows PowerShell 工具)

使用以下命令之一。有关 命令行界面的更多信息,请参阅 Amazon EC2 中的访问 Amazon EC2 用户指南(适用于 Linux 实例)

要了解有关终止实例的更多信息,请参阅 中的https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/terminating-instances.html#terminating-instances-console终止实例Amazon EC2 用户指南(适用于 Linux 实例)

[EC2] 应在所有 VPC 中启用 VPCs流日志记录

类别:识别 > 日志记录

严重性:

资源EC2 VPC

AWS Config 规则: vpc-flow-logs-enabled

参数:

  • trafficType: REJECT

该控制检查是否为 VPCs 找到并启用Amazon VPC流日志。流量类型设置为 Reject

使用 VPC 流日志功能,您可以捕获有关在您的 VPC 中传入和传出网络接口的 IP 地址流量的信息。创建流日志后,您可以在 CloudWatch 日志中查看和检索其数据。为了降低成本,您还可以将流日志发送到 Amazon S3。

Security Hub 建议您为 VPCs 的数据包拒绝启用流日志记录。流日志提供对穿过 VPC 的网络流量的可见性,并可在安全工作流期间检测异常流量或提供见解。

默认情况下,记录包含 IP 地址流的不同组件的值,包括源、目标和协议。有关日志字段的更多信息和描述,请参阅 中的 VPC Amazon VPC 用户指南流日志

Remediation

要修复此问题,请启用 VPC 流日志记录。

启用 VPC 流日志记录

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. Virtual Private Cloud 下,选择 Your VPCs

  3. 选择要更新的 VPC。

  4. 在页面底部,选择 Flow Logs (流日志)。

  5. 选择 Create flow log (创建流日志)

  6. 对于 Filter (筛选条件),选择 Reject (拒绝)

  7. 对于 Destination log group (目标日志组),选择要使用的日志组。

  8. 对于 IAM role (IAM 角色),选择要使用的 IAM 角色。

  9. 选择创建

[EC2] 应启用 EBS 默认加密

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源类型:AWSAccount

AWS Config 规则: ec2-ebs-encryption-by-default

参数:

该控制检查默认情况下是否为 Amazon Elastic Block Store() Amazon EBS启用账户级加密。如果未启用账户级别加密,则控制将失败。

为您的账户启用加密后,Amazon EBS卷和快照副本将进行静态加密。这将为您的数据增加一层额外的保护。有关更多信息,请参阅 中的默认加密Amazon EC2 用户指南(适用于 Linux 实例)

请注意,以下实例类型不支持加密R1、C1和 M1。

Remediation

您可以使用 Amazon EC2 控制台为 Amazon EBS 卷启用默认加密。

为区域的加密配置默认Amazon EBS加密

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 从导航窗格中,选择 EC2 控制面板

  3. 在页面的右上角,依次选择 Account Attributes (账户属性) 和 EBS encryption (EBS 加密)。

  4. 选择管理

  5. 选择 Enable (启用)。您可以将具有代表您AWS创建的别名的 alias/aws/ebs 托管 CMK 保留为默认加密密钥,或选择对称的客户托管 CMK。

  6. 选择更新 EBS 加密

[EC2] EC2 实例应使用 IMDSv2

类别:保护 > 网络安全性

严重性:

资源类型EC2 实例

AWS Config 规则: ec2-imdsv2-check

参数:

该控制检查您的 EC2 实例元数据版本是否配置了实例元数据服务版本 2 (IMDSv2 如果 IMDSv2 设置为必需HttpTokens,则控制传递。如果 设置为 HttpTokens ,则控制将失败optional

您可以使用实例元数据配置或管理正在运行的实例。IMDS 提供对临时且经常轮换的凭证的访问权限。这些凭证使您无需手动或以编程方式硬编码或向实例分发敏感凭证。IMDS 在本地附加到每个 EC2 实例。它在特殊的“链接本地”IP 地址 169.254.169.254 上运行。此 IP 地址只能由在实例上运行的软件访问。

IMDS 版本 2 为以下类型的漏洞添加了新的保护。这些漏洞可用于尝试访问 IMDS。

  • 打开网站应用程序防火墙

  • 打开反向代理

  • 服务器端请求伪造 (SSRF) 漏洞

  • 打开第 3 层防火墙和网络地址转换 (NAT)

Security Hub 建议您使用 IMDSv2 配置 EC2 实例。

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

要修复未配置 IMDSv2 的 EC2 实例,您可以要求使用 IMDSv2。

如需在现有实例上要求 IMDSv2请在请求实例元数据时修改Amazon EC2元数据选项。按照 中为现有实例配置实例元数据选项中的说明操作Amazon EC2 用户指南(适用于 Linux 实例)

要在启动新实例时要求在新实例上使用 IMDSv2请按照 中为新实例https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html配置实例元数据选项中的说明操作Amazon EC2 用户指南(适用于 Linux 实例)

从 控制台使用 IMDSv2 配置新 EC2 实例

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 选择 Launch instance (启动实例),然后选择 Launch instance (启动实例)。

  3. Configure Instance Details (配置实例详细信息) 步骤中,在 Advanced Details (高级详细信息下,对于 Metadata version (元数据版本),选择 V2需要令牌)。

  4. 选择 Review and Launch

如果您的软件使用 IMDSv1您可以重新配置软件以使用 IMDSv2。有关详细信息,请参阅 中的https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html#instance-metadata-transition-to-version-2转换到使用实例元数据服务版本 Amazon EC2 用户指南(适用于 Linux 实例)2。

[EC2] EC2 实例不应具有公有 IP 地址

类别:保护 > 安全网络配置 > 公有 IP 地址

严重性:

资源:EC2 实例

AWS Config 规则: ec2-instance-no-public-ip

参数:

该控制检查 EC2 实例是否具有公有 IP 地址。如果 publicIp 字段存在于 EC2 实例配置项中,则控制将失败。该控制仅适用于 IPv4 地址。

公有 IPv4 地址是可从 Internet 访问的 IP 地址。如果您使用公有 IP 地址启动实例,则可从 Internet 访问 EC2 实例。私有 IPv4 地址是无法从 Internet 访问的 IP 地址。您可以使用私有 IPv4 地址在同一 VPC 或已连接的私有网络中的 EC2 实例之间进行通信。

IPv6 地址是全球唯一的,因此可从 Internet 访问。但是,默认情况下,所有子网的 IPv6 寻址属性都设置为 false。有关 IPv6 的更多信息,请参阅 中的 VPC Amazon VPC 用户指南中的 IP 寻址。

如果您有合法的使用案例来维护具有公有 IP 地址的 EC2 实例,则可以禁止此控制中的结果。有关前端架构选项的更多信息,请参阅 AWS 架构博客This Is My Architecture 系列

Remediation

使用非默认 VPC,以便在默认情况下不为您的实例分配公有 IP 地址。

当您在默认 VPC 中启动 EC2 实例时,系统会为其分配一个公有 IP 地址。当您在非默认 VPC 中启动 EC2 实例时,子网配置将确定它是否接收公有 IP 地址。子网具有 属性,用于确定子网中的新 EC2 实例是否从公有 IPv4 地址池接收公有 IP 地址。

您不能手动将自动分配的公有 IP 地址与 EC2 实例关联或取消关联。要控制您的 EC2 实例是否接收公有 IP 地址,请执行以下操作之一:

  • 修改子网的公有 IP 寻址属性。有关更多信息,请参阅 Amazon VPC 用户指南 中的修改子网的公有 IPv4 寻址属性

  • 在启动期间启用或禁用公有 IP 寻址功能。这将覆盖子网的公有 IP 寻址属性。有关更多信息,请参阅 中的在实例启动期间分配公有 IPv4 地址Amazon EC2 用户指南(适用于 Linux 实例)

有关更多信息,请参阅 中的公有 IPv4 地址和外部 DNS Amazon EC2 用户指南(适用于 Linux 实例)主机名

如果您的 EC2 实例与弹性 IP 地址关联,则可从 Internet 访问 EC2 实例。您可以随时取消弹性 IP 地址与实例或网络接口的关联。

撤销弹性 IP 地址的关联

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Elastic IPs

  3. 选择要取消关联的弹性 IP 地址。

  4. Actions (操作) 中,选择 Disassociate Elastic IP address (取消关联弹性 IP 地址)。

  5. 选择取消关联

[EC2] Amazon EC2 应配置为使用 VPC 终端节点

类别:保护 – 安全网络配置 > API 私有访问

严重性:

资源EC2 VPC

AWS Config 规则: service-vpc-endpoint-enabled

参数:

  • serviceName: ec2

该控制检查是否为每个 VPC Amazon EC2 创建了 的服务终端节点。如果 VPC 没有为Amazon EC2服务创建 VPC 终端节点,则控制将失败。

要改善 VPC 的安全状况,您可以将 Amazon EC2 配置为使用接口 VPC 终端节点。接口终端节点由 提供支持AWS PrivateLink,该技术使您能够私下访问 Amazon EC2 APIs。它将 VPC 和 之间的所有网络流量限制Amazon EC2在 Amazon 网络以内。由于终端节点仅在相同区域中受支持,您无法在 VPC 和不同区域中的服务之间创建终端节点。这可防止对其他区域的意外 Amazon EC2 API 调用。

要了解有关为 创建 VPC 终端节点的更多信息Amazon EC2,请参阅 中的 Amazon EC2 和接口 VPC Amazon EC2 用户指南(适用于 Linux 实例) 终端节点。

Remediation

Amazon EC2 从控制台创建连接到 的接口终端节点 Amazon VPC

  1. 打开 Amazon VPC 控制台 https://console.amazonaws.cn/vpc/

  2. 在导航窗格中,选择终端节点

  3. 选择 Create Endpoint

  4. 对于 Service category (服务类别),选择 AWS services (服务)。

  5. 对于 Service Name (服务名称),选择 com.amazonaws.<region>.ec2

  6. 对于 Type (类型),选择 Interface (接口)。

  7. 填写以下信息。

    1. 对于 VPC,选择要在其中创建终端节点的 VPC。

    2. 对于 Subnets,选择要在其中创建终端节点网络接口的子网 (可用区)。并非所有可用区都支持所有 AWS 服务。

    3. 要为接口终端节点启用私有 DNS,请选中 Enable DNS Name (启用 DNS 名称) 复选框。默认情况下,此选项处于启用状态。

      要使用私有 DNS 选项,您的 VPC 的以下属性必须设置为 true:

      • enableDnsHostnames

      • enableDnsSupport

      有关更多信息,请参阅 Amazon VPC 用户指南 中的查看和更新您的 VPC 的 DNS 支持

    4. 对于 Security group,选择要与终端节点网络接口关联的安全组。

    5. (可选)添加或删除标签。要添加标签,请选择 Add tag (添加标签),然后执行以下操作:

      • 对于 Key (键),输入标签名称。

      • 对于 Value (值),输入标签值。

    6. 要删除标签,请选择标签 Key (键) 和 Value 值) 右侧的删除按钮 (x)。

  8. 选择Create endpoint

创建接口 VPC 终端节点策略

您可以向 VPC 终端节点附加策略来控制对 Amazon EC2 API 的访问。此策略指定以下内容:

  • 可以执行操作的委托人

  • 可执行的操作

  • 可对其执行操作的资源

有关创建 VPC 终端节点策略的更多详细信息,请参阅 中的 Amazon EC2 和接口 VPC Amazon EC2 用户指南(适用于 Linux 实例)终端节点

[EFS Amazon EFS 应配置为使用 对文件数据进行静态加密 AWS KMS

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源:EFS 文件系统

AWS Config 规则: efs-encrypted-check

参数:

该控制检查是否将 Amazon Elastic File System 配置为使用 AWS KMS 加密文件数据。在以下情况下,检查失败。

请注意,此控制不使用 KmsKeyId efs-encrypted-check 参数。它只检查 Encrypted 的值。

为了增加 Amazon EFS 中敏感数据的安全性,您应创建加密的文件系统。Amazon EFS 支持对静态文件系统进行加密。您可以在创建 Amazon EFS 文件系统时启用静态数据加密。要了解有关 Amazon EFS 加密的更多信息,请参阅 Amazon EFS 中的 中的数据加密Amazon Elastic File System 用户指南

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

有关如何加密新Amazon EFS文件系统的详细信息,请参阅 中的https://docs.amazonaws.cn/efs/latest/ug/encryption-at-rest.html加密静态数据Amazon Elastic File System 用户指南

[EFS Amazon EFS 卷应位于备份计划中

类别:恢复 > 弹性 > 备份

严重性:

资源类型EFS FileSystem

AWS Config 规则: efs_in_backup_plan

参数:

该控制检查 (Amazon Elastic File System) 文件系统是否已Amazon EFS添加到 中的备份计划AWS Backup。如果备份计划中不包含Amazon EFS文件系统,则控制将失败。

在备份计划中包含 EFS 文件系统可帮助您保护您的数据,防止删除和数据丢失。

注意

以下区域不支持此控制:

  • 非洲(开普敦)

  • 欧洲(米兰)

  • AWS GovCloud(美国东部)

  • AWS GovCloud (US-West)

Remediation

为现有文件系统启用自动备份

  1. 通过 https://console.amazonaws.cn/efs/ 打开 Amazon Elastic File System 控制台。

  2. File systems (文件系统) 页面上,选择要为其启用自动备份的文件系统。

    此时将显示 File system details (文件系统详细信息) 页面。

  3. General (常规) 下,选择 Edit (编辑)。

  4. 要启用自动备份,请选择 Enable automatic backups (启用自动备份)。

  5. 选择保存更改

要了解更多信息,请参阅 AWS Backup 中的Amazon EFS将 Amazon Elastic File System 用户指南 与 结合使用。

[ELB.3] 传统 Load Balancer 侦听器应配置 HTTPS 或 TLS 终止

类别:保护 > 数据保护 > 传输中的数据加密

严重性:

资源:ELB 负载均衡器

AWS Config 规则: elb_tls_https_listeners_only

参数:

该控制检查是否为 Classic Load Balancer 侦听器配置了前端(客户端到负载均衡器)连接的 HTTPS 或 TLS 协议。如果 Classic Load Balancer 具有侦听器,则此控制适用。如果您的 Classic Load Balancer 未配置侦听器,则控件不会报告任何结果。

如果为前端连接配置了 Classic Load Balancer 侦听器 TLS 或 HTTPS,则控制传递。

如果未为前端连接配置 TLS 或 HTTPS,则控制将失败。

在开始使用负载均衡器之前,您必须添加一个或多个侦听器。侦听器是使用配置的协议和端口检查连接请求的进程。侦听器可以同时支持 HTTP 和 HTTPS/TLS 协议。您应始终使用 HTTPS 或 TLS 侦听器,以便负载均衡器在传输过程中执行加密和解密工作。

Remediation

将所有不合规侦听器更改为 TLS/HTTP 侦听器

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Load Balancers。然后选择 Classic Load Balancer 。

  3. 选择 Listeners (侦听器) 选项卡,然后选择 Edit (编辑)。

  4. 对于 Load Balancer 协议未设置为 HTTPS 或 SSL 的所有侦听器,请将该设置更改为 HTTPS 或 SSL。

  5. 对于所有修改后的侦听器,在 SSL Certificate (SSL 证书) 下,选择 Change (更改)。

  6. 对于所有修改后的侦听器,选择 Choose a certificate from ACM (从 ACM 中选择证书)。

  7. 从 Certificates (证书) 下拉列表中选择证书。然后选择 Save (保存)

  8. 更新所有侦听器后,选择 Save (保存)。

[ELB.4] 应用程序负载均衡器应配置为删除 HTTP 标头

类别:保护 > 网络安全性

严重性:

资源类型:ELB 负载均衡器

AWS Config 规则: alb_http_drop_invalid_header_enabled

参数:

该控制评估 AWS Application Load Balancer (ALB) 以确保它们配置为删除无效的 HTTP 标头。如果 的值routing.http.drop_invalid_header_fields.enabled设置为 ,则控制失败false

默认情况下ALBs配置为删除无效的 HTTP 标头值。删除这些标头值可防止 HTTP 异步攻击。

注意

以下区域不支持此控制:

  • 非洲(开普敦)

  • 亚太区域 (大阪当地)

  • 欧洲(米兰)

Remediation

配置负载均衡器以删除无效标头字段

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Load Balancers (负载均衡器)

  3. 选择 Application Application Load Balancer 。

  4. Actions (操作) 中,选择 Edit attributes (编辑属性)。

  5. Drop Invalid Header Fields (删除无效标头字段) 下,选择 Enable (启用)。

  6. 选择 Save

[ELB.5] 应启用应用程序和 Classic Load Balancer 日志记录

类别:日志记录

严重性:

资源:ELB 负载均衡器

AWS Config 规则: elb-logging-enabled

参数:

该控制检查 Application Application Load Balancer 和 Classic Load Balancer 是否已启用日志记录。如果 access_logs.s3.enabled 为 ,则控制失败false

Elastic Load Balancing 提供了访问日志,该访问日志可捕获有关发送到负载均衡器的请求的详细信息。每个日志都包含信息 (例如,收到请求的时间、客户端的 IP 地址、延迟、请求路径和服务器响应)。您可以使用这些访问日志分析流量模式并解决问题。

要了解更多信息,请参阅 中的 Classic Load Balancer Classic Load Balancer 用户指南的访问日志。

Remediation

启用访问日志

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Load Balancers (负载均衡器)

  3. 选择 Application Application Load Balancer 。

  4. Actions (操作) 中,选择 Edit attributes (编辑属性)。

  5. Access logs (访问日志) 下,选择 Enable (启用)。

  6. 输入您的 S3 位置。此位置可以存在,也可以为您创建。如果未指定前缀,访问日志将存储在 S3 存储桶的根目录中。

  7. 选择 Save

[ELB.6] 应启用 Application Application Load Balancer 删除保护

类别:恢复 > 弹性 > 高可用性

严重性:

资源:Elbv2 负载均衡器

AWS Config 规则: elb-deletion-protection-enabled

参数:

该控制检查 Application Application Load Balancer 是否启用了删除保护。如果未配置删除保护,则控制失败。

启用删除保护可保护您的 Application Application Load Balancer 免遭删除。

Remediation

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

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

从 控制台启用删除保护

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Load Balancers

  3. 选择负载均衡器。

  4. Description 选项卡上,选择 Edit attributes

  5. Edit load balancer attributes (编辑负载均衡器属性) 页面上,为 Delete Protection (删除保护) 选择 Enable (启用),然后选择 Save (保存)。

  6. 选择 Save

要了解更多信息,请参阅 https://docs.amazonaws.cn/elasticloadbalancing/latest/application/application-load-balancers.html#deletion-protection 中的Application Load Balancer 用户指南删除保护

[ELBV2.1] 应用程序负载均衡器 应配置为将所有 HTTP 请求重定向到 HTTPS

类别:保护 > 数据保护 > 传输中数据加密

严重性:

资源:Elbv2 负载均衡器

AWS Config 规则: alb-http-to-https-redirection-check

参数:

该控制检查是否在 Application Load Balancer 的所有 HTTP 侦听器上都配置了 HTTP 到 HTTPS 重定向。如果 Application Load Balancer 的一个或多个 HTTP 侦听器未配置 HTTP 到 HTTPS 重定向,则检查失败。

在开始使用 应用程序负载均衡器 之前,您必须添加一个或多个侦听器。侦听器是使用配置的协议和端口检查连接请求的进程。侦听器支持 HTTP 和 HTTPS 协议。您可以使用 HTTPS 侦听器将加密和解密工作分载到您的 应用程序负载均衡器。您应将 应用程序负载均衡器 与重定向操作结合使用,将客户端 HTTP 请求重定向到端口 443 上的 HTTPS 请求,以强制执行传输中加密。

要了解更多信息,请参阅 Application Load Balancer 中您的的侦听器Application Load Balancer 用户指南

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

将 HTTP 请求重定向到 应用程序负载均衡器 上的 HTTPS

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Load Balancers (负载均衡器)

  3. Choose an 应用程序负载均衡器.

  4. 选择 Listeners (侦听器) 选项卡。

  5. 选择一个 HTTP 侦听器(端口 80 TCP),然后选择 Edit (编辑)

  6. 如果存在现有规则,则必须将其删除。否则,选择 Add action (添加操作),然后选择 Redirect to... (重定向到...)

  7. 选择 HTTPS,然后输入 443

  8. 选择圆形符号中的复选标记,然后选择 Update (更新)

[EMR.1] Amazon EMR 集群主节点不应具有公有 IP 地址

类别:保护 > 安全网络配置

严重性:

资源类型: EMR:Cluster

AWS Config 规则: emr-master-no-public-ip

参数:

该控制检查Amazon EMR集群上的主节点是否具有公有 IP 地址。

如果主节点具有与其任何实例关联的公有 IP 地址,则控制将失败。公有 IP 地址在实例PublicIp配置的 NetworkInterfaces 字段中指定。该控制仅检查处于 Amazon EMR 或 RUNNING 状态的WAITING集群。

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

在启动期间,您可以控制是向默认子网还是非默认子网中的实例分配公有 IPv4 地址。

默认情况下,默认子网的此属性设置为 true。非默认子网的 IPv4 公有寻址属性设置为 false,除非它是由Amazon EC2启动实例向导创建的。在这种情况下,向导会将 属性设置为 true

您需要在具有私有子网的 VPC 中启动集群,该子网的 IPv4 公有寻址属性设置为 false

启动后,您无法手动取消公有 IPv4 地址与实例的关联。

要修复此结果,您需要在 VPC 私有子网中创建新的 集群。有关如何在 VPC 私有子网中启动 中的集群的信息,请参阅 中的在 VPC 中Amazon EMR 管理指南启动集群。

[ES.1] Elasticsearch 域应启用静态加密

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源:Elasticsearch 域

AWS Config 规则: elasticsearch-encrypted-at-rest

参数:

该控制检查 Amazon Elasticsearch Service (Amazon ES) 域是否启用了静态加密配置。如果未启用静态加密,检查将失败。

为了增加 Elasticsearch 中敏感数据的安全性,您应将 Elasticsearch 配置为静态加密。Elasticsearch 域提供静态数据加密。该功能使用 AWS KMS 存储和管理您的加密密钥。为执行加密,它使用具有 256 位密钥 (AES-256) 的高级加密标准算法。

要了解有关静态Elasticsearch加密的更多信息,请参阅 Amazon Elasticsearch Service 中的 的静态数据加密Amazon Elasticsearch Service 开发人员指南

注意

某些实例类型(例如 t.small 和 t.medium)不支持静态数据加密。有关详细信息,请参阅 中的https://docs.amazonaws.cn/elasticsearch-service/latest/developerguide/aes-supported-instance-types.html支持的实例类型Amazon Elasticsearch Service 开发人员指南

Remediation

默认情况下,域不对数据进行静态加密,并且您无法配置现有的域以使用该功能。

要启用该功能,您必须创建另一个域并迁移数据。有关创建域的信息,请参阅 Amazon Elasticsearch Service 开发人员指南

数据静态加密需要使用 Amazon ES 5.1 或更高版本。有关对 Amazon ES 数据进行静态加密的更多信息,请参阅 Amazon Elasticsearch Service 开发人员指南

[ES.2] Amazon Elasticsearch Service 域应位于 VPC 中

类别:保护 > 安全网络配置 > VPC 内的资源

严重性:严重

资源类型:Elasticsearch域

AWS Config 规则: elasticsearch-in-vpc-only

参数:

该控制检查 Amazon Elasticsearch Service 域是否位于 VPC 中。它不会评估 VPC 子网路由配置以确定公有访问。您应该确保 Amazon ES 域未连接到公有子网。请参阅 中的基于资源的策略Amazon Elasticsearch Service 开发人员指南。您还应该确保根据建议的最佳实践配置了 VPC。请参阅 中的您的 VPC Amazon VPC 用户指南的安全最佳实践。

Amazon ES 在 VPC 中部署的 域可以通过私有AWS网络与 VPC 资源进行通信,而无需遍历公共 Internet。此配置通过限制对传输中的数据的访问来增强安全状况。VPCs大量网络控制以保护对 Amazon ES 域的访问,包括网络 ACL 和安全组。 Security Hub 建议您将公有Amazon ES域迁移到 VPCs以利用这些控制。

Remediation

如果您创建一个具有公有终端节点的域,则以后无法将其放置在 VPC 中。您必须创建一个新的域,然后迁移数据。反之亦然。如果在 VPC 中创建一个域,则该域不能具有公有终端节点。您必须创建另一个域或禁用该控制。

请参阅 中的从公有访问迁移到 VPC 访问Amazon Elasticsearch Service 开发人员指南

[ES.3] Amazon Elasticsearch Service 域应加密在节点之间发送的数据

类别:保护 > 数据保护 > 传输中数据加密

严重性:

资源类型:Elasticsearch域

AWS Config 规则: elasticsearch-node-to-node-encryption-check

参数:

该控制检查 Amazon ES 域是否启用了节点到节点加密。

HTTPS (TLS) 可用于帮助防止潜在攻击者使用中间人攻击或类似攻击来窃听或操纵网络流量。只允许通过 HTTPS (TLS) 的加密连接。为 Amazon ES 域启用节点到节点加密可确保集群内通信在传输过程中加密。

此配置可能会造成性能损失。在启用此选项之前,您应该了解并测试性能权衡。

注意

以下区域不支持此控制:

  • 非洲(开普敦)

  • 中国(北京)

  • 中国 (宁夏)

  • 欧洲(米兰)

Remediation

只能在新域上启用节点到节点加密。要修复此结果,请先创建一个新域并选中 Node-to-node encryption (节点到节点加密) 复选框。然后,按照使用快照迁移数据以将数据迁移到新域。

[GuardDuty.1] 应启用 GuardDuty

类别:检测 > 检测服务

严重性:

资源:账户

AWS Config 规则: guardduty-enabled-centralized

参数:

该控制检查是否在您的 Amazon GuardDuty 账户和区域中启用了 GuardDuty。

强烈建议您在所有受支持的 GuardDuty 区域中启用 AWS。这样做将允许 GuardDuty 生成有关未授权或异常活动的结果,甚至在您未主动使用的区域中也可以。这还将允许 GuardDuty 监控全球性 CloudTrail 服务(如 AWS)的 IAM 事件。

注意

以下区域不支持此控制。

  • 非洲(开普敦)

  • 中国(北京)

  • 中国 (宁夏)

  • 欧洲(米兰)

  • 中东(巴林)

  • AWS GovCloud(美国东部)

Remediation

要修复此问题,请启用 GuardDuty。

有关如何启用 的详细信息GuardDuty,包括如何使用 AWS Organizations 管理多个 账户,请参阅 GuardDuty 中的 入门Amazon GuardDuty 用户指南

[IAM.1] IAM 策略不应允许完全“*”管理权限

类别:保护 > 安全访问管理

严重性:

资源:IAM 策略

AWS Config 规则: iam-policy-no-statements-with-admin-access

参数:

该控制检查 IAM 策略(也称为客户托管策略)的默认版本是否具有管理员访问权限,并且包含带有 "Effect": "Allow" with "Action": "*" over "Resource": "*" 的语句。

该控制仅检查您创建的客户托管策略。它不会检查内联和AWS托管策略。

IAM 策略定义一组授予用户、组或角色的权限。按照标准安全建议,AWS 建议您授予最低特权,这意味着仅授予执行任务所需的权限。当您提供完全管理权限而不是用户所需的最低权限集时,您会将资源暴给可能有害的操作。

首先确定用户需要执行的任务,然后拟定仅限用户执行这些任务的策略,而不是允许完全管理权限。最开始只授予最低权限,然后根据需要授予其他权限,则样会更加安全。请不要一开始就授予过于宽松的权限而后再尝试收紧权限。

您应删除语句中包含 IAMwith "Effect": "Allow" over "Action": "*""Resource": "*" 策略。

Remediation

修改 IAM 策略

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 选择策略

  3. 选择要删除的策略旁边的按钮。

  4. Policy actions (策略操作) 中,选择 Detach (分离)

  5. 对于要分离策略的每个用户,选择用户旁边的按钮,然后选择 Detach policy (分离策略)

确认分离策略后,用户仍可按预期访问 AWS 服务和资源。

[IAM.2] IAM 用户不应附加 IAM 策略

类别:保护 > 安全访问管理

严重性:

资源:IAM 用户

AWS Config 规则: iam-user-no-policies-check

参数:

该控制检查您的所有 IAM 用户均没有附加策略。应改为 IAM 用户必须继承来自 IAM 组或角色的权限。

默认情况下,IAM 用户、组和角色无权访问 AWS 资源。IAM 策略向用户、组或角色授予权限。我们建议您将 IAM 策略直接应用到组和角色,而不是用户。随着用户数量的增长,在组或角色级别分配权限可降低访问管理的复杂性。降低访问管理的复杂性有助于减少委托人意外收到或保留过多权限的机会。

Remediation

要解决该问题,请创建一个 IAM 组,向该组分配策略,然后将用户添加到该组。策略将应用于组中的每一位用户。

创建 IAM 组

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 选择 Groups (组),然后选择 Create New Group (创建新组)

  3. 输入要创建的组的名称,然后选择 Next Step (下一步)

  4. 选择要分配给该组的每个策略,然后选择 Next Step (下一步)。选择的策略应包括当前直接附加到用户账户的任何策略。

  5. 将用户添加到组,然后将策略分配给该组。然后,分配给组的策略将分配给组中的每一位用户。

  6. 确认 Review (审核) 页面上的详细信息,然后选择 Create Group (创建组)

有关创建组的更多信息,请参阅 中的IAM创建IAM 用户指南

将用户添加到 IAM 组

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 选择 Groups (组)

  3. 选择组操作,然后选择 Add Users to Group (向组添加多个用户)

  4. 选择要添加到组的用户,然后选择 Add Users (添加用户)

有关将用户添加到组的更多信息,请参阅 中的在 IAM 组中添加和删除用户IAM 用户指南

删除直接附加到用户的策略

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 选择 Users (用户)

  3. 对于要分离其策略的用户,在 User name (用户名)列中选择其名称。

  4. 对于 Attached directly (直接附加的策略) 下列出的每个策略,选择页面右侧的 X(从用户删除该策略),然后选择删除

  5. 确认用户仍可按预期使用 AWS 服务。

[IAM.3] IAM 用户访问密钥应每 90 天或更短时间轮换一次

类别:保护 > 安全访问管理

严重性:

资源:IAM 用户

AWS Config 规则: access-keys-rotated

参数:

  • maxAccessKeyAge: 90

该控制检查是否在 90 天内轮换了活动访问密钥。

我们强烈建议您不要在账户中生成和删除所有访问密钥。建议的最佳做法是创建一个或多个 IAM 角色,或使用联合。您可以使用这些方法允许用户使用其现有的公司凭证登录 AWS 管理控制台 和 AWS CLI。

每种方法都有其使用案例。对于现在已有中心目录或计划需要超过当前 IAM 用户限额的企业,联合身份通常更好。在 AWS 环境外运行的应用程序需要访问密钥才能以编程方式访问 AWS 资源。

但是,如果需要提供编程访问的资源在 AWS 内部运行,则最佳做法是使用 IAM 角色。通过角色,您可以授予资源访问权限,而无需在配置中硬编码访问密钥 ID 和私有访问密钥。

要了解有关保护访问密钥和账户的更多信息,请参阅 中的管理访问密钥AWS的最佳实践AWS General Reference。另请参阅博客文章在使用编程访问时保护 AWS 账户的指南

如果您已有访问密钥,Security Hub 建议您每 90 天轮换一次访问密钥。轮换访问密钥可减少他人使用遭盗用账户或已终止账户关联的访问密钥的风险。这还可以确保无法使用可能已丢失、遭破解或被盗用的旧密钥访问数据。轮换访问密钥后,始终更新您的应用程序。

访问密钥包含一个访问密钥 ID 和一个私有访问密钥。它们用于签署您向 AWS 发出的编程请求。AWS 用户需要自己的访问密钥,以便从 AWS、适用于 Windows PowerShell 的工具、AWS CLI 开发工具包对 AWS 进行编程调用,或使用各个 AWS 服务的 API 直接进行 HTTP 调用。

如果您的组织使用 AWS Single Sign-On (AWS SSO),则用户可以登录到 Active Directory、内置 AWS SSO 目录或连接到 AWS SSO 的其他身份提供商 (IdP)。然后,它们可以映射到 IAM 角色,使它们能够在无需 AWS CLI 用户访问密钥的情况下运行 AWS 命令或调用 IAM API。要了解更多信息,请参阅 AWS CLI 中的AWS Single Sign-On配置 以使用 AWS Command Line Interface 用户指南

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

确保访问密钥的使用时长不超过 90 天

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 选择 Users (用户)

  3. 对于显示 Access key age (访问密钥使用期限) 超出 90 天的每个用户,选择用户名来打开该用户的设置。

  4. 选择 Security credentials (安全凭证)

  5. 为用户创建新的密钥:

    1. 选择创建访问密钥

    2. 要保存密钥内容,请下载秘密访问密钥,或者选择 Show (显示),然后从页面中复制该密钥。

    3. 将密钥存储在安全位置以提供给用户。

    4. 选择 Close

  6. 更新使用上一个密钥的所有应用程序以使用新密钥。

  7. 对于上一个密钥,请选择 Make inactive (转为非活跃) 来使访问密钥转为非活动状态。用户现在无法使用该密钥发出请求。

  8. 确认使用新密钥的所有应用程序都能按预期工作。

  9. 确认所有应用程序都使用新密钥后,删除以前的密钥。访问密钥一经删除,就无法恢复。

    要删除上一个密钥,请在行末尾选择 X,然后选择 Delete (删除)

[IAM.4] 不应存在 IAM 根用户访问密钥

类别:保护 > 安全访问管理

严重性:严重

资源:账户

AWS Config 规则: iam-root-access-key-check

参数:

该控制检查根用户访问密钥是否存在。

根账户是 AWS 账户中权限最高的用户。AWS 访问密钥提供对特定账户的编程访问。

Security Hub 建议您删除与根账户关联的所有访问密钥。这会限制可用于破坏账户的向量。它还鼓励创建和使用最小权限的基于角色的账户。

注意

非洲(开普敦) 中不支持该控制。

Remediation

删除访问密钥

  1. 使用 AWS 账户根用户 凭证登录您的账户。

  2. 选择页面右上角附近的账户名称,然后选择 My Security Credentials (我的安全凭证)

  3. 在弹出警告中,选择 Continue to Security Credentials (继续安全凭证)

  4. 选择 Access keys (access key ID and secret access key) (访问密钥 (访问密钥 ID 和秘密访问密钥))

  5. 要永久删除密钥,请选择 Delete (删除),然后选择 Yes (是)。您无法恢复已删除的密钥。

  6. 如果有多个根用户访问密钥,则对每个密钥重复步骤 4 和 5。

[IAM.5] 应为拥有控制台密码的所有 IAM 用户启用 MFA

类别:保护 > 安全访问管理

严重性:

资源:IAM 用户

AWS Config 规则: mfa-enabled-for-iam-console-access

参数:

该控制检查是否为使用控制台密码的所有 AWS 用户启用 IAM Multi-Factor Authentication (MFA)。

多重身份验证 (MFA) 在用户名和密码之上增加了一层额外的防护。启用 MFA 后,当用户登录 AWS 网站时,系统会提示输入用户名和密码。此外,系统还会提示用户从他们 AWS MFA 设备输入身份验证代码。

我们建议为拥有控制台密码的所有账户启用 MFA。MFA 旨在为控制台访问提供更高的安全性。身份验证委托人必须拥有发放具有时效性的密钥的设备,并且必须知道凭证。

Remediation

为用户配置 MFA

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 选择 Users (用户)

  3. 选择要为其配置 MFA 的用户的User name (用户名)

  4. 选择 Security credentials (安全凭证)

  5. Assigned MFA device (已分配 MFA 设备) 旁边,选择 Manage (管理)

  6. 跟随管理 MFA 设备向导指定适合您环境的设备类型。

要了解如何将 MFA 设置委派给用户,请参阅博客文章 How to Delegate Management of Multi-Factor Authentication to AWS IAM Users (如何将 Multi-Factor Authentication 管理委派给 AWS IAM 用户)

[IAM.6] 应该为根用户启用硬件 MFA

类别:保护 > 安全访问管理

严重性:严重

资源:账户

AWS Config 规则: root-account-hardware-mfa-enabled

参数:

该控制检查是否已启用您的 AWS 账户,以使用 根用户 凭证通过 Multi-Factor Authentication (MFA) 硬件设备登录。

虚拟 MFA 无法提供与硬件 MFA 设备相同的安全水平。我们建议您仅在等待硬件购买批准或等待硬件到达时使用虚拟 MFA 设备。要了解更多信息,请参阅 中的启用虚拟多重验证 (MFA) IAM 用户指南设备 (控制台)。

注意

以下区域不支持此控制。

  • 中国(北京)

  • 中国 (宁夏)

  • AWS GovCloud(美国东部)

  • AWS GovCloud (US-West).

Remediation

为根账户启用基于硬件的 MFA

  1. 使用 根用户 凭证登录您的账户。

  2. 选择页面右上角附近的账户名称,然后选择 My Security Credentials (我的安全凭证)

  3. 在弹出警告中,选择 Continue to Security Credentials (继续安全凭证)

  4. 选择 Multi-Factor Authentication (MFA)

  5. 选择 Activate MFA (激活 MFA)

  6. 选择要用于 MFA 的基于硬件(非虚拟)的设备,然后选择 Continue (继续)

  7. 完成配置适合您选择的设备类型的步骤。

[IAM.7] IAM 用户的密码策略应具有可靠的配置

类别:保护 > 安全访问管理

严重性:

资源:账户

AWS Config 规则: iam-password-policy

参数:

  • RequireUppercaseCharacters: true

  • RequireLowercaseCharacters: true

  • RequireSymbols: true

  • RequireNumbers: true

  • MinimumPasswordLength: 8

该控制检查 IAM 用户的账户密码策略是否使用以下推荐的配置。

  • RequireUppercaseCharacters: true

  • RequireLowercaseCharacters: true

  • RequireSymbols: true

  • RequireNumbers: true

  • MinimumPasswordLength: 8

要访问 AWS 管理控制台,IAM用户需要密码。作为最佳实践, Security Hub 强烈建议您使用联合身份验证而不是创建IAM用户。联合身份验证允许用户使用其现有的企业凭证登录 AWS 管理控制台。使用 AWS Single Sign-On (AWS SSO) 创建用户或联合身份,然后将 IAM 角色代入 账户中。

要了解有关身份提供商和联合身份验证的更多信息,请参阅 https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_providers.htmlIAM 用户指南的身份提供商和联合身份验证。要了解有关 AWS SSO 的更多信息,请参阅 AWS Single Sign-On 用户指南

如果您需要使用 IAM 用户, Security Hub 建议您强制创建强用户密码。您可以在您的账户上设置密码策略AWS,以指定密码的复杂性要求和强制轮换期。当您创建或更改密码策略时,大多数密码策略设置会在用户下次更改其密码时实施。其中一些设置将立即实施。要了解更多信息,请参阅 中的为 IAM 用户设置账户密码策略IAM 用户指南

Remediation

修改密码策略

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 选择 Account settings (账户设置)

  3. 选择 Requires at least one uppercase letter (至少必须包含一个大写字母)

  4. 选择 Requires at least one lowercase letter (至少必须包含一个小写字母)

  5. 选择 Requires at least one non-alphanumeric character (至少需要一个非字母数字字符)

  6. 选择 Requires at least one number (至少需要一个数字)

  7. 对于 Minimum password length (最短密码长度),请输入 8

  8. 选择 Apply password policy (应用密码策略)

[IAM.8] 应删除未使用的IAM用户凭证

类别:保护 > 安全访问管理

严重性:

资源:IAM用户

AWS Config 规则: iam-user-unused-credentials-check

参数:

  • maxCredentialUsageAge: 90

该控制检查您的IAM用户是否拥有 90 天内未使用的密码或活动访问密钥。

IAM 用户可以使用不同类型的凭证(例如密码或访问密钥)访问 AWS 资源。

Security Hub 建议您删除或停用 90 天或更长时间未使用的所有凭证。禁用或删除不必要的凭证可减少他人使用遭盗用账户或已弃用账户的关联凭证的风险。

Remediation

要获取监控账户过期凭证所需的一些信息,请使用 IAM 控制台。例如,当您查看账户中的用户时,会显示 Access key age (访问密钥使用期限)Password age (密码使用期限)Last activity (上次活动时间)。如果上述列中的任何一个中的值大于 90 天,请停用这些用户的凭证。

您还可以使用凭证报告来监控用户账户和识别 90 天或更长时间没有活动的账户。您可以从 .csv 控制台以 IAM 格式下载凭证报告。有关凭证报告的更多信息,请参阅 中的AWS获取您的账户的凭证报告IAM 用户指南

确定非活动账户或未使用的凭证后,请使用以下步骤禁用它们。

为非活动账户禁用凭证

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 选择 Users (用户)

  3. 选择凭证超过 90 天的用户的名称。

  4. 选择 Security credentials (安全凭证)

  5. 对于在至少 90 天内未使用的每个登录凭证和访问密钥,选择转为非活动

[KMS.1] IAM 客户托管策略不应允许对所有 KMS 密钥执行解密操作

类别:保护 > 安全访问管理

严重性:

资源:IAM 策略

AWS Config 规则: iam_customer_policy_blocked_kms_actions

参数:

  • kms:ReEncryptFrom, kms:Decrypt

检查IAM客户托管策略的默认版本是否允许委托人对所有资源使用AWS KMS解密操作。该控制使用自动推理引擎 Zelkova 来验证和提醒您可能授予跨AWS账户广泛密钥访问权限的策略。

如果允许对所有 KMS 密钥执行 kms:Decryptkms:ReEncryptFrom 操作,则此控制将失败。该控制评估附加和未附加客户托管策略。它不会检查内联策略或AWS托管策略。

借助 AWS KMS,您可以控制哪些人可以使用您的客户主密钥 (CMKs) 和获取加密数据的访问权限。 IAM 策略定义身份(用户、组或角色)可以对哪些资源执行哪些操作。按照安全最佳实践, AWS 建议您允许最小权限。换句话说,您应该仅向身份授予 kms:Decryptkms:ReEncryptFrom 权限,并且仅授予执行任务所需的密钥的权限。否则,用户可能会使用不适合您的数据的密钥。

确定用户访问加密数据所需的最小密钥集,而不是授予对所有密钥的权限。然后设计仅允许用户使用这些密钥的策略。例如,不允许对所有 KMS 密钥kms:Decrypt的权限。相反kms:Decrypt,只允许对您的账户的特定区域中的密钥执行 。通过采用最小特权原则,您可以降低意外泄露数据的风险。

Remediation

要修复此问题,请修改IAM客户托管策略以限制对密钥的访问。

修改 IAM 客户托管策略

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在IAM导航窗格中,选择策略

  3. 选择要修改的策略旁边的箭头。

  4. 选择编辑策略

  5. 选择 JSON 选项卡。

  6. “Resource”值更改为您希望允许的一个或多个特定密钥。

  7. 修改策略后,选择查看策略

  8. 选择保存更改

有关更多信息,请参阅 IAM 中的AWS KMS将 策略与 AWS Key Management Service Developer Guide 结合使用。

[KMS.2] IAM 委托人不应具有允许对所有 KMS 密钥执行解密操作的IAM内联策略

类别:保护 > 安全访问管理

严重性:

资源:

  • IAM 角色

  • IAM 用户

  • IAM 组

AWS Config 规则: iam_inline_policy_blocked_kms_actions

参数:

  • kms:ReEncryptFrom, kms:Decrypt

检查嵌入到您的身份IAM(角色、用户或组)中的内联策略是否允许对所有 KMS 密钥执行AWS KMS解密操作。该控制使用自动推理引擎 Zelkova 来验证和提醒您可能授予跨AWS账户对密钥的广泛访问权限的策略。

如果允许对内联策略中的所有 KMS 密钥执行 kms:Decryptkms:ReEncryptFrom 操作,则此控制将失败。

借助 AWS KMS,您可以控制哪些人可以使用您的客户主密钥 (CMKs) 和获取加密数据的访问权限。 IAM 策略定义身份(用户、组或角色)可以对哪些资源执行哪些操作。按照安全最佳实践, AWS 建议您允许最小权限。换句话说,您应该仅向身份授予他们所需的权限,并且仅授予执行任务所需的密钥的权限。否则,用户可能会使用不适合您的数据的密钥。

确定用户访问加密数据所需的最小密钥集,而不是授予对所有密钥的权限。然后设计仅允许用户使用这些密钥的策略。例如,不允许对所有 KMS 密钥kms:Decrypt的权限。相反,仅允许对您的账户的特定区域中的密钥使用它们。通过采用最小特权原则,您可以降低意外泄露数据的风险。

Remediation

要修复此问题,请修改内联策略以限制对密钥的访问。

修改 IAM 内联策略

  1. 通过以下网址打开 IAM 控制台:https://console.amazonaws.cn/iam/

  2. 在IAM导航窗格中,选择用户角色

  3. 选择要修改其内IAM联策略的用户、组或角色的名称。

  4. 选择要修改的策略旁边的箭头。

  5. 选择编辑策略

  6. 选择 JSON 选项卡。

  7. "Resource"值更改为要允许的特定键。

  8. 修改策略后,选择查看策略

  9. 选择保存更改

有关更多信息,请参阅 IAM 中的AWS KMS通过 使用AWS Key Management Service Developer Guide策略

[KMS.3] AWS KMS 密钥不应意外删除

类别:保护 > 数据保护 > 数据删除保护

严重性:严重

资源类型:KMS 密钥

AWS Config 规则: kms-cmk-not-scheduled-for-deletion

参数:

该控制检查是否计划删除AWS KMS客户托管密钥 (CMK)。如果计划删除 CMK,控制将失败。

CMKs删除后无法恢复。如果删除 CMK,则使用 KMS CMK 加密的数据也将永久无法恢复。如果有意义的数据已在计划删除的 CMK 下加密,请考虑解密数据或在新 CMK 下重新加密数据,除非您特意执行加密擦除

在计划删除 CMK 时,强制实施一个等待期限,以允许有时间在计划删除时反转该操作。默认等待期为 30 天,但在计划删除 KMS CMK 时,可以缩短至短至 7 天。在等待期内,可以取消计划的删除,并且不会删除 KMS CMK。

有关删除 CMKs的其他信息,请参阅 中的https://docs.amazonaws.cn/kms/latest/developerguide/deleting-keys.html删除客户主密钥AWS Key Management Service Developer Guide

注意

欧洲(米兰) 区域不支持此控制。

Remediation

有关取消计划的 KMS CMK 删除的详细修复说明,请参阅 中的计划和取消密钥删除(控制台)下的取消密钥删除AWS Key Management Service Developer Guide。

[Lambda.1] Lambda 函数策略应禁止公开访问

类别:保护 > 安全网络配置

严重性:严重

资源:Lambda 函数

AWS Config 规则: lambda-function-public-access-prohibited

参数:

该控制检查 Lambda 函数基于资源的策略是否禁止您账户之外的公开访问。

Lambda 函数不应可公开访问,因为这可能允许意外访问存储在函数中的代码。

注意

中国(北京) 或 中国 (宁夏) 区域不支持此控制。

Remediation

如果 Lambda 函数无法进行此控制,则表明该Lambda函数的基于资源的策略语句允许公有访问。

要修复此问题,您必须更新策略。您只能从 Lambda API 更新基于资源的策略。这些说明使用 控制台查看策略,使用 删除AWS Command Line Interface权限。

查看 Lambda 函数的基于资源的策略

  1. 通过以下网址打开 AWS Lambda 控制台:https://console.amazonaws.cn/lambda/

  2. 在导航窗格中,选择 Functions (函数)。

  3. 选择 函数。

  4. 选择 Permissions。基于资源的策略显示在另一个账户AWS或服务尝试访问 函数时应用的权限。

  5. 检查基于资源的策略。标识具有使策略成为公有Principal的字段值的策略语句。例如,允许 "*"{ "AWS": "*" }

    您无法从 控制台编辑策略。要从 函数中删除权限,请使用 中的 remove-permission 命令AWS CLI。

    记下要删除的语句的语句 ID (Sid) 的值。

要使用 从 AWS CLI Lambda 函数中删除权限,请发出 remove-permission 命令。

$ aws lambda remove-permission --function-name <function-name> --statement-id <statement-id>

<function-name> 替换为 Lambda 函数的名称,并将 <statement-id> 替换为要删除的语句的语句 ID。

验证权限是否已更新

  1. 通过以下网址打开 AWS Lambda 控制台:https://console.amazonaws.cn/lambda/

  2. 在导航窗格中,选择 Functions (函数)。

  3. 选择您更新的 函数。

  4. 选择 Permissions

    应更新基于资源的策略。如果策略中只有一个语句,则策略为空。

有关更多信息,请参阅 AWS Lambda 中的为 使用基于资源的策略AWS Lambda Developer Guide

[Lambda.2] Lambda 函数应该使用最新的运行时

类别:保护 > 安全开发

严重性:

资源:Lambda 函数

AWS Config 规则: lambda-function-settings-check

参数:

  • runtime: nodejs12.x, nodejs10.x, python3.8, python3.7, python3.6, python2.7, ruby2.5, ruby2.7, java11, java8,go1.x, dotnetcore2.1, dotnetcore3.1

该控制检查对于支持的各种语言,运行时的 Lambda 函数设置是否匹配最新运行时的预期值集。该控制检查以下运行时:nodejs12.xnodejs10.xpython3.8、、python3.7python3.6ruby2.5ruby2.7、、java11java8、、go1.xdotnetcore2.1 dotnetcore3.1

Lambda 运行时是围绕不断进行维护和安全更新的操作系统、编程语言和软件库的组合构建的。当安全更新不再支持某个运行时组件时,Lambda 将弃用该运行时。虽然您无法创建使用已弃用运行时的函数,但函数仍可用于处理调用事件。确保您的 Lambda 函数是最新的,并且不使用过时的运行时环境。

要了解有关此控制检查的所有受支持语言的最新运行时的更多信息,请参阅 AWS Lambda 中的AWS Lambda Developer Guide运行时

注意

中国(北京) 或 中国 (宁夏) 区域中不支持此控制。

Remediation

有关支持的运行时和弃用计划的更多信息,请参阅 的https://docs.amazonaws.cn/lambda/latest/dg/runtime-support-policy.html运行时支持策略部分AWS Lambda Developer Guide。将运行时迁移到最新版本时,请遵循语言发布者的语法和指导。

[RDS.1] RDS 快照应为私有快照

类别:保护 > 安全网络配置

严重性:严重

资源:RDS 数据库快照

AWS Config 规则: rds-snapshots-public-prohibited

参数:

该控制检查 Amazon RDS 快照是否公有。

该控制适用于 RDS 实例。它还可以返回Aurora数据库实例、Neptune数据库实例和Amazon DocumentDB集群的快照的结果,即使它们没有经过公开访问评估。如果这些结果没有用,您可以禁止它们。

RDS 快照用于备份 RDS 实例上在特定时间点的数据。它们可用于将 RDS 实例还原到之前的状态。

除非有意这样做,否则 RDS 快照不得为公有快照。如果您将未加密的手动快照作为公有快照共享,这将使快照对所有AWS账户可用。这可能会导致 RDS 实例意外的数据泄露。

请注意,如果将配置更改为允许公有访问,则 AWS Config 规则可能在长达 12 小时内无法检测到更改。在 AWS Config 规则检测到更改之前,即使配置违反了规则,检查也会通过。

要了解有关共享数据库快照的更多信息,请参阅 中的https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_ShareSnapshot.html共享数据库快照Amazon RDS 用户指南

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

删除 RDS 快照的公有访问权限

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 导航到 Snapshots (快照),然后选择要修改的公有快照

  3. Actions (操作) 中,选择 Share Snapshots (共享快照)

  4. DB snapshot visibility (数据库快照可见性) 中,选择 Private (私有)

  5. DB snapshot visibility (数据库快照可见性) 下,选择 all (全部)

  6. 选择 Save

[RDS.2] RDS 数据库实例应禁止公有访问,这取决于 PubliclyAccessible 配置

类别:保护 > 安全网络配置

严重性:严重

资源:RDS 数据库实例

AWS Config 规则: rds-instance-public-access-check

参数:

该控制通过评估实例配置项中的 Amazon RDS 字段,检查是否可以公开访问 PubliclyAccessible 实例。

Neptune 数据库实例和Amazon DocumentDB集群没有 PubliclyAccessible 标志,无法进行评估。但是,此控制仍然可以为这些资源生成结果。您可以隐藏这些结果。

RDS 实例配置中的 PubliclyAccessible 值指示是否可以公开访问数据库实例。如果使用 PubliclyAccessible 配置了数据库实例,则它是一个面向 Internet 的实例并具有可公开解析的 DNS 名称,该名称解析为一个公有 IP 地址。如果无法公开访问数据库实例,则它是一个内部实例并具有解析为私有 IP 地址的 DNS 名称。

除非您打算使 RDS 实例可公开访问,否则不应为该 RDS 实例配置 PubliclyAccessible 值。这样做可能会允许数据库实例产生不必要的流量。

Remediation

从 RDS 数据库实例中删除公有访问权限

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 导航到 Databases (数据库),然后选择公有数据库。

  3. 选择修改

  4. 连接下,展开其他连接配置

  5. Public access (公有访问) 下,选择 Not public accessible (不可公开访问)。

  6. 选择 Continue (继续)

  7. Scheduling of modifications (修改计划) 下,选择 Apply immediately (立即应用)。

  8. 选择修改数据库实例

有关更多信息,请参阅 中的在 VPC Amazon RDS 用户指南 中使用数据库实例。

[RDS.3] RDS 数据库实例应启用静态加密

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源:RDS 数据库实例

AWS Config 规则: rds-storage-encrypted

参数:

该控制检查您的 Amazon RDS 数据库实例是否启用了存储加密。

该控制适用于 RDS 数据库实例。但是,它还可以生成Aurora数据库实例、Neptune数据库实例和Amazon DocumentDB集群的结果。如果这些结果无用,您可以禁止它们。

为了增加 RDS 数据库实例中敏感数据的安全性,您应将 RDS 数据库实例配置为静态加密。要静态加密 RDS DB 数据库实例和快照,请启用 RDS 数据库实例的加密选项。静态加密的数据包括数据库实例的基础存储、其自动化备份、只读副本和快照。

RDS 加密的数据库实例使用开放的标准 AES-256 加密算法,对托管 RDS 数据库实例的服务器上的数据进行加密。在加密数据后,Amazon RDS 将以透明方式处理访问的身份验证和数据的解密,并且对性能产生的影响最小。您无需修改数据库客户端应用程序来使用加密。

Amazon RDS 加密当前可用于所有数据库引擎和存储类型。Amazon RDS 加密对于大多数数据库实例类不可用。要了解不支持Amazon RDS加密的数据库实例类,请参阅 Amazon RDS 中的加密Amazon RDS 用户指南资源

Remediation

有关在 中加密数据库实例的信息Amazon RDS,请参阅 中的加密 Amazon RDS Amazon RDS 用户指南资源

[RDS.4] RDS 集群快照和数据库快照应进行静态加密

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源类型: DBClusterSnapshot, DBSnapshot

AWS Config 规则: rds-snapshots-encrypted

参数:

该控制检查 RDS 数据库快照是否已加密。

该控制适用于 RDS 数据库实例。但是,它还可以为Aurora数据库实例、数据库实例Neptune和Amazon DocumentDB集群的快照生成结果。如果这些结果无用,您可以禁止它们。

静态加密数据可降低未经身份验证的用户访问磁盘上存储的数据的风险。RDS 快照中的数据应进行静态加密,以增加一层安全性。

Remediation

您可以使用 Amazon RDS 控制台修复此问题。

加密未加密的 RDS 快照

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择快照

  3. ManualSystem 下查找要加密的快照。

  4. 选中要加密的快照旁边的复选框。

  5. 选择 Actions (操作),然后选择 Copy Snapshot 复制快照)。

  6. New DB Snapshot Identifier (新数据库快照标识符) 下,键入新快照的名称。

  7. Encryption (加密) 下,选择 Enable Encryption (启用加密)。

  8. 选择要用于加密快照的 KMS 密钥。

  9. 选择 Copy Snapshot

  10. 创建新快照后,删除原始快照。

  11. 对于 Backup Retention Period (备份保留期),选择一个正非零值。例如,30 天。

[RDS.5] RDS 数据库实例应配置了多个可用区

类别:恢复 > 弹性 > 高可用性

严重性:

资源类型: DBInstance

AWS Config 规则: rds-multi-az-support

参数:

该控制检查是否为 RDS 数据库实例启用了高可用性。

应为多个可用区 (AZs) 配置 RDS 数据库实例。这可确保存储的数据的可用性。如果可用区可用性问题以及定期 RDS 维护期间存在问题,则多可用区部署允许自动故障转移。

Remediation

为数据库实例启用多个可用区

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Databases (数据库),然后选择要修改的数据库实例。

  3. 选择修改。将显示 Modify DB Instance (修改数据库实例) 页面。

  4. Instance Specifications (实例规范) 下,将 Multi-AZ deployment (多可用区部署) 设置为 Yes (是)。

  5. 选择 Continue (继续),然后查看修改摘要。

  6. (可选)选择立即应用以立即应用更改。选择此选项在某些情况下可能导致中断。有关更多信息,请参阅 中的https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html#USER_ModifyInstance.ApplyImmediately使用立即应用设置Amazon RDS 用户指南

  7. 在确认页面上,检查您的更改。如果更改正确无误,请选择 Modify DB Instance (修改数据库实例) 保存更改。

[RDS.6] 应为 RDS 数据库实例和集群配置增强监控

类别:Detect > Detection Services

严重性:

资源类型: DBInstance

AWS Config 规则: rds-enhanced-monitoring-enabled

参数:

该控制检查是否为 RDS 数据库实例启用增强监控。

在 中Amazon RDS,增强监测可以更快地响应底层基础设施中的性能变化。这些性能更改可能会导致数据不可用。增强监控提供了 RDS 数据库实例在其上运行的操作系统的实时指标。代理安装在实例上。代理可以比管理程序层更准确地获取指标。

若您想了解数据库实例上不同进程或线程对 CPU 的使用差异,增强监测指标非常有用。有关更多信息,请参阅 https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/USER_Monitoring.OS.html 中的Amazon RDS 用户指南增强监控

Remediation

有关如何为数据库实例启用增强监控的详细说明,请参阅 中的设置和启用增强监控Amazon RDS 用户指南

[RDS.7] RDS 集群应启用删除保护

类别:保护 > 数据保护 > 数据删除保护

严重性:

资源类型: DBCluster

AWS Config 规则: rds-cluster-deletion-protection-enabled

参数:

该控制检查 RDS 集群是否启用了删除保护。

该控制适用于 RDS 数据库实例。但是,它还可以生成Aurora数据库实例、Neptune数据库实例和Amazon DocumentDB集群的结果。如果这些结果无用,您可以禁止它们。

启用集群删除保护是防止未经授权的实体意外删除数据库的一层额外的保护。

启用删除保护后,无法删除 RDS 集群。删除请求成功之前,必须禁用删除保护。

注意

以下区域不支持此控制。

  • 中国(北京)

  • 中国 (宁夏)

  • 中东(巴林)

  • 南美洲(圣保罗).

Remediation

为 RDS 数据库集群启用删除保护

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Databases (数据库),然后选择要修改的数据库集群。

  3. 选择修改

  4. Deletion protection (删除保护) 下,选择 Enable deletion protection (启用删除保护)。

  5. 选择 Continue (继续)

  6. Scheduling of modifications (修改计划) 下,选择要应用修改的时间。选项为 Apply during the next scheduled maintenance window (在下一个计划的维护时段内应用) 或 Apply immediately (立即应用)。

  7. 选择 Modify Cluster

[RDS.8] RDS 数据库实例应启用删除保护

类别:保护 > 数据保护 > 数据删除保护

严重性:

资源类型: DBInstance

AWS Config 规则: rds-instance-deletion-protection-enabled

参数:

该控制检查您的 RDS 数据库实例是否启用了删除保护。

启用实例删除保护是防止未经授权的实体意外删除数据库的一层额外的保护。

在启用删除保护时,无法删除 RDS 数据库实例。删除请求成功之前,必须禁用删除保护。

Remediation

为 RDS 数据库实例启用删除保护

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择 Databases (数据库),然后选择要修改的数据库实例。

  3. 选择修改

  4. Deletion protection (删除保护) 下,选择 Enable deletion protection (启用删除保护)。

  5. 选择 Continue (继续)

  6. Scheduling of modifications (修改计划) 下,选择要应用修改的时间。选项为 Apply during the next scheduled maintenance window (在下一个计划的维护时段内应用) 或 Apply immediately (立即应用)。

  7. 选择修改数据库实例

[RDS.9] 应启用数据库日志记录

类别:识别 > 日志记录

严重性:

资源:DBInstance

AWS Config 规则: rds_logging_enabled

参数:

该控制检查是否Amazon RDS已启用 的以下日志并将其发送到 CloudWatch Logs:

  • Oracle:(警报、审核、跟踪、侦听器)

  • PostgreSQL:(Postgresql,Upgrade)

  • MySQL:(Audit、Error、General、SlowQuery)

  • MariaDB:(审核、错误、常规、SlowQuery)

  • SQL Server:(错误,代理)

  • Aurora:(Audit、Error、General、SlowQuery)

  • Aurora-MySQL:(Audit、Error、General、SlowQuery)

  • PostgreSQL, Upgrade)。

RDS 数据库应启用相关日志。数据库日志记录提供向 RDS 发出的请求的详细记录。数据库日志可以帮助进行安全和访问审核,并有助于诊断可用性问题。

注意

以下区域不支持此控制:

非洲(开普敦)

亚太区域 (大阪当地)

中国 (宁夏)

欧洲(米兰)

Remediation

日志记录选项包含在与 RDS 数据库集群或实例关联的数据库参数组中。要在使用数据库引擎的默认参数组时启用日志记录,您必须创建具有所需参数值的新数据库参数组。然后,您必须将客户数据库参数组与数据库集群或实例关联。

要从 启用 MariaDB、MySQL 或 PostgreSQL 日志并将其发布到 CloudWatch Logs AWS 管理控制台,请在自定义数据库参数组中设置以下参数:

数据库引擎

参数

MariaDB

general_log=1

slow_query_log=1

log_output = FILE

MariaDB 还需要自定义选项组,如下所述。

MySQL

general_log=1

slow_query_log=1

log_output = FILE

PostgreSQL

log_statement=all

log_min_duration_statement=minimum query duration (ms) to log

创建自定义数据库参数组

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择参数组

  3. 选择创建参数组。将显示创建参数组窗口。

  4. Parameter group family (参数组系列) 列表中,选择一个数据库参数组系列。

  5. Type 列表中,选择 DB Parameter Group。

  6. 组名称中,输入新数据库参数组的名称。

  7. Description (描述) 中,输入新数据库参数组的描述。

  8. 选择创建

使用控制台为 MariaDB 日志记录创建新选项组

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择选项组

  3. 选择创建组

  4. 创建选项组窗口中,执行以下操作:

    1. 对于 Name (名称),键入在AWS您的账户内唯一的选项组的名称。此名称只能包含字母、数字和连字符。

    2. 对于说明,输入选项组的简要说明。此说明用于显示说明。

    3. 对于引擎,选择需要的数据库引擎。

    4. 对于主引擎版本,请选择所需的数据库引擎主版本。

  5. 要继续,请选择创建

  6. 选择您刚刚创建的选项组的名称。

  7. 选择添加选项

  8. 选择 MARIADB_AUDIT_PLUGIN (从选项名称列表中)。

  9. SERVER_AUDIT_EVENTS 设置为 CONNECT, QUERY, TABLE, QUERY_DDL, QUERY_DML, QUERY_DCL

  10. 选择添加选项

从 将 SQL Server DB、Oracle DB 或 PostgreSQL 日志发布到 CloudWatch Logs AWS 管理控制台

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择数据库

  3. 选择要修改的数据库实例。

  4. 选择修改

  5. Log exports (日志导出) 下,选择要开始发布到 的所有日志文件CloudWatch Logs。

    日志导出仅适用于支持发布到 的数据库引擎版本CloudWatch Logs。

  6. 选择 Continue (继续)。然后,在摘要页面上,选择修改数据库实例

将新的数据库参数组或数据库选项组应用于 RDS 数据库实例

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 在导航窗格中,选择数据库

  3. 选择要修改的数据库实例。

  4. 选择修改。将显示 Modify DB Instance (修改数据库实例) 页面。

  5. Database options (数据库选项) 下,根据需要更改数据库参数组和数据库选项组。

  6. 完成更改后,选择 Continue。检查修改摘要。

  7. (可选)选择立即应用以立即应用更改。选择此选项在某些情况下可能导致中断。有关更多信息,请参阅 中的https://docs.amazonaws.cn/AmazonRDS/latest/UserGuide/Overview.DBInstance.Modifying.html#USER_ModifyInstance.ApplyImmediately使用立即应用设置Amazon RDS 用户指南

  8. 选择修改数据库实例以保存更改。

[RDS.10] 应为 RDS 实例配置IAM身份验证

类别:保护 > 安全访问管理 > 无密码身份验证

严重性:

资源:DBInstance

AWS Config 规则: rds-instance-iam-authentication-enabled

参数:

该控制检查 RDS 数据库实例是否启用了IAM数据库身份验证。

IAM 数据库身份验证允许使用身份验证令牌而不是密码对数据库实例进行身份验证。传入和传出数据库的网络流量使用 SSL 进行加密。有关更多信息,请参阅 中的 https://docs.amazonaws.cn/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.IAMDBAuth.htmlIAM 数据库身份验证Amazon Aurora 用户指南

注意

以下区域不支持此控制:

非洲(开普敦)

亚太地区(香港)

亚太区域 (大阪当地)

中国(北京)

中国 (宁夏)

Remediation

为现有数据库实例启用IAM身份验证

  1. 通过以下网址打开 Amazon RDS 控制台:https://console.amazonaws.cn/rds/

  2. 选择数据库

  3. 选择要修改的数据库实例。

  4. 选择修改

  5. Database options (数据库选项) 下,选择 Enable DB authentication (启用IAM数据库身份验证)。

  6. 选择 Continue (继续)

  7. Scheduling of modifications (修改计划) 下,选择要应用修改的时间。选项为 Apply during the next scheduled maintenance window (在下一个计划的维护时段内应用) 或 Apply immediately (立即应用)。

  8. 对于集群,选择修改数据库实例

[Redshift.1] Amazon Redshift 集群应禁止公开访问

类别:保护 > 安全网络配置 > 资源不可公开访问

严重性:严重

资源:集群

AWS Config 规则: redshift-cluster-public-access-check

参数:

该控制检查Amazon Redshift集群是否可公开访问。它评估集群配置项中的 PubliclyAccessible 字段。

PubliclyAccessible 集群配置的 Amazon Redshift 属性指示集群是否可公开访问。当集群配置为 PubliclyAccessibletrue,它是一个面向 Internet 的实例,具有可公开解析的 DNS 名称,该名称解析为公有 IP 地址。

当集群不可公开访问时,它是具有解析为私有 IP 地址的 DNS 名称的内部实例。除非您打算公开访问集群,否则不应将该集群配置为 PubliclyAccessible true

Remediation

禁用对 Amazon Redshift 集群的公有访问

  1. 通过 https://console.amazonaws.cn/redshift/ 打开 Amazon Redshift 控制台。

  2. 在导航菜单中,选择 Clusters (集群),然后选择具有要修改的安全组的集群的名称。

  3. 选择操作,然后选择修改可公开访问的设置

  4. Allow instances and devices outside the VPC to connect to your database through the cluster endpoint (允许 VPC 外部的实例和设备通过集群终端节点连接到您的数据库) 下,选择 No ()。

  5. 选择 Confirm

[Redshift.2] 到 Amazon Redshift 集群的连接应在传输过程中加密

类别:保护 > 数据保护 > 传输中的数据加密

严重性:

资源:集群

AWS Config 规则: redshift-require-tls-ssl

参数:

该控制检查是否需要到 Amazon Redshift 集群的连接才能在传输中使用加密。如果未将Amazon Redshift集群参数require_SSL设置为 1,则检查失败。

TLS 可用于帮助防止潜在攻击者使用中间人攻击或类似攻击来窃听或操作网络流量。只允许通过 TLS 的加密连接。加密传输中的数据可能会影响性能。您应使用此功能测试应用程序,以了解性能状况和 TLS 的影响。

注意

欧洲(米兰) 中不支持该控制。

Remediation

修改参数组

  1. 通过 https://console.amazonaws.cn/redshift/ 打开 Amazon Redshift 控制台。

  2. 在导航菜单中,选择 Config (配置),然后选择 Workload management (工作负载管理) 以显示 Workload management (工作负载管理) 页面。

  3. 选择要修改的参数组。

  4. 选择 Parameters (参数)。

  5. 选择 Edit parameters (编辑参数),然后将 require_ssl 设置为 1。

  6. 输入您的更改,然后选择 Save (保存)。

[Redshift.3] Amazon Redshift 集群应启用自动快照

类别:恢复 > 弹性 > 启用备份

严重性:

资源:集群

AWS Config 规则: redshift-backup-enabled

参数:

  • MinRetentionPeriod = 7

该控制检查 Amazon Redshift 集群是否启用了自动快照。它还检查快照保留期是否大于或等于 7。

备份可帮助您更快地从安全事件中恢复。它们可增强系统的恢复能力。默认情况下, Amazon Redshift 会拍摄定期快照。该控制检查自动快照是否启用并保留至少七天。有关Amazon Redshift自动快照的更多详细信息,请参阅 中的自动快照Amazon Redshift Cluster Management Guide

注意

以下区域不支持此控制:

  • 非洲(开普敦)

  • 亚太区域 (大阪当地)

  • 亚太区域(悉尼)

  • 中国 (宁夏)

  • 欧洲(米兰)

Remediation

修改快照保留期

  1. 通过 https://console.amazonaws.cn/redshift/ 打开 Amazon Redshift 控制台。

  2. 在导航菜单中,选择 Clusters (集群),然后选择要修改的集群的名称。

  3. 选择 Edit

  4. Backup (备份) 下,将 Snapshot retention (快照保留) 设置为 7 或更大的值。

  5. 选择 Modify Cluster

[Redshift.6] Amazon Redshift 应启用到主要版本的自动升级

类别:Detect > 漏洞和补丁管理

严重性:

资源:集群

AWS Config 规则: redshift-cluster-maintenancesettings-check

参数:

  • allowVersionUpgrade = true

该控制检查是否为Amazon Redshift集群启用自动主版本升级。

启用自动主要版本升级可确保在维护时段内安装Amazon Redshift集群的最新主要版本更新。这些更新可能包括安全补丁和错误修复。使 保持最新的补丁安装是保护系统的重要步骤。

注意

中东(巴林) 中不支持该控制。

Remediation

要从 中修复此结果AWS CLI,请使用 Amazon Redshift modify-cluster 命令设置 --allow-version-upgrade 属性。

aws redshift modify-cluster --cluster-identifier clustername --allow-version-upgrade

其中, clustername 是Amazon Redshift集群的名称。

[S3.1] 应启用 S3 阻止公有访问设置

类别:保护 > 安全网络配置

严重性:

资源:账户

AWS Config 规则: s3-account-level-public-access-blocks

参数:

  • ignorePublicAcls: true

  • blockPublicPolicy: true

  • blockPublicAcls: true

  • restrictPublicBuckets: true

该控制检查是否在账户级别配置了以下 Amazon S3 公有访问阻止设置:

  • ignorePublicAcls: true

  • blockPublicPolicy: true

  • blockPublicAcls: true

  • restrictPublicBuckets: true

Amazon S3 公共访问阻止旨在为整个 AWS 账户或单个 S3 存储桶级别提供控制,确保对象永远不会具有公有访问权限。通过访问控制列表 (ACL) 和/或存储桶策略向存储桶和对象授予公有访问权限。

除非您打算让 S3 存储桶可公开访问,否则应配置账户级别 Amazon S3 阻止公共访问功能。

要了解更多信息,请参阅 中的Amazon S3使用 阻止公有访问Amazon Simple Storage Service 开发人员指南

注意

以下区域不支持此控制。

  • 非洲(开普敦)

  • 欧洲(米兰)

  • 中东(巴林)

Remediation

启用 Amazon S3 阻止公有访问

  1. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. 选择 Block public access (account settings) (阻止公有访问(账户设置))

  3. 选择 Edit

  4. 选择 Block all public access (阻止所有公有访问)。

  5. 选择保存更改

有关更多信息,请参阅 中的Amazon S3使用 阻止公有访问Amazon Simple Storage Service 开发人员指南

[S3.2] S3 存储桶应禁止公开读取访问

类别:保护 > 安全网络配置

严重性:严重

资源:S3 存储桶

AWS Config 规则: s3-bucket-public-read-prohibited

参数:

该控制检查 S3 存储桶是否允许公共读取访问。它评估阻止公有访问设置、存储桶策略和存储桶访问控制列表 (ACL)。

有些使用案例要求互联网上的每个人都能够从您的 S3 存储桶中读取数据。然而,这种情况很少见。为确保数据的完整性和安全性,您的 S3 存储桶不应可公开读取。

Remediation

删除 S3 存储桶的公开访问权限

  1. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. 在左侧导航窗格中,选择 Buckets (存储桶)。

  3. 选择要更新的 S3 存储桶的名称。

  4. 选择 Permissions (权限),然后选择 Block public access (阻止公有访问)。

  5. 选择 Edit

  6. 选择 Block all public access (阻止所有公有访问)。然后选择 Save (保存)

  7. 如果出现提示,输入 confirm,然后选择 Confirm (确认)

[S3.3] S3 存储桶应禁止公开写入访问

类别:保护 > 安全网络配置

严重性:严重

资源:S3 存储桶

AWS Config 规则: s3-bucket-public-write-prohibited

参数:

该控制检查 S3 存储桶是否允许公共写入访问。它会对阻止公有访问设置、存储桶策略和存储桶访问控制列表 (ACL) 进行评估。

有些使用案例要求互联网上的每个人都能写入您的 S3 存储桶。然而,这种情况很少见。为确保数据的完整性和安全性,您的 S3 存储桶不应可公开写入。

Remediation

删除 S3 存储桶的公开访问权限

  1. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. 在左侧导航窗格中,选择 Buckets (存储桶)。

  3. 选择要更新的 S3 存储桶的名称。

  4. 选择 Permissions (权限),然后选择 Block public access (阻止公有访问)。

  5. 选择 Edit

  6. 选择 Block all public access (阻止所有公有访问)。然后选择 Save (保存)

  7. 如果出现提示,输入 confirm,然后选择 Confirm (确认)

[S3.4] S3 存储桶应启用服务器端加密

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源:S3 存储桶

AWS Config 规则: s3-bucket-server-side-encryption-enabled

参数:

该控制检查 S3 存储桶是否启用了 Amazon S3 默认加密,或检查 S3 存储桶策略是否明确拒绝没有服务器端加密的放置对象请求。

为了增加 S3 存储桶中敏感数据的安全性,您应将存储桶配置为使用服务器端加密,以保护您的静态数据。Amazon S3 使用唯一密钥加密每个对象。作为额外的保护,它将使用定期轮换的主密钥对密钥本身进行加密。Amazon S3 服务器端加密使用可用的最强数据块密码之一(即 256 位高级加密标准 (AES-256))来加密您的数据。

要了解更多信息,请参阅 中的使用具有 托管加密密钥的服务器端加密 (SSE-S3Amazon S3 Amazon Simple Storage Service 开发人员指南保护数据。

Remediation

对 S3 存储桶启用默认加密

  1. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. 在左侧导航窗格中,选择 Buckets (存储桶)。

  3. 从列表中选择 S3 存储桶。

  4. 选择 Properties.

  5. 选择 Default encryption

  6. 对于加密,请选择 AES-256AWS-KMS

    • 选择 AES-256 以使用由 管理的密钥Amazon S3进行默认加密。有关使用 Amazon S3 服务器端加密对数据进行加密的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南

    • 选择 AWS-KMS 以使用由 管理的密钥AWS KMS进行默认加密。然后从已创建的 AWS KMS 主密钥列表中选择一个主密钥。

      键入要使用的 AWS KMS 密钥的 Amazon 资源名称 (ARN)。您可以在 AWS KMS 控制台中的 IAMEncryption keys 下方找到您的 密钥的 ARN。或者,您可以从下拉列表中选择一个键名。

      重要

      如果您将 AWS KMS 选项用于默认加密配置,则您需要遵循 AWS KMS 的 RPS(每秒请求数)配额。有关 AWS KMS 配额以及如何请求增加配额的更多信息,请参阅 AWS Key Management Service Developer Guide

      有关创建 AWS KMS 密钥的更多信息,请参阅 AWS Key Management Service Developer Guide

      有关将 AWS KMS 与 Amazon S3 一起使用的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南

    在启用默认加密时,您可能需要更新存储桶策略。有关从存储桶策略更改为默认加密的更多信息,请参阅 Amazon Simple Storage Service 开发人员指南

  7. 选择 Save

有关默认 S3 存储桶加密的更多信息,请参阅 Amazon Simple Storage Service 控制台用户指南

[S3] S3 存储桶应要求请求使用安全套接字层

严重性:

资源S3存储桶

AWS Config 规则: s3-bucket-ssl-requests-only

参数:

该控制检查 S3 存储桶是否具有要求请求使用安全套接字层 (SSL) 的策略。

S3 存储桶应具有要求所有请求 (Action: S3:*) 仅在 S3 资源策略中接受通过 HTTPS 传输数据的策略,该策略由条件键 表示aws:SecureTransport

Remediation

要修复此问题,请更新 S3 存储桶的权限策略。

配置 S3 存储桶以拒绝不安全的传输

  1. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. 导航到不合规的存储桶,然后选择存储桶名称。

  3. 选择 Permissions,然后选择 Bucket Policy

  4. 在下面的策略中添加类似的策略语句。将 awsexamplebucket 替换为您要修改的存储桶的名称。

    { "Id": "ExamplePolicy", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowSSLRequestsOnly", "Action": "s3:*", "Effect": "Deny", "Resource": [ "arn:aws:s3:::awsexamplebucket", "arn:aws:s3:::awsexamplebucket/*" ], "Condition": { "Bool": { "aws:SecureTransport": "false" } }, "Principal": "*" } ] }
  5. 选择 Save

有关更多信息,请参阅知识中心文章我应该使用哪些 S3 存储桶策略来遵循AWS Config规则 s3

[S3] 应限制存储桶策略中授予其他Amazon S3账户AWS的权限

类别:保护 > 安全访问管理 > 受限的敏感 APIs操作

严重性:

资源类型: AWS::S3::Bucket

AWS Config 规则: s3-bucket-blacklisted-actions-prohibited

参数:

  • blacklistedactionpatterns: s3:DeleteBucketPolicy, s3:PutBucketAcl, s3:PutBucketPolicy, s3:PutEncryptionConfiguration, s3:PutObjectAcl

该控制检查 S3 存储桶策略是否阻止其他AWS账户中的委托人对 S3 存储桶中的资源执行拒绝的操作。如果 S3 存储桶策略允许另一个AWS账户中的委托人执行以下任一操作,则控制将失败:

  • s3:DeleteBucketPolicy

  • s3:PutBucketAcl

  • s3:PutBucketPolicy

  • s3:PutEncryptionConfiguration

  • s3:PutObjectAcl

实施最低权限访问是降低安全风险以及错误或恶意意图的影响的基础。如果 S3 存储桶策略允许来自外部账户的访问,则可能导致内部威胁或攻击者泄露数据。

blacklistedactionpatterns 参数允许成功评估 S3 存储桶的 规则。参数为未包含在blacklistedactionpatterns列表中的操作模式授予对外部账户的访问权限。

Remediation

要修复此问题,请编辑 S3 存储桶策略以删除权限。

编辑 S3 存储桶策略

  1. 通过以下网址打开 Amazon S3 控制台:https://console.amazonaws.cn/s3/

  2. Bucket name 列表中,选择要编辑其策略的 S3 存储桶的名称。

  3. 选择 Permissions,然后选择 Bucket Policy

  4. Bucket policy editor (存储桶策略编辑器) 文本框中,执行下列操作之一:

    • 删除向其他AWS账户授予对拒绝操作的访问权限的语句

    • 从语句中删除允许的拒绝操作

  5. 选择 Save

[SageMaker.1] SageMaker 笔记本实例不应具有直接 Internet 访问权限

严重性:

资源: SageMaker:NotebookInstance

AWS Config 规则: sagemaker-notebook-no-direct-internet-access

参数:

该控制检查 SageMaker 笔记本实例是否禁用了直接 Internet 访问。为此,它会检查是否为笔记本实例禁用DirectInternetAccess了 字段。

如果您在没有 VPC 的情况下配置SageMaker实例,则默认情况下会在实例上启用直接 Internet 访问。您应该使用 VPC 配置实例,并将默认设置更改为 Disable - Access the internet through a VPC (禁用 - 通过 VPC 访问 Internet)。

要从笔记本训练或托管模型,您需要 Internet 访问。要启用 Internet 访问,请确保您的 VPC 具有 NAT 网关并且您的安全组允许出站连接。要了解有关如何将笔记本实例连接到 VPC 中的资源的更多信息,请参阅 中的将笔记本实例连接到 VPC Amazon SageMaker 开发人员指南 中的资源。

您还应该确保将对您的SageMaker配置的访问权限限制为仅授权用户。限制用户修改 IAM 设置和资源SageMaker的权限。

注意

以下区域不支持此控制。

  • 非洲(开普敦)

  • 中国(北京)

  • 中国 (宁夏)

  • 欧洲(米兰)

  • AWS GovCloud(美国东部)

Remediation

请注意,在创建笔记本实例后,您无法更改 Internet 访问设置。必须停止、删除并重新创建。

配置 SageMaker 笔记本实例以拒绝直接 Internet 访问

  1. 通过以下网址打开 SageMaker 控制台: https://console.amazonaws.cn/sagemaker/

  2. 导航到 Notebook instances (笔记本实例)。

  3. 删除启用了直接 Internet 访问权限的实例。选择实例,选择 Actions (操作),然后选择 stop (停止)。

    实例停止后,选择 Actions (操作),然后选择 delete (删除)。

  4. 选择创建笔记本实例。提供配置详细信息。

  5. 展开网络部分,然后选择 VPC、子网和安全组。在 Direct internet access (直接 Internet 访问) 下,选择 Disable - Access the internet via a VPC (禁用 - 通过 VPC 访问 Internet)。

  6. 选择创建笔记本实例

有关更多信息,请参阅 中的将笔记本实例连接到 VPC Amazon SageMaker 开发人员指南 中的资源。

[SecretsManager.1] Secrets Manager 密钥应启用自动轮换

类别:保护 > 安全开发

严重性:

资源: Secrets Manager 密钥

AWS Config 规则: secretsmanager-rotation-enabled-check

参数:

该控制检查是否使用自动轮换AWS Secrets Manager配置了存储在 中的密钥。

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

Secrets Manager 可以轮换密钥。您可以使用轮换将长期密钥替换为短期密钥。轮换密钥会限制未经授权的用户可以使用遭盗用密钥的时间。因此,您应该频繁地轮换密钥。要了解有关轮换的更多信息,请参阅 AWS Secrets Manager 中的轮换AWS Secrets Manager 用户指南密钥

Remediation

要修复此问题,请为密钥启用自动轮换。

为密钥启用自动轮换

  1. 通过以下网址打开 Secrets Manager 控制台:https://console.amazonaws.cn/secretsmanager

  2. 要查找需要轮换的密钥,请在搜索字段中输入密钥名称。

  3. 选择要轮换的密钥,这将显示密钥详细信息页面。

  4. Rotation configuration (轮换配置) 下,选择 Edit rotation (编辑轮

  5. Edit rotation configuration (编辑轮换配置) 中,选择 Enable automatic rotation (启用自动

  6. 对于 Select Rotation Interval (选择轮换间隔),请选择一个轮换间隔。

  7. 选择用于轮换的Lambda函数。有关自定义 Lambda 轮换函数的信息,请参阅 Lambda 中的了解和自定义 AWS Secrets Manager 用户指南 轮换函数

  8. 要配置密钥轮换,请选择 Next (下一步)。

要了解有关Secrets Manager轮换的更多信息,请参阅 AWS Secrets Manager 中的轮换AWS Secrets Manager 用户指南密钥

[SecretsManager.2] 配置有自动轮换的Secrets Manager密钥应成功轮换

类别:保护 > 安全开发

严重性:

资源: Secrets Manager 密钥

AWS Config 规则: secretsmanager-scheduled-rotation-success-check

参数:

该控制检查 AWS Secrets Manager 密钥是否根据轮换计划成功轮换。如果 RotationOccurringAsScheduled 为 ,则控制失败false。该控件不会评估未配置旋转的密钥。

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

Secrets Manager 可以轮换密钥。您可以使用轮换将长期密钥替换为短期密钥。轮换密钥会限制未经授权的用户可以使用遭盗用密钥的时间。因此,您应该频繁地轮换密钥。

除了将密钥配置为自动轮换之外,您还应确保这些密钥根据轮换计划成功轮换。

要了解有关轮换的更多信息,请参阅 AWS Secrets Manager 中的轮换AWS Secrets Manager 用户指南密钥

Remediation

如果自动轮换失败,则 Secrets Manager 可能会遇到配置错误。

要在 中轮换密钥Secrets Manager,您可以使用 Lambda 函数来定义如何与拥有密钥的数据库或服务进行交互。

有关如何诊断和修复与密钥轮换相关的常见错误的帮助,请参阅 AWS Secrets Manager 中的密钥AWS Secrets Manager 用户指南轮换问题排查。

[SNS.1] SNS 主题应使用 进行静态加密 AWS KMS

类别:保护 > 数据保护 > 静态数据加密

严重性:

资源:Amazon SNS主题

AWS Config 规则: sns-encrypted-kms

参数:

该控制检查是否使用 对 SNS 主题进行静态加密AWS KMS。

静态加密数据可降低存储在磁盘上的数据由未经过 身份验证的用户访问的风险AWS。它还添加了另一组访问控制,以限制未经授权的用户访问数据的能力。例如,需要 API 权限才能解密数据,然后才能读取数据。SNS 主题应进行静态加密,以增加一层安全性。有关更多信息,请参阅 中的静态加密Amazon Simple Notification Service 开发人员指南

Remediation

加密未加密的 SNS 主题

  1. 通过以下网址打开 Amazon SNS 控制台:https://console.amazonaws.cn/sns/v3/home

  2. 在导航窗格中,选择 Topics

  3. 选择要加密的主题的名称。

  4. 选择 Edit

  5. Encryption (加密) 下,选择 Enable Encryption (启用加密)。

  6. 选择要用于加密主题的 KMS 密钥。

  7. 选择保存更改

[SSM.1] EC2 实例应由 管理 AWS Systems Manager

类别:识别 > 清单

严重性:

资源:EC2 实例

AWS Config 规则: ec2-instance-managed-by-systems-manager

参数:

该控制检查您账户中的 EC2 实例是否由 AWS Systems Manager 管理。Systems Manager 是一项可用于查看和控制 AWS 基础设施的 AWS 服务。

为了帮助您维护安全性和合规性,Systems Manager 扫描您的托管实例。托管实例是配置为与 Systems Manager 一起使用的计算机。随后,Systems Manager 报告或对其检测到的任何策略违规行为采取纠正措施。Systems Manager 还可帮助您配置和维护托管实例。

要了解更多信息,请参阅“AWS Systems Manager 用户指南”。

Remediation

您可以使用 Systems Manager 控制台修复此问题。

确保 EC2 实例由 Systems Manager 管理

  1. https://console.amazonaws.cn/systems-manager/ 打开 AWS Systems Manager 控制台。

  2. 选择 Quick setup (快速设置)

  3. 在配置屏幕上,保留默认选项。

  4. 选择 Enable

要确定您的实例是否支持 Systems Manager 关联,请参阅 Systems Manager 中的AWS Systems Manager 用户指南先决条件

[SSM.2] 由 Systems Manager 管理的所有 EC2 实例都应符合修补要求

类别:检测 > 检测服务

严重性:

资源:SSM 修补程序合规性

AWS Config 规则: ec2-managedinstance-patch-compliance-status-check

参数:

该控制检查在实例上安装补丁后,Amazon EC2 Systems Manager 补丁合规性的合规性状态是 COMPLIANT 还是 NON_COMPLIANT。它仅检查 Systems Manager Patch Manager 管理的实例。

根据您的组织要求对 EC2 实例进行完全修补,可减少 AWS 账户面临的攻击面。

注意

以下区域不支持此控制。

  • 非洲(开普敦)

  • 欧洲(米兰)

  • 中东(巴林)

Remediation

修复不合规的补丁

  1. https://console.amazonaws.cn/systems-manager/ 打开 AWS Systems Manager 控制台。

  2. Instances & Nodes (实例和节点) 下,选择 Run Command,然后选择 Run command

  3. 选中 AWS-RunPatchBaseline 旁边的按钮。

  4. Operation (操作) 改为 Install (安装)

  5. 选择 Choose instances manually (手动选择实例),然后选择不合规的实例。

  6. 在页面底部选择 Run (运行)

  7. 在该命令完成后,要监控修补的实例的新合规性状态,请在导航窗格中选择 Compliance (合规性)

有关使用 Systems Manager 文档修补托管实例的更多信息,请参阅 SSM 中的关于修补实例Systems Manager的文档和使用 Run commandAWS Systems Manager 用户指南 命令运行命令。

[SSM.3] 由 管理的实例Systems Manager应具有 COMPLIANT 关联合规性状态

类别:Detect > Detection Services

严重性:

资源: AwsSSMAssociationCompliance

AWS Config 规则: ec2-managedinstance-association-compliance-status-check

参数:

该控制检查AWS Systems Manager关联合规性的状态是 还是在实例上运行关联COMPLIANTNON_COMPLIANT后。如果关联合规性状态为 ,则控制通过COMPLIANT

State Manager 关联是分配给托管实例的配置。该配置定义要在实例上保持的状态。例如,关联可以指定必须在实例上安装并运行防病毒软件,或者必须关闭某些端口。

创建一个或多个 State Manager 关联后,合规性状态信息将立即可供您使用。您可以在 控制台中查看合规性状态,也可以在AWS CLI命令或相应 Systems Manager API 操作的响应中查看合规性状态。对于 关联,配置合规性将显示合规性状态(CompliantNon-compliant)。它还显示分配给关联的严重性级别,例如 CriticalMedium

要了解有关 State Manager 关联合规性的更多信息,请参阅 中的关于 State Manager AWS Systems Manager 用户指南关联合规性

注意

非洲(开普敦) 或 欧洲(米兰) 中不支持该控制。

Remediation

失败的关联可能与不同的事物相关,包括目标和SSM文档名称。要修复此问题,您必须先确定并调查关联。然后,您可以更新关联以纠正特定问题。

您可以编辑关联以指定新名称、计划、严重级别或目标。编辑关联后,AWS Systems Manager 将创建新版本。

调查和更新失败的关联

  1. https://console.amazonaws.cn/systems-manager/ 打开 AWS Systems Manager 控制台。

  2. 在导航窗格中的 Instances & Nodes (实例和节点) 下,选择 Managed Instances (托管实例)。

  3. 选择关联状态为失败的实例 ID。

  4. 选择查看详细信息

  5. 选择关联

  6. 记下关联状态为 Failed (失败) 的关联的名称。这是您需要调查的关联。您需要在下一步中使用关联名称。

  7. 在导航窗格中的 Instances & Nodes (实例和节点) 下,选择 State Manager (状态管理器)。搜索关联名称,然后选择关联。

  8. 确定问题后,编辑失败的关联以纠正问题。有关如何编辑关联的信息,请参阅编辑关联

有关创建和编辑 State Manager 关联的更多信息,请参阅 中的在 Systems Manager AWS Systems Manager 用户指南 中使用关联。