上次更新时间:2020 年 9 月 25 日
我正在尝试将数据从我的 Amazon Redshift 集群卸载到 Amazon Simple Storage Service (Amazon S3)。但发生了错误。如何排查此问题?简短描述
将数据从 Amazon Redshift 集群卸载到 Amazon S3 存储桶时,您可能会遇到以下错误:
数据库用户无权代入 AWS Identity and Access Management (IAM) 角色错误
error: User arn:aws:redshift:us-west-2:<account-id>:dbuser:<cluster-identifier>/<dbuser username> is not authorized to assume IAM Role arn:aws:iam::<account-id>:role/<Role name> 4
403 访问被拒绝错误
(500310) Invalid operation: S3ServiceException:Access Denied,Status 403,Error AccessDenied,
注意:将数据卸载到 S3 存储桶时,请使用带 SELECT 语句的 UNLOAD 命令。以分隔格式或固定宽度格式卸载文本数据(无论加载时使用的数据格式如何)。您还可以指定是否应该归档压缩的 Gzip 文件。
解决方法 数据库用户无权代入 AWS IAM 角色错误如果数据库用户无权代入 IAM 角色,请检查以下内容:
验证 IAM 角色是否与您的 Amazon Redshift 集群相关联。验证 UNLOAD 命令中使用的 IAM 角色中是否没有尾随空格。 验证分配给 Amazon Redshift 集群的 IAM 角色是否使用了正确的信任关系。 403 访问被拒绝错误
如果您收到来自 S3 存储桶的 403 访问被拒绝错误,请确认已为您的 S3 API 操作授予适当的权限:
"Version": "2012-10-17",
"Statement": ,
"Resource":
}
]
}
如果您将服务器端加密与 S3 托管的加密密钥结合使用,则 S3 存储桶会使用唯一密钥对其每个对象进行加密。作为额外的保护措施,密钥本身也使用定期轮换的主密钥进行加密。
要加密已卸载的静态数据,请验证 S3 存储桶策略中的 s3:x-amz-server-side-encryption 参数是否设置为“true”:
"Condition": {
"Null": {
"s3:x-amz-server-side-encryption": "true"
}
确认KMS_KEY_ID已加密,以便您可以将加密的数据 UNLOAD 到 S3 存储桶:
unload ('select * from a') to 's3://mybucket/test/varchar/' iam_role 'arn:aws:iam::xxxxxx:role/RedshiftS3Access' ALLOWOVERWRITE CSV
KMS_KEY_ID '11111111111111111111111111'
encrypted;
如果您的 S3 存储桶使用 AWS Key Management Service (AWS KMS) 中的主密钥进行加密,请将以下权限添加到您的 IAM 策略中:
"Action":