我想在不使用AWS
服务器的访问权限和密钥的情况下将文件上传到S3。 AWS键应作为默认值。但是,在服务器中运行以下命令,我可以访问它而无需提供任何访问和密钥。
aws s3 cp somefile.txt s3:// somebucket /
从java代码中无法访问,因为它无法加载凭据。 以下是我的代码。
AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
答案 0 :(得分:5)
当您尝试从EC2实例连接到S3存储桶时,可以使用以下Java代码获取s3client
实例。
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new InstanceProfileCredentialsProvider(false))
.build();
这是推荐的方式,因为应用程序不需要在属性文件中维护访问密钥。
IAM角色的示例政策: -
{
"Action": ["s3:PutObject",
"s3:ListBucket",
"s3:GetObject",
"s3:DeleteObject"],
"Resource": ["arn:aws:s3:::yourBucketName",
"arn:aws:s3:::yourBucketName/*"],
"Effect": "Allow",
"Sid": "AllowBucketLinux"
}
答案 1 :(得分:4)
根据文档AWS凭证提供程序链,按此顺序查找凭据:
检查您是否在上述任何一项中指定了有效凭据 参考:http://docs.aws.amazon.com/sdk-for-java/v1/developer-guide/credentials.html