2016-10-13 51 views
0

我刚开始在我的项目中使用AWS。我想编写一个将关键文件上传到s3存储桶的项目。我不想公开任何密钥,以便所有其他开发人员/用户都可以访问上传的文档。请提供一些指示如何开始。Java AWS SDK - 如何使用Java API中的IAM配置文件上传文件

我目前的执行情况:

return new AmazonS3Client(new AWSCredentials() { 
    @Override 
    public String getAWSAccessKeyId() { 
    return accessKey; 
    } 

    @Override 
    public String getAWSSecretKey() { 
    return accessKeySecret; 
    }, clientConfiguration) 

然后我用amazonS3Client.putObject(putReq);上传文件。 所以,我在这里公开我的密钥,使其他同事可以下载/查看文件。任何人都可以使用它从s3cmd,浏览器插件等下载/上传文件。

在阅读AWS文档时,我知道我可以使用EC2实例并设置IAM配置文件。 BUT我不确定我如何处理java代码。请提供一些链接和示例

+0

http://stackoverflow.com/questions/15076645/amazon-s3-write-only-access的可能重复这个问题可以让每个用户一个单独的文件夹中的S3存储桶 - 用户不有权访问每个其他文件夹 –

+0

我认为这个问题更关注于如何从实例的IAM角色获取凭证。 – jbird

+0

这不会阻止'暴露我的密钥,使其他同事下载/查看文件',会吗? –

回答

1

请看InstanceProfileCredentialsProvider课。它从实例的元数据中获取IAM凭证(访问/秘密密钥)。在具有允许访问S3的策略的IAM角色下启动您的实例。

AmazonS3 s3Client = AmazonS3ClientBuilder.standard() .withCredentials(新InstanceProfileCredentialsProvider()) .build();

Source reference

0

如果您的用户需要访问上传到S3,那么他们将需要访问密钥,没有什么可以做的。

虽然你可以做的是给他们有权限上传文件到S3的密钥,但没有读/下载权限。因此,您需要具有PutObject权限的上传策略以及具有“列表/获取”权限的读取策略。