跨账户跨区域访问 DynamoDB 表 - Amazon连接词
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

跨账户跨区域访问 DynamoDB 表

Amazon GlueETL 作业支持跨区域和跨账户访问 DynamoDB 表。Amazon GlueETL 作业支持从另一个Amazon账户的 DynamoDB 表,并将数据写入另一个 Amazon Web Services 账户的 DynamoDB 表。Amazon Glue还支持从另一个区域的 DynamoDB 表读取以及写入另一个区域中的 DynamoDB 表。本节提供了有关设置访问的说明,并提供了一个示例脚本。

本节中的过程参考了用于创建 IAM 角色和授予角色访问权限的 IAM 教程。本教程还讨论了担任角色,但在这里,您将使用作业脚本来担任Amazon Glue。本教程还包含有关常规跨账户做法的信息。有关更多信息,请参阅 。教程:使用 IAM 角色跨 Amazon Web Services 账户委派访问权限

创建角色

跟随教程中的步骤 1在账户 A 中创建 IAM 角色。在定义角色的权限时,您可以选择附加现有策略,例如AmazonDynamoDBReadOnlyAccess,或者AmazonDynamoDBFullAccess以允许角色读取/写入 DynamoDB。以下示例显示创建一个名为的角色DynamoDBCrossAccessRole,具有权限策略AmazonDynamoDBFullAccess

向角色授予访问权限

跟随教程中的步骤 2以允许帐户 B 切换到新创建的角色。以下示例创建一个新策略,其中包含以下语句:

{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "<DynamoDBCrossAccessRole's ARN>" } }

然后,您可以将此策略附加到要用于访问 DynamoDB 的组/角色/用户。

在中代入角色Amazon GlueJob 脚本

现在,您可以登录账户 B 并创建Amazon Glue任务。在作业脚本中,您需要使用dynamodb.sts.roleArn参数以假设DynamoDBCrossAccessRole角色。假设此角色允许您获取临时证书,这些证书需要用于访问账户 B 中的 DynamoDB。请查看这些示例脚本。

对于跨账户阅读跨区域:

import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, ["JOB_NAME"]) glue_context= GlueContext(SparkContext.getOrCreate()) job = Job(glue_context) job.init(args["JOB_NAME"], args) dyf = glue_context.create_dynamic_frame_from_options( connection_type="dynamodb", connection_options={ "dynamodb.region": "us-east-1", "dynamodb.input.tableName": "test_source", "dynamodb.sts.roleArn": "<DynamoDBCrossAccessRole's ARN>" } ) dyf.show() job.commit()

对于跨区域读取和跨账户写入:

import sys from pyspark.context import SparkContext from awsglue.context import GlueContext from awsglue.job import Job from awsglue.utils import getResolvedOptions args = getResolvedOptions(sys.argv, ["JOB_NAME"]) glue_context= GlueContext(SparkContext.getOrCreate()) job = Job(glue_context) job.init(args["JOB_NAME"], args) dyf = glue_context.create_dynamic_frame_from_options( connection_type="dynamodb", connection_options={ "dynamodb.region": "us-east-1", "dynamodb.input.tableName": "test_source" } ) dyf.show() glue_context.write_dynamic_frame_from_options( frame=dyf, connection_type="dynamodb", connection_options={ "dynamodb.region": "us-west-2", "dynamodb.output.tableName": "test_sink", "dynamodb.sts.roleArn": "<DynamoDBCrossAccessRole's ARN>" } ) job.commit()