

# 使用安全组控制访问权限
<a name="Overview.RDSSecurityGroups"></a>

VPC 安全组控制传入和传出数据库实例的流量拥有的访问权限。默认情况下，将为您的数据库实例关闭网络访问。您可以在安全组中指定规则，允许从 IP 地址范围、端口或安全组进行访问。配置传入规则后，会向与该安全组关联的所有数据库实例应用相同的规则。您最多可以在一个安全组中指定 20 个规则。

## VPC 安全组概述
<a name="Overview.RDSSecurityGroups.VPCSec"></a>

每个 VPC 安全组规则都使特定的源能够访问 VPC 中与该 VPC 安全组关联的数据库实例。源可以是一个地址范围 (例如，203.0.113.0/24) 或另一个 VPC 安全组。指定作为源的 VPC 安全组后，就可以允许从使用此源 VPC 安全组的所有实例 (通常为应用程序服务器) 中传入流量。VPC 安全组可能具有管理入站和出站流量的规则。但是，出站流量规则通常不适用于数据库实例。仅在数据库实例充当客户端时，出站流量规则才适用。例如，出站流量规则适用于具有出站数据库链接的 Oracle 数据库实例。您必须使用 [Amazon EC2 API](https://docs.aws.amazon.com/AWSEC2/latest/APIReference/Welcome.html) 或 VPC 控制台中的 **Security Group**（安全组）选项创建 VPC 安全组。

当您为 VPC 安全组创建允许访问 VPC 中的实例的规则时，必须为规则允许访问的每个地址范围指定一个端口。例如，如果您要对 VPC 中的实例开启 Secure Shell（SSH）访问，则为指定的地址范围创建一条允许访问 TCP 端口 22 的规则。

您可以为 VPC 中不同的实例配置允许访问不同端口的多个 VPC 安全组。例如，您可以创建一个允许访问您的 VPC 中的 Web 服务器的 TCP 端口 80 的 VPC 安全组。之后，您可以创建另一个 VPC 安全组，来允许访问您的 VPC 中的 RDS for MySQL 数据库实例的 TCP 端口 3306。

有关 VPC 安全组的更多信息，请参阅 *Amazon Virtual Private Cloud 用户指南* 中的[安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

**注意**  
如果您的数据库实例位于 VPC 中但不可公开访问，则您还可以使用 AWS Site-to-Site VPN 连接或 Direct Connect 连接从专用网络访问它。有关更多信息，请参阅 [互联网络流量隐私](inter-network-traffic-privacy.md)。

## 安全组情况
<a name="Overview.RDSSecurityGroups.Scenarios"></a>

VPC 中的数据库实例的一种常见用法是，与运行在相同 VPC 中 Amazon EC2 实例上的应用程序服务器分享数据，这些数据可通过 VPC 外的客户端应用程序进行访问。对于此情况，使用 AWS 管理控制台上的 RDS 和 VPC 页面或 RDS 和 EC2 API 操作来创建必要的实例和安全组：

1. 创建一个 VPC 安全组 (例如，`sg-0123ec2example`)，然后定义使用客户端应用程序 IP 地址作为源的入站规则。通过此安全组，客户端应用程序可连接到使用此安全组的 VPC 中的 EC2 实例。

1. 创建一个适用于该应用程序的 EC2 实例，然后将该 EC2 实例添加到上一步中创建的 VPC 安全组 (`sg-0123ec2example`)。

1. 创建第二个 VPC 安全组 (例如，`sg-6789rdsexample`)，然后通过将步骤 1 中创建的 VPC 安全组(`sg-0123ec2example`) 指定为源来创建一个新规则。

1. 创建一个新的数据库实例，然后将该数据库实例添加到在上一步骤中创建的 VPC 安全组（`sg-6789rdsexample`）。在创建数据库实例时，使用的端口号应与为您在步骤 3 中创建的 VPC 安全组（`sg-6789rdsexample`）规则指定的端口号相同。

下图说明了此情形。

![\[VPC 中的数据库实例和 EC2 实例\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/con-VPC-sec-grp.png)


有关针对此场景配置 VPC 的详细说明，请参阅[教程：创建 VPC 以用于数据库实例（仅限 IPv4）](CHAP_Tutorials.WebServerDB.CreateVPC.md)。有关使用 VPC 的更多信息，请参阅 [Amazon VPC 和 Amazon RDS](USER_VPC.md)。

## 创建 VPC 安全组
<a name="Overview.RDSSecurityGroups.Create"></a>

您可以使用 VPC 控制台为数据库实例创建 VPC 安全组。有关创建安全组的信息，请参阅 *Amazon Virtual Private Cloud 用户指南* 中的[通过创建安全组提供对 VPC 中的数据库实例的访问](CHAP_SettingUp.md#CHAP_SettingUp.SecurityGroup)和[安全组](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html)。

## 将安全组与数据库实例关联
<a name="Overview.RDSSecurityGroups.Associate"></a>

您可以使用 RDS 控制台的 **Modify (修改)** 选项、`ModifyDBInstance` Amazon RDS API 或 `modify-db-instance` AWS CLI 命令将安全组与数据库实例关联。

以下 CLI 示例关联特定 VPC 安全组并从数据库实例中移除数据库安全组

```
aws rds modify-db-instance --db-instance-identifier dbName --vpc-security-group-ids sg-ID
```

 有关修改数据库实例的信息，请参阅[修改 Amazon RDS 数据库实例](Overview.DBInstance.Modifying.md)。有关从数据库快照还原数据库实例时的安全组注意事项，请参阅[安全组注意事项](USER_RestoreFromSnapshot.md#USER_RestoreFromSnapshot.Security)。

**注意**  
如果将端口值配置为非原定设置值，RDS 控制台会显示数据库的不同安全组规则名称。

对于 RDS for Oracle 数据库实例，可以通过填充 Oracle Enterprise Manager Database Express（OEM）、适用于 Enterprise Manager Cloud Control 的 Oracle Management Agent（OEM 代理）和 Oracle 安全套接字层选项的安全组选项设置来关联其它安全组。在这种情况下，与数据库实例关联的安全组和选项设置都适用于该数据库实例。有关这些选项组的更多信息，请参阅 [Oracle Enterprise Manager](Oracle.Options.OEM.md)、[适用于 Enterprise Manager Cloud Control 的 Oracle Management Agent](Oracle.Options.OEMAgent.md) 和 [Oracle 安全套接字层](Appendix.Oracle.Options.SSL.md)。