Amazon DynamoDB 中的基础设施安全性
作为一项托管服务,Amazon DynamoDB 受到 Amazon 全局网络安全过程的保护,这些过程在 Amazon Well-Architected 框架的基础设施保护中进行了描述。
您可以使用 Amazon 发布的 API 调用通过网络访问 DynamoDB。客户端可以使用 TLS(传输层安全性协议)版本 1.2 或 1.3。客户端还必须支持具有完全向前保密 (PFS) 的密码套件,例如 Ephemeral Diffie-Hellman (DHE) 或 Elliptic Curve Diffie-Hellman Ephemeral (ECDHE)。大多数现代系统(如 Java 7 及更高版本)都支持这些模式。此外,必须使用访问密钥 ID 和与 IAM 主体关联的秘密访问密钥来对请求进行签名。或者,您可以使用 Amazon Security Token Service(Amazon STS)生成临时安全凭证来对请求进行签名。
您还可以为 DynamoDB 使用 virtual private cloud(VPC)端点,使 VPC 中的 Amazon EC2 实例能够使用其私有 IP 地址访问 DynamoDB,而不会暴露于公共互联网。有关更多信息,请参阅 使用 Amazon VPC 端点来访问 DynamoDB。
使用 Amazon VPC 端点来访问 DynamoDB
出于安全原因,许多Amazon客户在 Amazon Virtual Private Cloud 环境(Amazon VPC)中运行其应用程序。利用 Amazon VPC,您可以在 Virtual Private Cloud 中启动 Amazon EC2 实例,Virtual Private Cloud 在逻辑上与其他网络(包括公共互联网)隔离。利用 Amazon VPC,您可以控制该网络的 IP 地址范围、子网、路由表、网络网关和安全设置。
注意
如果您的 Amazon Web Services 账户是在 2013 年 12 月 4 目之后创建的,则您在每个 Amazon Web Services 区域中都已经有一个默认 VPC。默认 VPC 可供您使用,您立即开始使用该 VPC,而无需执行任何其他配置步骤。
有关默认 VPC 的更多信息,请参阅 Amazon VPC 用户指南中的默认 VPC 和默认子网。
要访问公共互联网,您的 VPC 必须有一个互联网网关 — 一个将您的 VPC 连接到互联网的虚拟路由器。这允许在 VPC 中的 Amazon EC2 上运行的应用程序访问互联网资源,例如 Amazon DynamoDB。
默认情况下,与 DynamoDB 之间的通信使用 HTTPS 协议,该协议通过使用 SSL/TLS 加密来保护网络流量。下图显示了 VPC 中的一个 Amazon EC2 实例通过让 DynamoDB 使用互联网网关(而不是 VPC 端点)来访问 DynamoDB。
许多客户对跨公共 Internet 发送和接收数据存在合理的私密性和安全性担心。客户可以利用虚拟专用网络 (VPN),通过自己的企业网络基础设施路由所有 DynamoDB 网络流量,从而消除这些担心。不过,此方法可能会带来带宽和可用性方面的难题。
DynamoDB 的 VPC 端点可以克服这些难题。DynamoDB 的 VPC 端点使 VPC 中的 Amazon EC2 实例可以使用其私有 IP 地址访问 DynamoDB,而无需接触公共互联网。EC2 实例不需要公有 IP 地址,因此您的 VPC 中不需要有互联网网关、NAT 设备或虚拟专用网关。您使用端点策略控制对 DynamoDB 的访问。您的 VPC 和 Amazon 服务之间的流量不会脱离 Amazon 网络。
注意
即使在使用公有 IP 地址时,Amazon 中托管的实例和服务之间的所有 VPC 通信也都会在 Amazon 网络中保密。来自 Amazon 网络且目的地在 Amazon 网络上的数据包会留在 Amazon 全球网络上,但来往于 Amazon 中国区域的流量除外。
在为 DynamoDB 创建 VPC 端点时,发送到区域(如 dynamodb.us-west-2.amazonaws.com)内的 DynamoDB 端点的任何请求都被路由到 Amazon 网络中的私有 DynamoDB 端点。您无需修改在 VPC 中的 EC2 实例上运行的应用程序。端点名称保持不变,但到 DynamoDB 的路由会完全保留在 Amazon 网络中,不会访问公共互联网。
下图说明 VPC 中的 EC2 实例如何使用 VPC 端点访问 DynamoDB。
有关更多信息,请参阅 教程:将 VPC 端点用于 DynamoDB。
共享 Amazon VPC 端点和 DynamoDB
要允许通过 VPC 子网的网关端点访问 DynamoDB 服务,您必须拥有该 VPC 子网的所有者账户权限。
向 VPC 子网的网关端点授予对 DynamoDB 的访问权限后,任何有权访问该子网的 Amazon 账户都可以使用 DynamoDB。这意味着 VPC 子网中的所有账户用户都可以使用他们有权访问的任何 DynamoDB 表。这包括与 VPC 子网以外的账户相关联的 DynamoDB 表。VPC 子网所有者仍然可以自行决定,限制子网内的任何特定用户通过网关端点使用 DynamoDB 服务。
教程:将 VPC 端点用于 DynamoDB
此部分引导您完成设置和使用 DynamoDB 的 VPC 端点的过程。
第 1 步:启动一个 Amazon EC2 实例
在此步骤中,您将在默认 Amazon VPC 中启动 Amazon EC2 实例。然后,您可以为 DynamoDB 创建和使用 VPC 端点。
通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
选择启动实例,然后执行以下操作:
步骤 1:选择 Amazon 系统映像 (AMI)
-
在 AMI 列表的顶部,转至 Amazon Linux AMI,然后选择选择。
步骤 2:选择实例类型
-
在实例类型列表的顶部,选择 t2.micro。
-
选择下一步:配置实例详细信息。
步骤 3:配置实例详细信息
-
转至网络并选择您的默认 VPC。
选择下一步:添加存储。
步骤 4:添加存储
-
通过选择 Next: Tag Instance 来跳过此步骤。
第 5 步:为实例添加标签
-
选择下一步:配置安全组,跳过此步骤。
步骤 6:配置安全组
-
选择选择现有安全组。
-
在安全组列表中,选择默认。这是 VPC 的默认安全组。
-
选择下一步:审核和启动。
步骤 7:查看实例启动
-
选择启动。
-
-
在选择现有密钥对或创建新密钥对窗口中,执行下列操作之一:
-
如果您没有 Amazon EC2 密钥对,请选择创建新的密钥对并遵循说明。系统将要求您下载私有密钥文件(.pem 文件);您在登录 Amazon EC2 实例时需要此文件。
-
如果已经有 Amazon EC2 密钥对,请转至选择密钥对,然后从列表中选择您的密钥对。必须已经有可用私有密钥文件(.pem 文件)才能登录 Amazon EC2 实例。
-
-
在配置密钥对后,选择启动实例。
-
返回 Amazon EC2 控制台主页并选择您启动的实例。在下方窗格中的说明选项卡上,找到实例的公共 DNS。例如:
ec2-00-00-00-00.us-east-1.compute.amazonaws.com
。记下此公共 DNS 名称,因为您需要在本教程的下一步中使用该名称 (第 2 步:配置 Amazon EC2 实例)。
注意
您的 Amazon EC2 实例需要几分钟才能变为可用。在继续下一步之前,请确保实例状态为 running
,并且已通过其所有状态检查。
第 2 步:配置 Amazon EC2 实例
当您的 Amazon EC2 实例可用时,您将能够登录该实例并为首次使用做好准备。
注意
以下步骤假设您从运行 Linux 的计算机连接到您的 Amazon EC2 实例。有关其他连接方式,请参阅《Amazon EC2 用户指南》中的连接到您的 Linux 实例。
-
您需要授权您的 Amazon EC2 实例的入站 SSH 流量。为此,您将创建一个新的 EC2 安全组,然后将该安全组分配给您的 EC2 实例。
-
在导航窗格中,选择安全组。
-
选择创建安全组。在创建安全组窗口中,执行以下操作:
-
安全组名称—键入安全组名称。例如:
my-ssh-access
-
说明—键入新安全组的描述。
-
VPC—选择您的默认 VPC。
-
在安全组规则部分,选择添加规则并执行以下操作:
-
类型-选择 SSH。
-
来源—选择我的 IP。
-
根据需要进行设置后,选择创建。
-
-
在导航窗格中,选择实例。
-
选择在 第 1 步:启动一个 Amazon EC2 实例 中启动的 Amazon EC2 实例。
-
选择操作 --> 联网 --> 更改安全组。
-
在更改安全组中,选择您在此过程之前创建的安全组(例如:
my-ssh-access
)。还应选择现有default
安全组。根据需要进行设置后,选择分配安全组。
-
-
使用
ssh
命令登录您的 Amazon EC2 实例,如以下示例所示。ssh -i
my-keypair.pem
ec2-user@public-dns-name
您需要指定私有密钥文件(.pem 文件)和实例的公有 DNS 名称。(请参阅 第 1 步:启动一个 Amazon EC2 实例。)
登录 ID 为
ec2-user
。不需要密码。 -
配置 Amazon 凭证,如以下示例所示。提示后,输入您的Amazon访问密钥 ID、私有密钥和默认区域名称。
aws configure
AWS Access Key ID [None]:
AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]:wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]:us-east-1
Default output format [None]:
现在,您可以为 DynamoDB 创建 VPC 端点。
第 3 步:为 DynamoDB 创建一个 VPC 端点
在此步骤中,您将为 DynamoDB 创建 VPC 端点,并对其进行测试以确保其正常工作。
-
在开始之前,请验证您是否可以使用 DynamoDB 的公共端点与 DynamoDB 进行通信。
aws dynamodb list-tables
输出将显示您当前拥有的 DynamoDB 表的列表。(如果您没有任何表,该列表将为空。)
-
验证 DynamoDB 是否可用于在当前Amazon区域创建 VPC 端点。(命令以粗体文本显示,后面是示例输出。)
aws ec2 describe-vpc-endpoint-services
{ "ServiceNames": [ "com.amazonaws.us-east-1.s3", "com.amazonaws.us-east-1.dynamodb" ] }
在示例输出中,DynamoDB 是可用的服务之一,因此您可以继续为其创建 VPC 端点。
-
确定您的 VPC 标识符。
aws ec2 describe-vpcs
{ "Vpcs": [ { "VpcId": "vpc-0bbc736e", "InstanceTenancy": "default", "State": "available", "DhcpOptionsId": "dopt-8454b7e1", "CidrBlock": "172.31.0.0/16", "IsDefault": true } ] }
在示例输出中,VPC ID 为
vpc-0bbc736e
。 -
创建 VPC 端点。对于
--vpc-id
参数,指定上一步中的 VPC ID。使用--route-table-ids
参数将端点与路由表相关联。aws ec2 create-vpc-endpoint --vpc-id vpc-0bbc736e --service-name com.amazonaws.us-east-1.dynamodb --route-table-ids rtb-11aa22bb
{ "VpcEndpoint": { "PolicyDocument": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"*\",\"Resource\":\"*\"}]}", "VpcId": "vpc-0bbc736e", "State": "available", "ServiceName": "com.amazonaws.us-east-1.dynamodb", "RouteTableIds": [ "rtb-11aa22bb" ], "VpcEndpointId": "vpce-9b15e2f2", "CreationTimestamp": "2017-07-26T22:00:14Z" } }
-
验证您是否可以通过 VPC 端点访问 DynamoDB。
aws dynamodb list-tables
如果需要,您可以为 DynamoDB 尝试其他 Amazon CLI 命令。有关更多信息,请参阅 Amazon CLI 命令参考。
第 4 步:(可选)清除
如果要删除您在本教程中创建的资源,请按照以下步骤操作:
删除用于 DynamoDB 的 VPC 端点
-
登录到您的 Amazon EC2 实例。
-
确定 VPC 端点 ID。
aws ec2 describe-vpc-endpoints
{ "VpcEndpoint": { "PolicyDocument": "{\"Version\":\"2008-10-17\",\"Statement\":[{\"Effect\":\"Allow\",\"Principal\":\"*\",\"Action\":\"*\",\"Resource\":\"*\"}]}", "VpcId": "vpc-0bbc736e", "State": "available", "ServiceName": "com.amazonaws.us-east-1.dynamodb", "RouteTableIds": [], "VpcEndpointId": "vpce-9b15e2f2", "CreationTimestamp": "2017-07-26T22:00:14Z" } }
在示例输出中,VPC 端点 ID 为
vpce-9b15e2f2
。 -
删除 VPC 端点。
aws ec2 delete-vpc-endpoints --vpc-endpoint-ids vpce-9b15e2f2
{ "Unsuccessful": [] }
空数组
[]
表示成功(没有失败请求)。
终止 Amazon EC2 实例
打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/
。 -
在导航窗格中,选择实例。
-
选择您的 Amazon EC2 实例。
-
依次选择操作、实例状态和终止。
-
在确认窗口中,选择是,终止。