AWS S3在Java中无访问和密钥上传
我想上传一个文件到S3,而不使用AWS S3在Java中无访问和密钥上传,java,amazon-web-services,amazon-s3,aws-sdk,Java,Amazon Web Services,Amazon S3,Aws Sdk,我想上传一个文件到S3,而不使用AWS服务器的访问权限和密钥。AWS密钥应作为默认值。但是,在服务器上运行下面的命令时,我可以访问它,而不提供任何访问和密钥 aws s3 cp somefile.txt s3://somebucket/ 无法从java代码访问它,因为它无法加载凭据。 下面是我的代码 AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain()); 根据文档AWS凭据提供程序链,该
AWS
服务器的访问权限和密钥。AWS密钥应作为默认值。但是,在服务器上运行下面的命令时,我可以访问它,而不提供任何访问和密钥
aws s3 cp somefile.txt s3://somebucket/
无法从java代码访问它,因为它无法加载凭据。
下面是我的代码
AmazonS3 s3client = new AmazonS3Client(new DefaultAWSCredentialsProviderChain());
根据文档AWS凭据提供程序链,该链按以下顺序查找凭据:
Ref:当您试图从EC2实例连接到S3 bucket时,可以使用下面的Java代码来获取
s3client
实例
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new InstanceProfileCredentialsProvider(false))
.build();
这是推荐的方法,因为应用程序不需要在属性文件中维护访问密钥
- 应创建IAM角色,并为此提供S3访问权限 角色。请参阅下面的示例策略
- IAM角色应分配给EC2实例
{
"Action": ["s3:PutObject",
"s3:ListBucket",
"s3:GetObject",
"s3:DeleteObject"],
"Resource": ["arn:aws:s3:::yourBucketName",
"arn:aws:s3:::yourBucketName/*"],
"Effect": "Allow",
"Sid": "AllowBucketLinux"
}
API v1.11.22版本没有针对S3的builder API。在这种情况下,我该怎么做?请看我的问题