Amazon RDS Custom 中的安全性 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

Amazon RDS Custom 中的安全性

自行熟悉 RDS Custom 的安全注意事项。

RDS Custom 如何代表您安全地管理任务

RDS Custom 使用以下工具和方法来代表您安全地运行操作:

AWSServiceRoleForRDSCustom 服务相关角色

服务相关角色是由服务预定义的,包含该服务代表您调用其他 Amazon Web Services所需的所有权限。对于 RDS Custom,AWSServiceRoleForRDSCustom 是根据最低权限原则定义的服务相关角色。RDS Custom 使用 AmazonRDSCustomServiceRolePolicy 中的权限(即附加到此角色的策略)来执行大多数预置和所有脱离主机的管理任务。有关更多信息,请参阅 AmazonRDSCustomServiceRolePolicy

在主机上执行任务时,RDS Custom 自动化通过 Amazon Systems Manager 使用来自服务相关角色的凭证来运行命令。您可以通过 Systems Manager 命令历史记录和 Amazon CloudTrail 来审计命令历史记录。Systems Manager 使用您的网络设置连接到您的 RDS Custom 数据库实例。有关更多信息,请参阅 步骤 4:为 RDS Custom for Oracle 配置 IAM

临时 IAM 凭证

在预置或删除资源时,RDS Custom 有时会使用从发出调用的 IAM 主体的凭证中派生的临时凭证。这些 IAM 凭证受附加到该主体的 IAM policy 限制,并在操作完成后过期。要了解使用 RDS Custom 的 IAM 主体所需的权限,请参阅步骤 5:为您的 IAM 用户或角色授予所需的权限

Amazon EC2 实例配置文件

EC2 实例配置文件是 IAM 角色的容器,可用来将角色信息传递给 EC2 实例。EC2 实例是 RDS Custom 数据库实例的基础。创建 RDS Custom 数据库实例时,您需要提供实例配置文件。RDS Custom 在执行基于主机的管理任务(例如备份)时,使用 EC2 实例配置文件凭证。有关更多信息,请参阅 手动创建您的 IAM 角色和实例配置文件

SSH 密钥对

当 RDS Custom 创建作为数据库实例基础的 EC2 实例时,它会代表您创建 SSH 密钥对。密钥使用命名前缀 do-not-delete-rds-custom-ssh-privatekey-db-。Amazon Secrets Manager 将此 SSH 私有密钥存储为您的 Amazon Web Services 账户中的密钥。Amazon RDS 不存储、访问或使用这些凭证。有关更多信息,请参阅 Amazon EC2 密钥对和 Linux 实例

SSL 证书

RDS Custom 数据库实例不支持托管式 SSL 证书。如果要部署 SSL,则可以在自己的钱包中自行管理 SSL 证书,并创建 SSL 侦听器来保护客户端数据库之间的连接或进行数据库复制。有关更多信息,请参阅 Oracle 数据库文档中的配置传输层安全性协议身份验证

保护 Amazon S3 桶免受混淆代理人问题影响

创建 Amazon RDS Custom for Oracle 自定义引擎版本(CEV)或 RDS Custom for SQL Server 数据库实例时,RDS Custom 会创建一个 Amazon S3 桶。S3 桶存储相关文件,例如 CEV 构件、重做(事务)日志、支持外围的配置项目以及 Amazon CloudTrail 日志。

您可以通过使用全局条件上下文键来防止混淆代理人问题,从而使这些 S3 桶更加安全。有关更多信息,请参阅 防范跨服务混淆代理问题

以下 RDS Custom for Oracle 示例显示了如何在 S3 桶策略中使用 aws:SourceArnaws:SourceAccount 全局条件上下文键。对于 RDS Custom for Oracle,请确保包含 CEV 和数据库实例的 Amazon 资源名称(ARN)。对于 RDS Custom for SQL Server,确请保包含数据库实例的 ARN。

... { "Sid": "AWSRDSCustomForOracleInstancesObjectLevelAccess", "Effect": "Allow", "Principal": { "Service": "custom.rds.amazonaws.com" }, "Action": [ "s3:GetObject", "s3:GetObjectVersion", "s3:DeleteObject", "s3:DeleteObjectVersion", "s3:GetObjectRetention", "s3:BypassGovernanceRetention" ], "Resource": "arn:aws:s3:::do-not-delete-rds-custom-123456789012-us-east-2-c8a6f7/RDSCustomForOracle/Instances/*", "Condition": { "ArnLike": { "aws:SourceArn": [ "arn:aws:rds:us-east-2:123456789012:db:*", "arn:aws:rds:us-east-2:123456789012:cev:*/*" ] }, "StringEquals": { "aws:SourceAccount": "123456789012" } } }, ...

轮换 RDS Custom for Oracle 凭证以遵循合规性计划

一些合规性计划要求定期更改数据库用户凭证,例如每 90 天更改一次。RDS Custom for Oracle 会自动轮换某些预定义数据库用户的凭证。

自动轮换预定义用户的凭证

如果 RDS Custom for Oracle 数据库实例托管在 Amazon RDS 中,则以下预定义 Oracle 用户的凭证每 30 天自动轮换一次。之前用户的凭证位于 Amazon Secrets Manager 中。

预定义 Oracle 用户
数据库用户创建者支持的引擎版本注意事项
SYSOraclecustom-oracle-ee 和 custom-oracle-ee-cdb
SYSTEMOraclecustom-oracle-ee 和 custom-oracle-ee-cdb
RDSADMINRDScustom-oracle-ee
C##RDSADMINRDScustom-oracle-ee-cdb带有 C## 前缀的用户名仅存在于 CDB 中。有关 CDB 的更多信息,请参阅 Amazon RDS Custom for Oracle 架构概述
RDS_DATAGUARDRDScustom-oracle-ee此用户仅存在于只读副本、只读副本的源数据库以及您已使用 Oracle Data Guard 物理迁移到 RDS Custom 的数据库中。
C##RDS_DATAGUARDRDScustom-oracle-ee-cdb此用户仅存在于只读副本、只读副本的源数据库以及您已使用 Oracle Data Guard 物理迁移到 RDS Custom 的数据库中。带有 C## 前缀的用户名仅存在于 CDB 中。有关 CDB 的更多信息,请参阅 Amazon RDS Custom for Oracle 架构概述

自动凭证轮换的一个例外是您手动配置为备用数据库的 RDS Custom for Oracle 数据库实例。RDS 仅轮换您已使用 create-db-instance-read-replica CLI 命令或 CreateDBInstanceReadReplica API 创建的只读副本的凭证。

轮换用户凭证的指南

为确保您的凭证根据您的合规性计划进行轮换,请注意以下指南:

  • 如果您的数据库实例自动轮换凭证,请不要手动更改或删除预定义 Oracle 用户中列出的用户的密钥、密码文件或密码。否则,RDS Custom 可能会将您的数据库实例置于支持边界之外,这会暂停自动轮换。

  • RDS 主用户不是预定义的,因此您负责手动更改密码或在 Secrets Manager 中设置自动轮换。有关更多信息,请参阅轮换 Amazon Secrets Manager 密钥

手动轮换用户凭证

对于以下类别的数据库,RDS 不会自动轮换在预定义 Oracle 用户中列出的用户的凭证:

  • 您手动配置为用作备用数据库的数据库。

  • 本地数据库。

  • 位于支持边界之外或处于 RDS Custom 自动化无法运行的状态的数据库实例。在这种情况下,RDS Custom 也不会轮换密钥。

如果您的数据库属于上述任何类别,则必须手动轮换用户凭证。

手动轮换数据库实例的用户凭证
  1. 登录 Amazon Web Services Management Console 并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 数据库中,确保 RDS 当前未备份您的数据库实例或执行配置高可用性等操作。

  3. 在数据库详细信息页面中,选择配置并记下数据库实例的资源 ID。或者,您可以使用 Amazon CLI 命令 describe-db-instances

  4. 打开 Secrets Manager 控制台,网址为 https://console.aws.amazon.com/secretsmanager/

  5. 在搜索框中,输入您的数据库资源 ID,然后按以下形式查找密钥:

    do-not-delete-rds-custom-db-resource-id-numeric-string

    此密钥存储 RDSADMINSYSSYSTEM 的密码。以下示例密钥适用于具有数据库资源 ID db-ABCDEFG12HIJKLNMNOPQRS3TUVWX 的数据库实例:

    do-not-delete-rds-custom-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-123456
    重要

    如果您的数据库实例是只读副本并使用 custom-oracle-ee-cdb 引擎,则存在两个带有后缀 db-resource-id-numeric-string 的密钥,一个用于主用户,另一个用于 RDSADMINSYSSYSTEM。要找到正确的密钥,请在主机上运行以下命令:

    cat /opt/aws/rdscustomagent/config/database_metadata.json | python3 -c "import sys,json; print(json.load(sys.stdin)['dbMonitoringUserPassword'])"

    dbMonitoringUserPassword 属性表示 RDSADMINSYSSYSTEM 的密钥。

  6. 如果您的数据库实例存在于 Oracle Data Guard 配置中,请按以下形式查找密钥:

    do-not-delete-rds-custom-db-resource-id-numeric-string-dg

    此密钥存储了 RDS_DATAGUARD 的密码。以下示例密钥适用于具有数据库资源 ID db-ABCDEFG12HIJKLNMNOPQRS3TUVWX 的数据库实例:

    do-not-delete-rds-custom-db-ABCDEFG12HIJKLNMNOPQRS3TUVWX-789012-dg
  7. 对于预定义 Oracle 用户中列出的所有数据库用户,按照修改 Amazon Secrets Manager 密钥中的说明更新密码。

  8. 如果您的数据库是独立数据库或 Oracle Data Guard 配置中的源数据库:

    1. 启动 Oracle SQL 客户端并以 SYS 身份登录。

    2. 预定义 Oracle 用户中列出的每个数据库用户运行以下形式的 SQL 语句:

      ALTER USER user-name IDENTIFIED BY pwd-from-secrets-manager ACCOUNT UNLOCK;

      例如,如果存储在 Secrets Manager 中的 RDSADMIN 的新密码为 pwd-123,请运行以下语句:

      ALTER USER RDSADMIN IDENTIFIED BY pwd-123 ACCOUNT UNLOCK;
  9. 如果您的数据库实例运行 Oracle Database 12c 版本 1(12.1)并由 Oracle Data Guard 管理,请手动将密码文件(orapw)从主数据库实例复制到每个备用数据库实例。

    如果您的数据库实例托管在 Amazon RDS 中,则密码文件位置为 /rdsdbdata/config/orapw。对于不在 Amazon RDS 中托管的数据库,在 Linux 和 UNIX 上的原定设置位置为 $ORACLE_HOME/dbs/orapw$ORACLE_SID,在 Windows 上的原定设置位置为 %ORACLE_HOME%\database\PWD%ORACLE_SID%.ora