为 Amazon RDS Custom for SQL Server 设置环境 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

为 Amazon RDS Custom for SQL Server 设置环境

在为 Amazon RDS Custom for SQL Server 数据库实例创建和管理数据库实例之前,请确保执行以下任务。

设置 RDS Custom for SQL Server 的先决条件

在创建 RDS Custom for SQL Server 数据库实例之前,请确保您拥有自己的 Virtual Private Cloud (VPC) 和安全组配置。此网络配置必须满足 RDS Custom 的要求。

对于每项任务,RDS Custom 主题描述了该任务的特定要求和限制。例如,在创建 RDS Custom 数据库实例时,请使用 RDS Custom 的数据库实例类支持 中列出的其中一个 SQL Server 实例。

有关 RDS Custom for SQL Server 的一般要求,请参阅 RDS Custom for SQL Server 的一般要求

请确保您有对称的 Amazon KMS 密钥

对于 RDS Custom 而言,对称的 Amazon KMS 密钥是必须的。在 RDS Custom for SQL Server 数据库实例时,必须提供 Amazon KMS 密钥标识符。有关更多信息,请参阅 为 Amazon RDS Custom for SQL Server 创建并连接到数据库实例

您有以下选项:

  • 如果您的账户中有现有的 KMS 密钥,则可以将其与 RDS Custom 一起使用。无需进一步操作。

  • 如果您已经为 RDS Custom for Oracle 创建了对称的 KMS 密钥,则可以重复使用相同的 KMS 密钥。无需进一步操作。

  • 如果您的账户中没有现有的对称 KMS 密钥,请按照《Amazon Key Management Service 开发人员指南》中的创建密钥中的说明创建一个 KMS 密钥。

RDS Custom 不支持 Amazon 管理的 KMS 密钥。

要使用的对称密钥必须在您的 IAM 实例配置文件中提供 Amazon Identity and Access Management (IAM) 角色,且该角色应有 kms:Decryptkms:GenerateDataKey 操作的访问权限。如果您的账户中有一个新的对称密钥,则不需要进行任何更改。否则,请确保对称密钥的策略可以提供对这些操作的访问权限。

有关为 RDS Custom for SQL Server 配置 IAM 的更多信息,请参阅 配置 IAM 和您的 VPC

下载并安装 Amazon CLI

Amazon 为您提供了命令行界面以使用 RDS Custom 功能。您可以使用 Amazon CLI 的版本 1 或版本 2。

有关下载和安装 Amazon CLI 的信息,请参阅安装或更新 Amazon CLI 最新版本

如果您计划仅从 Amazon Web Services Management Console 访问 RDS Custom,请跳过此步骤。

如果您已为 Amazon RDS 或 RDS Custom for Oracle 下载了 Amazon CLI,请跳过此步骤。

配置 IAM 和您的 VPC

您可以使用以下步骤配置您的 IAM 角色和 VPC:

使用 Amazon CloudFormation 配置 IAM 和 VPC

为了简化设置,您可以使用 Amazon CloudFormation 模板文件创建 CloudFormation 堆栈。要了解如何创建堆栈,请参阅《Amazon CloudFormation 用户指南》中的在 Amazon CloudFormation 控制台上创建堆栈

要下载模板文件

  1. 打开链接 custom-sqlserver-iam.json 的上下文(右键单击)菜单,然后选择 Save Link As(将链接另存为)。

  2. 将该文件保存到您的计算机。

  3. 为链接 custom-vpc.json 重复之前的步骤。

    如果您已配置了适用于 RDS Custom for Oracle 的 VPC,则可跳过此步骤。

要采用 CloudFormation 配置 IAM

  1. 通过以下网址打开 CloudFormation 控制台:https://console.aws.amazon.com/cloudformation

  2. 开启 Create Stack(创建堆栈)向导,然后选择 Create Stack(创建堆栈)。

  3. Select Template(选择模板)页面中,执行以下操作:

    1. Template source(模板来源)项下,选择 Upload a template file(上载模板文件)。

    2. 对于 Choose file(选择文件),请导航到 custom-sqlserver-iam.json 并选择。

    3. 选择下一步

  4. Specify stack details(指定堆栈详细信息)页面中,请执行以下操作:

    1. 对于堆栈名称,输入 custom-sqlserver-iam

    2. 选择下一步

  5. Configure stack options (配置堆栈选项) 页面上,选择 Next (下一步)

  6. Review custom-sqlserver-iam(查看 custom-sqlserver-iam)页面上,请执行以下操作:

    1. 对于 Capabilities(功能),请选中复选框 I acknowledge that Amazon CloudFormation might create IAM resources with custom names(我确认 Amazon CloudFormation 可能使用自定义名称创建 IAM 资源)。

    2. 选择创建堆栈

    CloudFormation 创建 RDS Custom for SQL Server 所需的 IAM 角色。

要采用 CloudFormation 配置 VPC

此过程假定您已使用 CloudFormation 创建 IAM 角色。

如果您已配置了适用于 RDS Custom for Oracle 的 VPC,则可跳过此步骤。

  1. 通过以下网址打开 CloudFormation 控制台:https://console.aws.amazon.com/cloudformation

  2. Stacks(堆栈)页面,对于 Create stack(创建堆栈),请选择 With new resources (standard)(采用新资源(标准))。

  3. Select Template(选择模板)页面中,执行以下操作:

    1. Template source(模板来源)项下,选择 Upload a template file(上载模板文件)。

    2. 对于 Choose file(选择文件),请转到 custom-vpc.json 并选择。

    3. 选择下一步

  4. Specify stack details(指定堆栈详细信息)页面中,请执行以下操作:

    1. 对于堆栈名称,输入 custom-vpc

    2. 对于 Parameters(参数),请选择要用于 RDS Custom 数据库实例的私有子网。

    3. 选择要用于 RDS Custom 数据库实例的私有 VPC ID。

    4. 输入与私有子网关联的路由表。

    5. 选择下一步

  5. Configure stack options (配置堆栈选项) 页面上,选择 Next (下一步)

  6. Review custom-vpc(查看 custom-vpc)页面,请选择 Create stack(创建堆栈)。

    CloudFormation 配置您的 VPC。

手动创建您的 IAM 角色和实例配置文件

要使用 RDS Custom for SQL Server,请创建以下过程中描述的的 IAM 实例配置文件和 IAM 角色。

要创建 RDS Custom for SQL Server 的 IAM 实例配置文件和 IAM 角色

  1. 创建名为 AWSRDSCustomSQLServerInstanceRole 的 IAM 角色,并带有信任策略,以便 Amazon EC2 可代入此角色。

  2. AWSRDSCustomSQLServerInstanceRole 添加访问策略。

  3. 为名为 AWSRDSCustomSQLServerInstanceProfile 的 RDS Custom for SQL Server 创建 IAM 实例配置文件。

  4. AWSRDSCustomSQLServerInstanceRole 添加到实例配置文件。

创建 AWSRDSCustomSQLServerInstanceRole IAM 角色

以下示例将创建 AWSRDSCustomSQLServerInstanceRole 角色。信任策略将允许 Amazon EC2 代入该角色。

aws iam create-role \ --role-name AWSRDSCustomSQLServerInstanceRole \ --assume-role-policy-document '{ "Version": "2012-10-17", "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" } } ] }'

将访问策略添加到 AWSRDSCustomSQLServerInstanceRole

在将内联策略嵌入角色中时,内联策略将用作角色的访问(权限)策略的一部分。您将创建 AWSRDSCustomSQLServerIamRolePolicy 策略,以允许 Amazon EC2 获取和接收消息,以及执行各种操作。

以下示例创建 AWSRDSCustomSQLServerIamRolePolicy 名为的访问策略,然后将其添加到 AWSRDSCustomSQLServerInstanceRole 角色。此示例假定您已设置了 '$REGION'$ACCOUNT_ID'$CUSTOMER_KMS_KEY_ID' 变量。

aws iam put-role-policy \ --role-name AWSRDSCustomSQLServerInstanceRole \ --policy-name AWSRDSCustomSQLServerIamRolePolicy \ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "ssmAgent1", "Effect": "Allow", "Action": [ "ssm:GetDeployablePatchSnapshotForInstance", "ssm:ListAssociations", "ssm:PutInventory", "ssm:PutConfigurePackageResult", "ssm:UpdateInstanceInformation", "ssm:GetManifest" ], "Resource": "*" }, { "Sid": "ssmAgent2", "Effect": "Allow", "Action": [ "ssm:ListInstanceAssociations", "ssm:PutComplianceItems", "ssm:UpdateAssociationStatus", "ssm:DescribeAssociation", "ssm:UpdateInstanceAssociationStatus" ], "Resource": "arn:aws:ec2:'$REGION':'$ACCOUNT_ID':instance/*", "Condition": { "StringLike": { "aws:ResourceTag/AWSRDSCustom": "custom-sqlserver" } } }, { "Sid": "ssmAgent3", "Effect": "Allow", "Action": [ "ssm:UpdateAssociationStatus", "ssm:DescribeAssociation", "ssm:GetDocument", "ssm:DescribeDocument" ], "Resource": "arn:aws:ssm:*:*:document/*" }, { "Sid": "ssmAgent4", "Effect": "Allow", "Action": [ "ssmmessages:CreateControlChannel", "ssmmessages:CreateDataChannel", "ssmmessages:OpenControlChannel", "ssmmessages:OpenDataChannel" ], "Resource": "*" }, { "Sid": "ssmAgent5", "Effect": "Allow", "Action": [ "ec2messages:AcknowledgeMessage", "ec2messages:DeleteMessage", "ec2messages:FailMessage", "ec2messages:GetEndpoint", "ec2messages:GetMessages", "ec2messages:SendReply" ], "Resource": "*" }, { "Sid": "ssmAgent6", "Effect": "Allow", "Action": [ "ssm:GetParameters", "ssm:GetParameter" ], "Resource": "arn:aws:ssm:*:*:parameter/*" }, { "Sid": "ssmAgent7", "Effect": "Allow", "Action": [ "ssm:UpdateInstanceAssociationStatus", "ssm:DescribeAssociation" ], "Resource": "arn:aws:ssm:*:*:association/*" }, { "Sid": "eccSnapshot1", "Effect": "Allow", "Action": "ec2:CreateSnapshot", "Resource": [ "arn:aws:ec2:'$REGION':'$ACCOUNT_ID':volume/*" ], "Condition": { "StringLike": { "aws:ResourceTag/AWSRDSCustom": "custom-sqlserver" } } }, { "Sid": "eccSnapshot2", "Effect": "Allow", "Action": "ec2:CreateSnapshot", "Resource": [ "arn:aws:ec2:'$REGION'::snapshot/*" ], "Condition": { "StringLike": { "aws:RequestTag/AWSRDSCustom": "custom-sqlserver" } } }, { "Sid": "eccCreateTag", "Effect": "Allow", "Action": "ec2:CreateTags", "Resource": "*", "Condition": { "StringLike": { "aws:RequestTag/AWSRDSCustom": "custom-sqlserver", "ec2:CreateAction": [ "CreateSnapshot" ] } } }, { "Sid": "s3BucketAccess", "Effect": "Allow", "Action": [ "s3:putObject", "s3:getObject", "s3:getObjectVersion", "s3:AbortMultipartUpload" ], "Resource": [ "arn:aws:s3:::do-not-delete-rds-custom-*/*" ] }, { "Sid": "customerKMSEncryption", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:'$REGION':'$ACCOUNT_ID':key/'$CUSTOMER_KMS_KEY_ID'" ] }, { "Sid": "readSecretsFromCP", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": [ "arn:aws:secretsmanager:'$REGION':'$ACCOUNT_ID':secret:do-not-delete-rds-custom-*" ], "Condition": { "StringLike": { "aws:ResourceTag/AWSRDSCustom": "custom-sqlserver" } } }, { "Sid": "publishCWMetrics", "Effect": "Allow", "Action": "cloudwatch:PutMetricData", "Resource": "*", "Condition": { "StringEquals": { "cloudwatch:namespace": "rdscustom/rds-custom-sqlserver-agent" } } }, { "Sid": "putEventsToEventBus", "Effect": "Allow", "Action": "events:PutEvents", "Resource": "arn:aws:events:'$REGION':'$ACCOUNT_ID':event-bus/default" }, { "Sid": "cwlOperations1", "Effect": "Allow", "Action": [ "logs:PutRetentionPolicy", "logs:PutLogEvents", "logs:DescribeLogStreams", "logs:CreateLogStream", "logs:CreateLogGroup" ], "Resource": "arn:aws:logs:'$REGION':'$ACCOUNT_ID':log-group:rds-custom-instance-*" }, { "Sid": "cwlOperations2", "Effect": "Allow", "Action": "logs:DescribeLogGroups", "Resource": "arn:aws:logs:'$REGION':'$ACCOUNT_ID':log-group:*" } ] }'

创建您的 RDS Custom for SQL Server 实例配置文件

请按如下方式创建您的实例配置文件,将其命名为 AWSRDSCustomSQLServerInstanceProfile

aws iam create-instance-profile \ --instance-profile-name AWSRDSCustomSQLServerInstanceProfile

请将 AWSRDSCustomSQLServerInstanceRole 添加到您的 RDS Custom for SQL Server 实例配置文件中

请将 AWSRDSCustomInstanceRoleForRdsCustomInstance 角色添加到 AWSRDSCustomSQLServerInstanceProfile 配置文件。

aws iam add-role-to-instance-profile \ --instance-profile-name AWSRDSCustomSQLServerInstanceProfile \ --role-name AWSRDSCustomSQLServerInstanceRole

手动配置您的 VPC

就像 Amazon EC2 实例或 Amazon RDS 数据库实例一样,您的 RDS Custom 数据库实例也位于基于 Amazon VPC 服务的 Virtual Private Cloud (VPC) 中。您将提供并配置自己的 VPC。因此,您将能够完全控制实例联网设置。

RDS Custom 将通信从数据库实例发送到其他 Amazon 服务。为了确保 RDS Custom 可以通信,它会验证与这些服务的网络连接。

如果您已经为 RDS Custom for Oracle 配置了 VPC,则可以重复使用该 VPC 并跳过此过程。

配置您的 VPC 安全组

安全组充当 VPC 的虚拟防火墙,以控制入站和出站流量。RDS Custom 数据库实例具有原定设置安全组,可用于保护实例。确保您的安全组允许 RDS Custom 和其他 Amazon 服务之间的流量。

要为 RDS Custom 配置安全组

  1. 登录到Amazon Web Services Management Console并打开 Amazon VPC 控制台,网址:https://console.aws.amazon.com/vpc

  2. 允许 RDS Custom 使用原定设置安全组,或创建您自己的安全组。有关详细说明,请参阅 通过创建安全组提供对 VPC 中的数据库实例的访问

  3. 如果您有私有 VPC 并且使用 VPC 终端节点,请确保您的安全组允许端口 443 上的出站连接。RDS Custom 需要此端口来与依赖项 Amazon 服务进行通信。

有关安全组的更多信息,请参阅《Amazon VPC 开发人员指南》中的您的 VPC 的安全组

为依赖项 Amazon 服务配置端点

确保您的 VPC 允许传输到以下 Amazon 服务的出站流量:

  • Amazon CloudWatch

  • Amazon CloudWatch Logs

  • Amazon CloudWatch Events

  • Amazon EC2

  • Amazon EventBridge

  • Amazon S3

  • Amazon Secrets Manager

  • Amazon Systems Manager

我们建议您按照以下说明为 VPC 中的每项服务添加端点。但是,您也可以使用任何其他解决方案,只要使您的 VPC 能够与 Amazon 服务终端节点通信即可。例如,您可以使用网络地址转换 (NAT) 或 Amazon Direct Connect。

要为配合 RDS Custom 使用的 Amazon 服务配置端点

  1. 通过以下网址打开 Amazon VPC 控制台:https://console.aws.amazon.com/vpc/

  2. 在导航栏中,使用区域选择器来选择 Amazon Web Services 区域。

  3. 在导航窗格中,选择 Endpoints(端点)。在主窗格中,选择创建终端节点

  4. 对于服务类别,选择 Amazon 服务

  5. 对于 Service Name(服务名称),请选择表中显示的端点。

  6. 对于 VPC,选择您的 VPC。

  7. 对于子网,请从每个可用区中选择一个要包括的子网。

    VPC 端点可以跨越多个可用区。Amazon 为您选择的每个子网中的 VPC 终端节点创建一个弹性网络接口。每个网络接口有一个域名系统 (DNS) 主机名和私有 IP 地址。

  8. 对于 Security group(安全组),请选择或创建一个安全组。

    您可以使用安全组来控制对您的端点的访问,就像您使用防火墙一样。有关安全组的更多信息,请参阅 Amazon VPC 用户指南 中的您的 VPC 的安全组

  9. 选择 Create endpoint (创建终端节点)

下表说明了如何查找您的 VPC 用于出站通信所需的端点列表。

服务 端点格式 备注和链接

Amazon Systems Manager

采用以下端点格式:

  • ssm.region.amazonaws.com

  • ssmmessages.region.amazonaws.com

有关每个区域中端点的列表,请参阅亚马逊云科技一般参考中的 Amazon Systems Manager 端点和配额

Amazon Secrets Manager

采用端点格式 secretsmanager.region.amazonaws.com

有关每个区域中端点的列表,请参阅亚马逊云科技一般参考中的 Amazon Secrets Manager 端点和配额

Amazon CloudWatch

采用以下端点格式:

  • 对于 CloudWatch 指标,请使用 monitoring.region.amazonaws.com

  • 对于 CloudWatch Events,请使用 events.region.amazonaws.com

  • 对于 CloudWatch Logs,请使用 logs.region.amazonaws.com

有关每个区域中的端点列表,请参阅:

Amazon EC2

采用以下端点格式:

  • ec2.region.amazonaws.com

  • ec2messages.region.amazonaws.com

有关各区域端点的列表,请参阅《亚马逊云科技一般参考》中的 Amazon Elastic Compute Cloud 端点和配额

Amazon S3

采用端点格式 s3.region.amazonaws.com

有关各区域端点的列表,请参阅亚马逊云科技一般参考中的 Amazon Simple Storage Service 端点和配额

要了解 Amazon S3 的网关端点的更多信息,请参阅《Amazon VPC 开发人员指南》中的 Amazon S3 端点

要了解如何创建访问点,请参阅《Amazon VPC 开发人员指南》中的创建访问点

配置实例元数据服务

请确保您的实例可以执行以下操作:

  • 可使用 Instance Metadata Service Version 2 (IMDSv2) 来访问实例元数据服务。

  • 允许通过端口 80 (HTTP) 到 IMDS 链接 IP 地址的出站通信。

  • http://169.254.169.254 IMDSv2 链接请求实例元数据。

有关更多信息,请参阅《适用于 Linux 实例的 Amazon EC2 用户指南》中的使用 IMDSv2

为您的 IAM 用户授予所需的权限

创建 RDS Custom for SQL Server 数据库实例的 IAM 主体必须具有以下策略之一:

  • AdministratorAccess 策略

  • 具有以下其他权限的 AmazonRDSFullAccess 策略:

    iam:SimulatePrincipalPolicy cloudtrail:CreateTrail cloudtrail:StartLogging s3:CreateBucket s3:PutBucketPolicy kms:CreateGrant

    有关 kms:CreateGrant 权限的更多信息,请参阅 Amazon KMS key 管理