尽管访问密钥和密码正确,但AWS S3身份验证错误

时间:2018-09-26 15:27:36

标签: python amazon-web-services amazon-s3

我正在尝试将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变量的输出完全相同,如上所述。

1 个答案:

答案 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角色。