本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
跨 AWS 账户访问 DAX
假设您的一个 DynamoDB Accelerator (DAX) 集群在一个 AWS 账户(账户 A)中运行,并且需要能够从另一个 AWS 账户(账户 B)中的 Amazon Elastic Compute Cloud (Amazon EC2) 实例访问 DAX 集群。在本教程中,您可以通过使用账户 B 中的 IAM 角色启动账户 B 中的 EC2 实例来做到这一点。然后,您可以使用 EC2 实例中的临时安全凭证来代入账户 A 中的 IAM 角色。最后,您可以通过代入账户 A 中的 IAM 角色来使用临时安全凭证,以通过与账户 A 中的 DAX 集群的Amazon VPC 对等连接来进行应用程序调用。要执行这些任务,您将需要两个 AWS 账户中的管理访问权限。
设置 IAM
-
使用以下内容创建一个名为
AssumeDaxRoleTrust.json
的文本文件,这将允许 Amazon EC2 代表您工作。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
在账户 B 中,创建一个 Amazon EC2 可在启动实例时使用的角色。
aws iam create-role \ --role-name AssumeDaxRole \ --assume-role-policy-document file://AssumeDaxRoleTrust.json
-
使用以下内容创建一个名为
AssumeDaxRolePolicy.json
的文本文件,这允许账户 B 中的 EC2 实例上运行的代码代入账户 A 中的 IAM 角色。替换accountA
替换为账户 A 的实际 ID。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "arn:aws:iam::
accountA
:role/DaxCrossAccountRole" } ] } -
将该策略添加到您刚刚创建的角色。
aws iam put-role-policy \ --role-name AssumeDaxRole \ --policy-name AssumeDaxRolePolicy \ --policy-document file://AssumeDaxRolePolicy.json
-
创建实例配置文件以允许实例使用该角色。
aws iam create-instance-profile \ --instance-profile-name AssumeDaxInstanceProfile
-
将该角色与实例配置文件关联。
aws iam add-role-to-instance-profile \ --instance-profile-name AssumeDaxInstanceProfile \ --role-name AssumeDaxRole
-
使用以下内容创建一个名为
DaxCrossAccountRoleTrust.json
的文本文件,这将允许账户 B 代入账户 A 角色。ReplaceaccountB
替换为账户 B 的实际 ID。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::
accountB
:role/AssumeDaxRole" }, "Action": "sts:AssumeRole" } ] } -
在账户 A 中,创建账户 B 可代入的角色。
aws iam create-role \ --role-name DaxCrossAccountRole \ --assume-role-policy-document file://DaxCrossAccountRoleTrust.json
-
创建一个名为
DaxCrossAccountPolicy.json
的文本文件来允许访问 DAX 集群。Replacedax-cluster-arn
替换为您的 DAX 集群的正确 Amazon 资源名称 (ARN)。{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "dax:GetItem", "dax:BatchGetItem", "dax:Query", "dax:Scan", "dax:PutItem", "dax:UpdateItem", "dax:DeleteItem", "dax:BatchWriteItem", "dax:ConditionCheckItem", "dax:DefineAttributeList", "dax:DefineAttributeListId", "dax:DefineKeySchema", "dax:Endpoints" ], "Resource": "
dax-cluster-arn
" } ] } -
在账户 A 中,将策略添加到角色。
aws iam put-role-policy \ --role-name DaxCrossAccountRole \ --policy-name DaxCrossAccountPolicy \ --policy-document file://DaxCrossAccountPolicy.json
设置 VPC
-
查找账户 A 的 DAX 集群的子网组。Replace
cluster-name
替换为账户 B 必须访问的 DAX 集群的名称。aws dax describe-clusters \ --cluster-name
cluster-name
--query 'Clusters[0].SubnetGroup' -
使用
subnet-group
,找到集群的 VPC。aws dax describe-subnet-groups \ --subnet-group-name
subnet-group
\ --query 'SubnetGroups[0].VpcId' -
使用
vpc-id
,查找 VPC 的 CIDR。aws ec2 describe-vpcs \ --vpc
vpc-id
\ --query 'Vpcs[0].CidrBlock' -
从账户 B 中,使用与上一步中找到的 CIDR 不重叠的其他 CIDR 创建 VPC。然后,创建至少一个子网。您可以使用 中的 VPC 创建向导AWS 管理控制台或 AWS CLI。
-
从账户 B 中,请求与账户 A VPC 的对等连接,如创建并接受 VPC 对等连接中所述。从账户 A 中,接受连接。
-
从账户 B 中,查找新 VPC 的路由表。Replace
vpc-id
替换为您在账户 B 中创建的 VPC 的 ID。aws ec2 describe-route-tables \ --filters 'Name=vpc-id,Values=
vpc-id
' \ --query 'RouteTables[0].RouteTableId' -
添加一条路由,以将发送到账户 A 的 CIDR 的流量发送到 VPC 对等连接。请记得替换每个
user input placeholder
替换为正确的您的账户值。aws ec2 create-route \ --route-table-id
accountB-route-table-id
\ --destination-cidraccountA-vpc-cidr
\ --vpc-peering-connection-idpeering-connection-id
-
从账户 A 中,使用 DAX 查找 集群的路由表
vpc-id
您之前找到过 。aws ec2 describe-route-tables \ --filters 'Name=vpc-id, Values=
accountA-vpc-id
' \ --query 'RouteTables[0].RouteTableId' -
在账户 A 中,添加一条路由以将发送到账户 B 的 CIDR 的流量发送到 VPC 对等连接。替换每个
user input placeholder
替换为正确的您的账户值。aws ec2 create-route \ --route-table-id
accountA-route-table-id
\ --destination-cidraccountB-vpc-cidr
\ --vpc-peering-connection-idpeering-connection-id
-
从账户 B 中,在您之前创建的 VPC 中启动 EC2 实例。为它提供
AssumeDaxInstanceProfile
。 您可以使用 中的启动向导AWS 管理控制台或 AWS CLI。记下实例的安全组。 -
在账户 A 中,查找 DAX 集群使用的安全组。请记住替换
cluster-name
替换为您的 DAX 集群的名称。aws dax describe-clusters \ --cluster-name
cluster-name
\ --query 'Clusters[0].SecurityGroups[0].SecurityGroupIdentifier' -
更新 DAX 集群的安全组,以允许来自您在账户 B 中创建的 EC2 实例的安全组的入站流量。请记住替换
user input placeholders
替换为正确的您的账户值。aws ec2 authorize-security-group-ingress \ --group-id
accountA-security-group-id
\ --protocol tcp \ --port 8111 \ --source-groupaccountB-security-group-id
\ --group-owneraccountB-id
此时,账户 B 的 EC2 实例上的应用程序可以使用实例配置文件来代入 arn:aws:iam::
角色和使用 DAX 集群。
accountA-id
:role/DaxCrossAccountRole
修改 DAX 客户端以允许跨账户访问
AWS Security Token Service (AWS STS) 凭证是临时凭证。一些客户端会自动处理刷新,而其他客户端则需要额外的逻辑才能刷新凭证。建议您遵循相应文档的指导信息。