将AWS S3 CSV导入Aurora Postgres遇CURL错误28求助
Aurora PostgreSQL导入S3 CSV失败:CURL错误28,无法生成预签名URL
问题详情
已为Aurora PostgreSQL实例配置S3导入权限,但执行以下导入命令时出错:
SELECT aws_s3.table_import_from_s3 ('t1','','DELIMITER '','' CSV HEADER',aws_commons.create_s3_uri('testing','test_1.csv','us-west-2'));
错误信息:
NOTICE: HINT: make sure your instance is able to connect with S3. NOTICE: CURL error code: 28 when attempting to validate pre-signed URL, 0 attempt(s) remaining NOTICE: HINT: make sure your instance is able to connect with S3. ERROR: Unable to generate pre-signed url, look at engine log for details. CONTEXT: SQL function "table_import_from_s3" statement 1
解决步骤
1. 排查网络连通性
- 若Aurora部署在VPC中,必须确保VPC配置了S3网关端点(Gateway类型),或通过NAT网关/公网IP允许实例访问S3的HTTPS端口(443)。
- 安全组规则:确认Aurora实例的安全组出站规则允许
0.0.0.0/0或S3服务前缀的HTTPS流量。 - 网络ACL:检查VPC子网的网络ACL,入站和出站规则都要允许HTTPS(443端口)的流量。
- 测试连通性:在同VPC的EC2实例中执行
curl https://s3-us-west-2.amazonaws.com,验证是否能正常访问S3端点。
2. 验证IAM角色权限
- 确认RDS实例关联的IAM角色包含
s3:GetObject权限,权限范围需覆盖目标bucket和CSV文件,示例策略:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::testing/test_1.csv" } ] } - 检查角色的信任关系,确保包含
rds.amazonaws.com作为可信实体:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
3. 检查S3桶与对象配置
- 确认S3桶策略未阻止RDS角色的访问,避免存在拒绝类规则优先级高于允许规则的情况。
- 确保CSV对象的存储类别不是归档类(如Glacier、Glacier Flexible Retrieval),这类存储需要先恢复才能访问。
- 验证对象路径是否正确:
aws_commons.create_s3_uri中的bucket名、文件名、区域必须完全匹配,注意对象名区分大小写。
4. 确认RDS扩展与参数组配置
- 执行以下命令确认
aws_s3和aws_commons扩展已安装:CREATE EXTENSION IF NOT EXISTS aws_s3; CREATE EXTENSION IF NOT EXISTS aws_commons; - 检查RDS参数组的
rds.allowed_extensions参数,确保包含这两个扩展名称。
5. 查看RDS引擎日志
登录AWS控制台,进入目标Aurora实例的日志&监控页面,下载或查看postgresql.log,日志中会包含预签名URL生成失败的具体原因(如权限被拒、DNS解析失败等)。
内容的提问来源于stack exchange,提问作者DSi
相关产品推荐
相关产品推荐

