0Pricing
Cloud & IT Cert Prep · 课时

RDS 安全性:加密与参数组

使用 KMS 对静态 RDS 数据进行加密,通过参数组控制连接级加密,并使用 IAM 身份验证加强安全性。

RDS 安全性:加密与参数组 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。

RDS 静态加密

RDS 支持使用 AWS Key Management Service(KMS)进行静态加密。在创建数据库实例时启用加密后,底层 EBS 卷上的所有数据、自动备份、快照和 Read Replicas 都会使用指定的 KMS 密钥进行加密。

必须在创建时启用加密——您无法直接在原位置加密现有的未加密实例。解决方法是先创建未加密的快照,再复制该快照并启用加密,然后从加密快照恢复。KMS 密钥可以是 AWS 托管密钥,也可以是用于获得更多控制权和审计能力的客户托管密钥(CMK)。

# Create an encrypted RDS instance
aws rds create-db-instance \
  --db-instance-identifier mydb-encrypted \
  --engine mysql \
  --db-instance-class db.t3.micro \
  --master-username admin \
  --master-user-password MyPass123! \
  --allocated-storage 20 \
  --storage-encrypted \
  --kms-key-id arn:aws:kms:us-east-1:123456789:key/my-key-id

加密现有的未加密 RDS 实例

由于无法为现有实例启用加密,请按照以下迁移路径操作:

  1. 为未加密实例创建手动快照
  2. 复制快照,并在复制过程中启用加密,同时指定一个 KMS 密钥
  3. 从加密快照恢复新的数据库实例
  4. 将应用程序端点更新为新实例
  5. 删除旧的未加密实例

除非使用 DMS 在切换前让新的加密实例保持同步,否则此方法会造成一定的停机时间。

# Copy snapshot with encryption enabled
aws rds copy-db-snapshot \
  --source-db-snapshot-identifier mydb-unencrypted-snap \
  --target-db-snapshot-identifier mydb-encrypted-snap \
  --kms-key-id alias/aws/rds

使用 SSL/TLS 加密传输中的数据

RDS 使用 SSL/TLS 加密传输中的数据。每种数据库引擎都会提供可下载的 CA 证书,客户端驱动程序使用该证书验证服务器的身份。若要强制使用 SSL 连接,请配置数据库引擎以拒绝未加密的连接。

对于 MySQL,请在参数组中将参数 require_secure_transport = ON 设置为指定值。对于 PostgreSQL,请设置 ssl = 1,并可选地设置 rds.force_ssl = 1,以完全拒绝非 SSL 连接。许多 Java 和 Python 数据库驱动程序还接受连接字符串参数 sslmode=require。

# Connect to RDS MySQL over SSL
mysql -h mydb.abcd1234.us-east-1.rds.amazonaws.com \
  -u admin -p \
  --ssl-ca=rds-ca-2019-root.pem \
  --ssl-verify-server-cert

参数组:它们是什么

参数组是命名的数据库引擎配置设置集合,您可以将其附加到 RDS 实例。它们相当于在 MySQL 中编辑 my.cnf 或在 PostgreSQL 中编辑 postgresql.conf,但由 AWS 管理,并按数据库引擎系列进行版本控制。

AWS 为每个数据库引擎版本提供一个默认参数组,但无法编辑其中的设置。若要自定义参数,请创建自定义参数组,修改所需参数,然后将其与数据库实例关联。静态参数的更改需要重启;动态参数会立即生效。

# Create a custom parameter group
aws rds create-db-parameter-group \
  --db-parameter-group-name my-mysql8-params \
  --db-parameter-group-family mysql8.0 \
  --description 'Custom MySQL 8.0 parameters'

修改参数组设置

创建自定义参数组后,您可以使用 modify-db-parameter-group CLI 命令或控制台修改单个参数。参数具有应用方法:立即(无需重启即可生效)或待重启(仅在下一次实例重启后生效)。

考试需要了解的重要参数包括:max_connections(限制并发连接数)、innodb_buffer_pool_size(MySQL 内存缓存大小)、log_bin_trust_function_creators(允许写入二进制日志的存储函数)以及 rds.force_ssl(强制 PostgreSQL 使用 SSL)。

# Force SSL in a PostgreSQL parameter group
aws rds modify-db-parameter-group \
  --db-parameter-group-name my-postgres-params \
  --parameters 'ParameterName=rds.force_ssl,ParameterValue=1,ApplyMethod=immediate'

用于附加功能的选项组

选项组与参数组类似,但它们控制的是数据库引擎的附加功能,而不是配置调优。选项组主要用于 Oracle 和 SQL Server,以启用 Oracle Application Express(APEX)、SQL Server 透明数据加密(TDE)或 SQL Server Active Directory 身份验证等功能。

选项组中的每个选项都可能有自己的设置。选项组按数据库引擎系列进行版本控制,并且必须与数据库实例关联。大多数开源数据库引擎(MySQL、PostgreSQL、MariaDB)很少需要自定义选项组。

IAM 数据库身份验证

RDS 支持 MySQL 和 PostgreSQL 数据库引擎的IAM 数据库身份验证。应用程序不再使用静态用户名和密码,而是通过承担 IAM 角色,并使用 generate-db-auth-token AWS CLI 命令或 SDK 调用生成临时身份验证令牌(有效期为 15 分钟)。

其优势包括无需长期有效的数据库密码、通过 IAM 策略自动轮换凭证,以及集中式访问控制。此功能要求在实例上启用 --enable-iam-database-authentication,并创建一个映射到 IAM 角色的数据库用户。

# Generate an RDS IAM auth token
aws rds generate-db-auth-token \
  --hostname mydb.abcd1234.us-east-1.rds.amazonaws.com \
  --port 3306 \
  --username mydbuser \
  --region us-east-1

Secrets Manager 与 RDS 的集成

AWS Secrets Manager 可以存储并自动轮换您的 RDS 主密码和应用程序凭证。启用轮换后,Secrets Manager 会调用 Lambda 函数来更新数据库密码,并将新值存储在密钥中;您的应用程序通过 Secrets Manager API 获取最新的密钥值,因此始终拥有有效凭证。

在控制台中创建 RDS 实例时,您可以选择让 Secrets Manager 管理主凭证。这样可以避免在代码或环境变量中硬编码密码。

# Retrieve RDS credentials from Secrets Manager
aws secretsmanager get-secret-value \
  --secret-id rds!db-1234abcd-5678-efgh-ijkl-mnopqrstuvwx \
  --query SecretString \
  --output text | python3 -m json.tool

VPC 与安全组控制

RDS 实例运行在 VPC 内,并使用数据库子网组定义实例可以放置在哪些子网中(这些子网分布在多个 AZ 中)。最佳实践是将 RDS 放置在私有子网中,并且不允许直接访问互联网。

安全组控制哪些 IP 地址和其他安全组可以访问数据库端口(例如 MySQL 的 TCP 3306 端口)。应用层的安全组应是 RDS 安全组中唯一允许的来源,以实施网络层面的最小权限原则。切勿将 0.0.0.0/0(所有流量)配置为 RDS 安全组的入站规则。

增强监控与审计日志

增强监控每隔 1–60 秒将操作系统级指标(CPU、内存、文件系统、磁盘 I/O)发布到 CloudWatch Logs,相比默认的 60 秒 CloudWatch 指标,它能提供更细的粒度。它使用运行在数据库主机上的代理,并且适用于除 SQL Server 镜像模式以外的所有数据库引擎。

数据库审计日志(MySQL 的常规查询日志、慢查询日志;PostgreSQL 的 pgaudit)可以发布到 CloudWatch Logs,以便进行合规性分析。请通过参数组启用这些日志,然后在 RDS 控制台的日志导出下配置日志导出。

# Enable PostgreSQL logs export to CloudWatch
aws rds modify-db-instance \
  --db-instance-identifier mydb \
  --cloudwatch-logs-export-configuration 'EnableLogTypes=[postgresql,upgrade]' \
  --apply-immediately

安全最佳实践总结

针对 SAA-C03 考试,RDS 的关键安全最佳实践包括:

  • 创建实例时,使用 KMS CMK 启用静态数据加密
  • 通过参数组设置强制执行传输中的 SSL/TLS 加密
  • 将实例放置在具有严格安全组规则的私有子网中
  • 使用IAM 数据库身份验证或 Secrets Manager,避免使用静态密码
  • 启用 CloudTrail 以记录 RDS API 调用,并启用 CloudWatch Logs 以记录数据库审计日志
  • 使用 AWS Config 规则(例如 rds-instance-public-access-check)检测错误配置

快速检查

请测试您对本课 AWS Solutions Architect(SAA-C03)概念的理解。

课程回顾

本课介绍了以下内容:RDS 静态数据加密使用 KMS,并且必须在创建时启用;参数组控制数据库引擎配置,包括强制执行传输中的 SSL/TLS 加密;IAM 数据库身份验证和 Secrets Manager可以消除静态数据库密码。接下来,我们将学习 DynamoDB 表、项目和主键设计。

常见问题解答

「RDS 安全性:加密与参数组」课时是免费的吗?

是的 — 「RDS 安全性:加密与参数组」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。

「RDS 安全性:加密与参数组」这节课中我会学到什么?

使用 KMS 对静态 RDS 数据进行加密,通过参数组控制连接级加密,并使用 IAM 身份验证加强安全性。 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Cloud & IT Cert Prep 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。

「RDS 安全性:加密与参数组」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?

能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. RDS 引擎与实例类别
  2. 多可用区与自动备份
  3. 用于读取扩展的只读副本
  4. RDS 安全性:加密与参数组
← 返回 Cloud & IT Cert Prep