我正在尝试将json文件复制到Amazon Redshift中的表。代码就像下面的
sql = """copy mydb.sales from 's3://example/user_x.json' credentials 'aws_access_key_id=AK;aws_secret_access_key=SK' format as json 'auto';"""
我得到AK和SK
output1 = subprocess.check_output("curl -s http://example.com | grep ' \"xyz" : * ' | cut -f5 -d \" \" | cut -b2- | rev | cut -b3- | rev", shell=True)
AK = output1[:-1] #to remove the \n part from the subprocess output
问题是我遇到以下错误:
error: S3ServiceException:The AWS Access Key Id you provided does not exist in our records.,Status 403,Error InvalidAccessKeyId
现在,我可以通过其他方法检查访问权限和机密。它们与我对AK或SK变量的输出完全相同,如上所述。
答案 0 :(得分:0)
如果可能的话,最好使用IAM角色。创建具有必要的S3权限的IAM角色以读取文件。将IAM角色附加到您的redshift群集。然后,您可以在SQL语句的凭据部分中传递角色ARN
COPY table FROM s3path CREDENTIALS 'aws_iam_role=iam role arn here'
角色的信任策略应该是这样
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "redshift.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
然后在Redshift控制台中选择您的集群,然后单击“管理IAM角色”。然后添加选择您的IAM角色。