为 Amazon RDS Custom for Oracle 设置您的环境
在创建 Amazon RDS Custom for Oracle 数据库实例之前,请执行以下任务。
主题
步骤 1:创建或重用对称加密 Amazon KMS 密钥
客户托管密钥是您的 Amazon 账户中由您创建、拥有和管理的 Amazon KMS keys。RDS Custom 需要客户自主管理型对称加密 KMS 密钥。创建 RDS Custom for Oracle 数据库实例时,您需要提供 KMS 密钥标识符。有关更多信息,请参阅 为 Amazon RDS Custom for Oracle 配置数据库实例。
您有以下选项:
-
如果您的 Amazon Web Services 账户中有现有的客户自主管理型 KMS 密钥,则可以将其与 RDS Custom 一起使用。无需进一步操作。
-
如果您已经为不同的 RDS Custom 引擎创建了客户自主管理型对称加密 KMS 密钥,可以重用相同的 KMS 密钥。无需进一步操作。
-
如果您的账户中没有现有的客户自主管理型对称加密 KMS 密钥,请按照《Amazon Key Management Service 开发人员指南》的创建密钥中的说明创建一个 KMS 密钥。
-
如果您正在创建 CEV 或 RDS Custom 数据库实例,而您的 KMS 密钥位于其他 Amazon Web Services 账户 中,请务必使用 Amazon CLI。您不能将 Amazon 控制台与跨账户 KMS 密钥一起使用。
重要
RDS Custom 不支持 Amazon 托管式 KMS 密钥。
确保您的对称加密密钥为 IAM 实例配置文件中的 kms:Decrypt
(IAM)角色授予对 kms:GenerateDataKey
和 Amazon Identity and Access Management 操作的访问权限。如果您的账户中有一个新的对称加密密钥,不需要进行任何更改。否则,请确保对称加密密钥的策略授予对这些操作的访问权限。
有关更多信息,请参阅 步骤 4:为 RDS Custom for Oracle 配置 IAM。
有关为 RDS Custom for Oracle 配置 IAM 的更多信息,请参阅步骤 4:为 RDS Custom for Oracle 配置 IAM。
步骤 2:下载并安装 Amazon CLI
Amazon 为您提供了命令行界面以使用 RDS Custom 功能。您可以使用 Amazon CLI 的版本 1 或版本 2。
有关下载和安装 Amazon CLI 的信息,请参阅安装或更新 Amazon CLI 的最新版本。
如果满足以下任一条件,请跳过此步骤:
-
您计划仅从 Amazon Web Services Management Console访问 RDS Custom。
-
您已为 Amazon RDS 或其他 RDS Custom 数据库引擎下载了 Amazon CLI。
步骤 3:提取 RDS Custom for Oracle 的 CloudFormation 模板
为了简化设置,我们强烈建议您使用 Amazon CloudFormation 模板创建 CloudFormation 堆栈。如果您计划手动配置 IAM 和 VPC,请跳过此步骤。
步骤 3a:下载 CloudFormation 模板文件
CloudFormation 模板是对构成堆栈的 Amazon 资源的声明。此模板存储为 JSON 文件。
下载 CloudFormation 模板文件
-
打开链接 custom-oracle-iam.zip 的上下文(右键单击)菜单,然后选择 Save Link As(将链接另存为)。
-
将该文件保存到您的计算机。
-
对于链接 custom-vpc.zip 重复之前的步骤。
如果您已经配置了适用于 RDS Custom 的 VPC,请跳过此步骤。
步骤 3b:提取 custom-oracle-iam.json
打开您下载的 custom-oracle-iam.zip
文件,然后解压缩文件 custom-oracle-iam.json
。文件的开头如下所示。
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "EncryptionKey": { "Type": "String", "Default": "*", "Description": "KMS Key ARN for encryption of data managed by RDS Custom and by DB Instances." } }, "Resources": { "RDSCustomInstanceServiceRole": { "Type": "AWS::IAM::Role", "Properties": { "RoleName": { "Fn::Sub": "AWSRDSCustomInstanceRole-${AWS::Region}" }, "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] },...
步骤 3c:提取 custom-vpc.json
注意
如果您为 RDS Custom for Oracle 配置了现有 VPC,则跳过此步骤。有关更多信息,请参阅 为 RDS Custom for Oracle 手动配置 VPC。
打开您下载的 custom-vpc.zip
文件,然后解压缩文件 custom-vpc.json
。文件的开头如下所示。
{ "AWSTemplateFormatVersion": "2010-09-09", "Parameters": { "PrivateVpc": { "Type": "AWS::EC2::VPC::Id", "Description": "Private VPC Id to use for RDS Custom DB Instances" }, "PrivateSubnets": { "Type": "List<AWS::EC2::Subnet::Id>", "Description": "Private Subnets to use for RDS Custom DB Instances" }, "RouteTable": { "Type": "String", "Description": "Route Table that must be associated with the PrivateSubnets and used by S3 VPC Endpoint", "AllowedPattern": "rtb-[0-9a-z]+" } }, "Resources": { "DBSubnetGroup": { "Type": "AWS::RDS::DBSubnetGroup", "Properties": { "DBSubnetGroupName": "rds-custom-private", "DBSubnetGroupDescription": "RDS Custom Private Network", "SubnetIds": { "Ref": "PrivateSubnets" } } },...
步骤 4:为 RDS Custom for Oracle 配置 IAM
您使用 IAM 角色或 IAM 用户(称为 IAM 实体),通过控制台或 Amazon CLI 创建 RDS Custom 数据库实例。此 IAM 实体必须具有创建实例所需的权限。
您可以使用 CloudFormation 或手动步骤配置 IAM。
重要
强烈建议您使用 Amazon CloudFormation 配置您的 RDS Custom for Oracle 环境。这种技术最简单,最不容易出错。
使用 CloudFormation 配置 IAM
当您对 IAM 使用 CloudFormation 模板时,该模板会创建以下必需的资源:
-
名为
AWSRDSCustomInstanceProfile-
的实例配置文件region
-
一个名为
AWSRDSCustomInstanceRole-
的服务角色region
-
附加到服务角色的名为
AWSRDSCustomIamRolePolicy
的访问策略
要采用 CloudFormation 配置 IAM
-
通过以下网址打开 CloudFormation 控制台:https://console.aws.amazon.com/cloudformation
。 -
开启 Create Stack(创建堆栈)向导,然后选择 Create Stack(创建堆栈)。
-
在 Create stack(创建堆栈)页面上,执行以下操作:
-
对于 Prepare template(准备模板),选择 Template is ready(模板就绪)。
-
对于 Template source(模板来源),选择 Upload a template file(上载模板文件)。
-
对于选择文件,请导航到 custom-oracle-iam.json 并选择此文件。
-
选择下一步。
-
-
在 Specify stack details(指定堆栈详细信息)页面中,请执行以下操作:
-
对于堆栈名称,输入
custom-oracle-iam
。 -
请选择 Next(下一步)。
-
-
在 配置堆栈选项 页面上,请选择 下一步。
-
在 Review custom-oracle-iam(查看 custom-oracle-iam)页面上,请执行以下操作:
-
选中我确认 Amazon CloudFormation 可能使用自定义名称创建 IAM 资源复选框。
-
选择提交。
CloudFormation 创建 RDS Custom for Oracle 所需的 IAM 角色。在左侧面板中,当 custom-oracle-iam 显示 CREATE_COMPLETE 时,继续执行下一步。
-
-
在左侧面板中,选择 custom-oracle-iam。在右侧面板中,执行以下操作:
-
选择堆栈信息。堆栈的 ID 格式为:arn:aws:cloudformation:
region
:account-no
:stack/custom-oracle-iam/identifier
。 -
选择资源。您将看到以下内容:
-
名为 AWSRDSCustomInstanceProfile-
region
的实例配置文件 -
名为 AWSRDSCustomInstanceRole-
region
的服务角色
创建 RDS Custom 数据库实例时,您需要提供实例配置文件 ID。
-
-
手动创建您的 IAM 角色和实例配置文件
使用 CloudFormation 时,配置是最简单的。但是,您还可以手动配置 IAM。对于手动设置,请执行以下操作:
步骤 1:创建 IAM 角色 AWSRDSCustomInstanceRoleForRdsCustomInstance
在此步骤中,您将使用命名格式 AWSRDSCustomInstanceRole-
创建角色。使用信任策略,以便 Amazon EC2 可以代入该角色。以下示例假设您已将环境变量 region
$REGION
设置为要在其中创建数据库实例的 Amazon Web Services 区域。
aws iam create-role \ --role-name AWSRDSCustomInstanceRole-$REGION \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] }'
步骤 2:将访问策略添加到 AWSRDSCustomInstanceRoleForRdsCustomInstance 中
在将内联策略嵌入 IAM 角色中时,内联策略将用作角色的访问(权限)策略的一部分。您将创建 AWSRDSCustomIamRolePolicy
策略,以允许 Amazon EC2 发送和接收消息,以及执行各种操作。
以下示例创建 AWSRDSCustomIamRolePolicy
名为的访问策略,然后将其添加到 IAM 角色 AWSRDSCustomInstanceRole-
。此示例假定您已设置以下环境变量:region
$REGION
-
将此变量设置为您计划在其中创建数据库实例的 Amazon Web Services 区域。
$ACCOUNT_ID
-
将此变量设置为您的 Amazon Web Services 账户号码。
$KMS_KEY
-
将此变量设置为您要用于 RDS Custom 数据库实例的 Amazon KMS key 的 Amazon 资源名称(ARN)。要指定多个 KMS 密钥,请将其添加到语句 ID (Sid) 11 的
Resources
部分。
aws iam put-role-policy \ --role-name AWSRDSCustomInstanceRole-$REGION \ --policy-name AWSRDSCustomIamRolePolicy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "1", "Effect": "Allow", "Action": [ "ssm:DescribeAssociation", "ssm:GetDeployablePatchSnapshotForInstance", "ssm:GetDocument", "ssm:DescribeDocument", "ssm:GetManifest", "ssm:GetParameter", "ssm:GetParameters", "ssm:ListAssociations", "ssm:ListInstanceAssociations", "ssm:PutInventory", "ssm:PutComplianceItems", "ssm:PutConfigurePackageResult", "ssm:UpdateAssociationStatus", "ssm:UpdateInstanceAssociationStatus", "ssm:UpdateInstanceInformation", "ssm:GetConnectionStatus", "ssm:DescribeInstanceInformation", "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": [ "*" ] }, { "Sid": "2", "Effect": "Allow", "Action": [ "ec2messages:AcknowledgeMessage", "ec2messages:DeleteMessage", "ec2messages:FailMessage", "ec2messages:GetEndpoint", "ec2messages:GetMessages", "ec2messages:SendReply" ], "Resource": [ "*" ] }, { "Sid": "3", "Effect": "Allow", "Action": [ "logs:PutRetentionPolicy", "logs:PutLogEvents", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "logs:CreateLogStream", "logs:CreateLogGroup" ], "Resource": [ "arn:aws:logs:'$REGION':'$ACCOUNT_ID':log-group:rds-custom-instance*" ] }, { "Sid": "4", "Effect": "Allow", "Action": [ "s3:putObject", "s3:getObject", "s3:getObjectVersion" ], "Resource": [ "arn:aws:s3:::do-not-delete-rds-custom-*/*" ] }, { "Sid": "5", "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData" ], "Resource": [ "*" ], "Condition": { "StringEquals": { "cloudwatch:namespace": [ "RDSCustomForOracle/Agent" ] } } }, { "Sid": "6", "Effect": "Allow", "Action": [ "events:PutEvents" ], "Resource": [ "*" ] }, { "Sid": "7", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": [ "arn:aws:secretsmanager:'$REGION':'$ACCOUNT_ID':secret:do-not-delete-rds-custom-*" ] }, { "Sid": "8", "Effect": "Allow", "Action": [ "s3:ListBucketVersions" ], "Resource": [ "arn:aws:s3:::do-not-delete-rds-custom-*" ] }, { "Sid": "9", "Effect": "Allow", "Action": "ec2:CreateSnapshots", "Resource": [ "arn:aws:ec2:*:*:instance/*", "arn:aws:ec2:*:*:volume/*" ], "Condition": { "StringEquals": { "ec2:ResourceTag/AWSRDSCustom": "custom-oracle" } } }, { "Sid": "10", "Effect": "Allow", "Action": "ec2:CreateSnapshots", "Resource": [ "arn:aws:ec2:*::snapshot/*" ] }, { "Sid": "11", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey" ], "Resource": [ "arn:aws:kms:'$REGION':'$ACCOUNT_ID':key/'$KMS_KEY'" ] }, { "Sid": "12", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*", "Condition": { "StringLike": { "ec2:CreateAction": [ "CreateSnapshots" ] } } } ] }'
步骤 3:创建 RDS Custom 实例配置文件 AWSRDSCustomInstanceProfile
实例配置文件是包含单个 IAM 角色的容器。RDS Custom 使用实例配置文件将角色传递给实例。
如果您使用 CLI 创建角色,则是以单独操作的形式创建角色和实例配置文件,可以为它们提供不同的名称。按如下方式创建您的 IAM 实例配置文件,并使用格式 AWSRDSCustomInstanceProfile-
对该配置文件命名。以下示例假设您已将环境变量 region
$REGION
设置为要在其中创建数据库实例的 Amazon Web Services 区域。
aws iam create-instance-profile \ --instance-profile-name AWSRDSCustomInstanceProfile-$REGION
步骤 4:将 AWSRDSCustomInstanceRoleForRdsCustomInstance 添加到 AWSRDSCustomInstanceProfile
将您的 IAM 角色添加到您之前创建的实例配置文件。以下示例假设您已将环境变量 $REGION
设置为要在其中创建数据库实例的 Amazon Web Services 区域。
aws iam add-role-to-instance-profile \ --instance-profile-name AWSRDSCustomInstanceProfile-$REGION \ --role-name AWSRDSCustomInstanceRole-$REGION
步骤 5:为您的 IAM 用户或角色授予所需的权限
确保创建 CEV 或 RDS Custom 数据库实例的 IAM 主体(用户或角色)具有以下任一策略:
-
AdministratorAccess
策略 -
具有 Amazon S3 和 Amazon KMS、CEV 创建和数据库实例创建所需权限的
AmazonRDSFullAccess
策略
Amazon S3 和 Amazon KMS 所需的 IAM 权限
要创建 CEV 或 RDS Custom for Oracle 数据库实例,IAM 主体需要访问 Amazon S3 和 Amazon KMS。以下示例 JSON 策略授予所需的权限。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateS3Bucket", "Effect": "Allow", "Action": [ "s3:CreateBucket", "s3:PutBucketPolicy", "s3:PutBucketObjectLockConfiguration", "s3:PutBucketVersioning" ], "Resource": "arn:aws:s3:::do-not-delete-rds-custom-*" }, { "Sid": "CreateKmsGrant", "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:DescribeKey" ], "Resource": "*" } ] }
有关 kms:CreateGrant
权限的更多信息,请参阅 Amazon KMS key 管理。
创建 CEV 所需的 IAM 权限
要创建 CEV,IAM 主体需要以下额外权限:
s3:GetObjectAcl s3:GetObject s3:GetObjectTagging s3:ListBucket mediaimport:CreateDatabaseBinarySnapshot
以下示例 JSON 策略授予访问桶 my-custom-installation-files
及其内容所需的额外权限。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AccessToS3MediaBucket", "Effect": "Allow", "Action": [ "s3:GetObjectAcl", "s3:GetObject", "s3:GetObjectTagging", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::
my-custom-installation-files
", "arn:aws:s3:::my-custom-installation-files
/*" ] }, { "Sid": "PermissionForByom", "Effect": "Allow", "Action": [ "mediaimport:CreateDatabaseBinarySnapshot" ], "Resource": "*" } ] }
您可以使用 S3 存储桶策略向调用者的账户授予 Amazon S3 的类似权限。
从 CEV 创建数据库实例所需的 IAM 权限
要从现有的 CEV 创建 RDS Custom for Oracle 数据库实例,IAM 主体需要以下额外权限。
iam:SimulatePrincipalPolicy cloudtrail:CreateTrail cloudtrail:StartLogging
以下示例 JSON 策略授予验证 IAM 角色和将信息记录到 Amazon CloudTrail 所需的权限。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ValidateIamRole", "Effect": "Allow", "Action": "iam:SimulatePrincipalPolicy", "Resource": "*" }, { "Sid": "CreateCloudTrail", "Effect": "Allow", "Action": [ "cloudtrail:CreateTrail", "cloudtrail:StartLogging" ], "Resource": "arn:aws:cloudtrail:*:*:trail/do-not-delete-rds-custom-*" } ] }
步骤 6:为 RDS Custom for Oracle 配置 VPC
就像 Amazon EC2 实例或 Amazon RDS 实例一样,您的 RDS Custom 数据库实例位于基于 Amazon VPC 服务的虚拟私有云 (VPC) 中。您将提供并配置自己的 VPC。与 RDS Custom for SQL Server 不同,RDS Custom for Oracle 不创建访问控制列表或安全组。您必须附加自己的安全组、子网和路由表。
您可以使用 CloudFormation 或手动流程配置您的虚拟私有云(VPC)。
重要
强烈建议您使用 Amazon CloudFormation 配置您的 RDS Custom for Oracle 环境。这种技术最简单,最不容易出错。
使用 CloudFormation 配置 VPC(建议)
如果您已经为其他 RDS Custom 引擎配置了 VPC 并且想要重用现有的 VPC,请跳过此步骤。此部分假设如下:
-
您已使用 CloudFormation 创建 IAM 实例配置文件和角色。
-
您知道路由表 ID。
要使数据库实例成为私有实例,该实例必须位于私有子网中。要使子网成为私有子网,该子网不得与具有原定设置互联网网关的路由表关联。有关更多信息,请参阅《Amazon VPC 用户指南》中的配置路由表。
当您对 VPC 使用 CloudFormation 模板时,该模板会创建以下资源:
-
私有 VPC
-
名为
rds-custom-private
的子网组 -
以下 VPC 端点,您的数据库实例使用这些端点与从属 Amazon Web Services 服务进行通信:
-
com.amazonaws.
region
.ec2messages -
com.amazonaws.
region
.events -
com.amazonaws.
region
.logs -
com.amazonaws.
region
.monitoring -
com.amazonaws.
region
.s3 -
com.amazonaws.
region
.secretsmanager -
com.amazonaws.
region
.ssm -
com.amazonaws.
region
.ssmmessages
注意
对于使用现有账户的复杂网络设置,如果访问权限尚不存在,建议您手动配置对从属服务的访问权限。有关更多信息,请参阅 确保您的 VPC 可以访问从属 Amazon Web Services 服务。
-
要采用 CloudFormation 配置 VPC
-
通过以下网址打开 CloudFormation 控制台:https://console.aws.amazon.com/cloudformation
。 -
启动“创建堆栈”向导,选择创建堆栈,然后选择使用新资源(标准)。
-
在 Create stack(创建堆栈)页面上,执行以下操作:
-
对于 Prepare template(准备模板),选择 Template is ready(模板就绪)。
-
在 Template source(模板来源)项下,选择 Upload a template file(上载模板文件)。
-
对于 Choose file(选择文件),请导航到
custom-vpc.json
并选择。 -
选择下一步。
-
-
在 Specify stack details(指定堆栈详细信息)页面中,请执行以下操作:
-
对于堆栈名称,输入
custom-vpc
。 -
对于 Parameters(参数),请选择要用于 RDS Custom 数据库实例的私有子网。
-
选择要用于 RDS Custom 数据库实例的私有 VPC ID。
-
输入与私有子网关联的路由表。
-
请选择 Next(下一步)。
-
-
在 配置堆栈选项 页面上,请选择 下一步。
-
在审核 custom-vpc 页面上,选择提交。
CloudFormation 会配置您的私有 VPC。在左侧面板中,当 custom-vpc 显示 CREATE_COMPLETE 时,继续执行下一步。
-
(可选)查看您的 VPC 的详细信息。在堆栈窗格中,选择 custom-vpc。在右窗格中,执行以下操作:
-
选择堆栈信息。堆栈的 ID 格式为:arn:aws:cloudformation:
region
:account-no
:stack/custom-vpc/identifier
。 -
选择资源。您应该看到一个名为 rds-custom-private 的子网组和若干使用命名格式 vpce-
string
的 VPC 端点。每个端点对应于 RDS Custom 需要与之通信的一项 Amazon Web Services 服务。有关更多信息,请参阅 确保您的 VPC 可以访问从属 Amazon Web Services 服务。 -
选择参数。您应该看到私有子网、私有 VPC 和您在创建堆栈时指定的路由表。在创建数据库实例时,您需要提供 VPC ID 和子网组。
-
为 RDS Custom for Oracle 手动配置 VPC
除了使用 Amazon CloudFormation 自动创建 VPC 之外,您还可以手动配置 VPC。当您具有使用现有资源的复杂网络设置时,此选项可能是最好的。
确保您的 VPC 可以访问从属 Amazon Web Services 服务
RDS Custom 将通信从数据库实例发送到其他 Amazon Web Services 服务。确保可以从您在其中创建 RDS Custom 数据库实例的子网访问以下服务:
-
Amazon CloudWatch
-
Amazon CloudWatch Logs
-
Amazon CloudWatch Events
-
Amazon EC2
-
Amazon EventBridge
-
Amazon S3
-
Amazon Secrets Manager
-
Amazon Systems Manager
如果创建多可用区部署
Amazon Simple Queue Service
如果 RDS Custom 无法与必需的服务通信,它会发布以下事件:
Database instance in incompatible-network. SSM Agent connection not available. Amazon RDS can't connect to the dependent Amazon services.
Database instance in incompatible-network. Amazon RDS can't connect to dependent Amazon services. Make sure port 443 (HTTPS) allows outbound connections, and try again. "Failed to connect to the following services: s3 events"
为避免 incompatible-network
错误,请确保您的 RDS Custom 数据库实例与 Amazon Web Services 服务之间通信所涉及的 VPC 组件满足以下要求:
-
数据库实例可以在端口 443 上建立到其他 Amazon Web Services 服务的出站连接。
-
VPC 允许对源自 RDS Custom 数据库实例的请求进行传入响应。
-
RDS Custom 可以正确解析每个 Amazon Web Services 服务的端点的域名。
如果您已经为其他 RDS Custom 数据库引擎配置了 VPC,可以重用该 VPC 并跳过此过程。
配置实例元数据服务
请确保您的实例可以执行以下操作:
-
可使用 Instance Metadata Service Version 2 (IMDSv2) 来访问实例元数据服务。
-
允许通过端口 80 (HTTP) 到 IMDS 链接 IP 地址的出站通信。
-
从
http://169.254.169.254
IMDSv2 链接请求实例元数据。
有关更多信息,请参阅《Amazon EC2 用户指南》中的使用 IMDSv2。
RDS Custom for Oracle 自动化程序预设情况下使用 IMDSv2,方法是在底层 Amazon EC2 实例上设置 HttpTokens=enabled
。但是,您也可以根据需要使用 IMDSv1。有关更多信息,请参阅《Amazon EC2 用户指南》https://docs.amazonaws.cn/AWSEC2/latest/UserGuide/configuring-instance-metadata-options.html中的配置实例元数据选项。