AWS胶水从另一个AWS帐户访问/爬网dynamodb(跨帐户访问)

时间:2019-05-21 07:48:56

标签: amazon-dynamodb aws-glue

我写了一个粘合作业,该作业导出DynamoDb表并将其以csv格式存储在S3上。胶粘作业和表位于相同的aws帐户中,但S3存储桶位于不同的aws帐户中。通过将以下存储桶策略附加到跨帐户S3存储桶,我可以从粘合作业访问它。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "tempS3Access",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<AWS-ACCOUNT-ID>:role/<ROLE-PATH>"
            },
            "Action": [
                "s3:Get*",
                "s3:Put*",
                "s3:List*",
                "s3:DeleteObject*"
            ],
            "Resource": [
                "arn:aws:s3:::<BUCKET-NAME>",
                "arn:aws:s3:::<BUCKET-NAME>/*"
            ]
        }
    ]
}

现在,我也想从另一个AWS帐户读取/访问DynamoDb表。是否可以使用Crawler访问跨帐户DynamoDb表?我需要实现什么?

谢谢

1 个答案:

答案 0 :(得分:0)

简短的回答:您不能。搜寻器只能搜寻您自己帐户中的发电机表。

Looong回答:
您可以使用我的解决方法。

  1. 在帐户A中创建一个信任策略。您所做的将成为现实。
  2. 在您的帐户B中创建一个胶粘作业。导入boto3并在第一个帐户中创建一个会话。然后使用dynamodb.resource可以扫描表。查看我的代码:
import boto3 . 
sts_client = boto3.client('sts',region_name='your-region')  
assumed_role_object=sts_client.assume_role(RoleArn="arn:aws:iam::accountAid:role/the-role-you-created", RoleSessionName="AssumeRoleSession1")
credentials=assumed_role_object['Credentials']
dynamodb_client = boto3.resource(
    'dynamodb',
    aws_access_key_id=credentials['AccessKeyId'],
    aws_secret_access_key=credentials['SecretAccessKey'],
    aws_session_token=credentials['SessionToken'],
    region_name='your-region'
)  

table = dynamodb_client.Table('table-to-crawl')  

response = table.scan()  

data = response['Items']

现在有了这个“数据”,其中包含所有表元素,您可以做很多事情。 如果您希望以某种方式处理数据,则可以创建一个dynamicFrame:

  

dataF =   gumContext.create_dynamic_frame.from_rdd(spark.sparkContext.parallelize(data),'data'))

如果需要的话,也可以使用dataFrame。
我希望这有帮助。如果您有任何疑问,请随时提问。