尝试将数据从RDS导出到S3时,如何连接到端点



目标

我的目标是将数据从Postgres RDS实例导出到s3 Bucket。我只是想证明这个概念在我的VPC上有效,所以我使用的是伪数据。

到目前为止我已经尝试了什么

我使用控制台和cli遵循了此处的文档。

  1. 创建了一个s3 bucket(我选择阻止所有公共访问(

  2. 创建了具有以下设置的RDS实例:

    • 在2个公用子网上创建
    • 公共可达性:否
    • 出站的安全组规则:CIDR/IP-入站0.0.0.0/0
    • 入站的安全组规则:CIDR/IP-入站0.0.0.0/0
  3. 创建了一个策略,如示例所示:

aws iam create-policy  --policy-name rds-s3-export-policy  --policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "s3export",
"Action": [
"S3:PutObject"
],
"Effect": "Allow",
"Resource": [
"arn:aws:s3:::your-s3-bucket/*"
] 
}
] 
}'
  1. 创建了IAM角色,如:
aws iam create-role  --role-name rds-s3-export-role  --assume-role-policy-document '{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rds.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
] 
}'
  1. 将策略附加到角色,如:
aws iam attach-role-policy  --policy-arn your-policy-arn  --role-name rds-s3-export-role  
  1. 将IAM角色添加到DB中,如:
aws rds add-role-to-db-instance 
--db-instance-identifier my-db-instance 
--feature-name s3Export 
--role-arn your-role-arn   
--region your-region
  1. 是否完成了PSQL中的所有要求,如:
CREATE EXTENSION IF NOT EXISTS aws_s3 CASCADE;
CREATE TABLE sample_table (bid bigint PRIMARY KEY, name varchar(80));
INSERT INTO sample_table (bid,name) VALUES (1, 'Monday'), (2,'Tuesday'), (3, 'Wednesday');
SELECT aws_commons.create_s3_uri(
'dummy-data-bucket-path',
'',
'us-west-2'
) AS s3_uri_1 gset

什么不起作用

当我试图通过进行实际出口时

SELECT * FROM aws_s3.query_export_to_s3('SELECT * FROM sample_table', :'s3_uri_1');

我得到错误:

ERROR:  could not upload to Amazon S3
DETAIL:  Amazon S3 client returned 'Unable to connect to endpoint'.
CONTEXT:  SQL function "query_export_to_s3" statement 1

我尝试过的其他事情:

我尝试过使用Access analyzer for S3,但我的bucket似乎没有出现在列表中。我相信,由于水桶本身没有附加政策。

如何调试此问题?我做错了什么?如果需要,我很乐意分享更多细节。

我从您下面的文档中看到的并不是假设您在VPC中运行整个设置。

因此,要从VPC内连接(因为您已经阻止了所有的公共访问(,您需要附加一个AmazonS3的端点策略。

例如,来自文档示例策略:

以下是S3存储桶策略的示例,该策略仅允许从端点vpce-1a2b3c4d访问特定存储桶my_secure_bucket。

{
"Version": "2012-10-17",
"Id": "Policy1415115909152",
"Statement": [
{
"Sid": "Access-to-specific-VPCE-only",
"Principal": "*",
"Action": "s3:*",
"Effect": "Deny",
"Resource": ["arn:aws:s3:::my_secure_bucket",
"arn:aws:s3:::my_secure_bucket/*"],
"Condition": {
"StringNotEquals": {
"aws:sourceVpce": "vpce-1a2b3c4d"
}
}
}
]
}

最新更新