Java 如何使用非硬编码密钥的红移复制

Java 如何使用非硬编码密钥的红移复制,java,amazon-web-services,copy,amazon-redshift,Java,Amazon Web Services,Copy,Amazon Redshift,下面是我尝试过的,但没有成功。我认为问题在于生成的密钥只针对EC2实例的范围生成。因此,当红移尝试使用该命令调用COPY命令时,将无法识别该命令 AWSCredentialsProvider credentialProvider = new DefaultAWSCredentialsProviderChain(); return new StringBuilder("COPY ").append(tmpPrefix) .append(tableNa

下面是我尝试过的,但没有成功。我认为问题在于生成的密钥只针对EC2实例的范围生成。因此,当红移尝试使用该命令调用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....
您知道如何使其工作吗?

您正在使用IAM角色(该角色创建一组临时凭据+令牌)

当您使用临时凭据(访问、机密、令牌)执行复制命令时,您还必须提供令牌:

凭证“aws\u访问\u密钥\u id=”;aws_secret_access_key=;标记=';


查看文档

您是否为尝试执行复制命令的ec2实例设置了IAM角色?ec2具有IAM角色以访问特定存储桶。但是redshift是通过JDCB命令(尽管是JBOSS)进行访问的,用户可以使用redshift凭证。