【问题标题】:How to use Redshift COPY with non hard-coded keys如何使用带有非硬编码键的 Redshift COPY
【发布时间】:2015-10-16 12:55:35
【问题描述】:

以下是我尝试过的,但没有奏效。我认为问题在于生成的密钥仅针对 EC2 实例的范围生成。因此,当 Redshift 尝试使用它调用 COPY 命令时,它不会被识别。

AWSCredentialsProvider credentialProvider = new DefaultAWSCredentialsProviderChain();
        return new StringBuilder("COPY ").append(tmpPrefix)
                .append(tableName)
                .append(" FROM '")
                .append(filePath)
                .append("' WITH CREDENTIALS 'aws_access_key_id=")
                .append(credentialProvider.getCredentials().getAWSAccessKeyId())
                .append(";aws_secret_access_key=")
                .append(credentialProvider.getCredentials().getAWSSecretKey())
                .append("' JSON 'auto' GZIP ACCEPTINVCHARS ' ' TRUNCATECOLUMNS TRIMBLANKS;")
                .toString();

以下是我得到的错误

[Amazon](500310) Invalid operation: S3ServiceException:The AWS Access Key Id you provided does not exist in our records.,Status 403,Error InvalidAccessKeyId....

知道如何让它工作吗?

【问题讨论】:

  • 您是否为您的 ec2 实例设置了 IAM 角色,您尝试从该实例执行 COPY 命令?
  • EC2 具有访问特定存储桶的 IAM 角色。但是 redshift 是通过 JDCB 命令(通过 JBOSS)访问的,该命令使用 Redshift 凭据。

标签: java amazon-web-services copy amazon-redshift


【解决方案1】:

您正在使用 IAM 角色(它会为您创建一组临时凭证 + 令牌)。

当您使用临时凭据(访问、秘密、令牌)执行 COPY 命令时,您还提供了令牌: credentials 'aws_access_key_id=<temporary-access-key-id>;aws_secret_access_key=<temporary-secret-access-key>;token=<temporary-token>';

查看文档http://docs.aws.amazon.com/redshift/latest/dg/t_loading-tables-from-s3.html

【讨论】:

    猜你喜欢
    • 2021-03-20
    • 1970-01-01
    • 2015-01-03
    • 2016-04-11
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 2016-12-03
    • 2017-08-15
    相关资源
    最近更新 更多