直到我的代码正常工作,我已经将存储桶策略设置得太大了。正在使用InstanceProfileCredentialsProvider正确的方式从Ec2实例连接到AWS S3?
{
"Version": "2012-10-17",
"Id": "Policy15",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bcktName",
"arn:aws:s3:::bcktName/*"
]
}
]
}
我使用的Elastic BeanStalk反过来使用AWS Ec2。 Ec2实例具有aws-elasticbeanbean-ec2-提供FullAccess到S3的角色(我明白完全访问是危险的)。
我在我的webapp中使用下面的java代码,它被部署到Ec2。
AmazonS3 s3Client = AmazonS3ClientBuilder.standard()
.withCredentials(new InstanceProfileCredentialsProvider(false))
.build();
versionId = s3Client.putObject(new PutObjectRequest("bucketName", name, convFile))
.getVersionId();
1)在java代码中,这是从Ec2连接到S3的正确方法吗? 2)This文档混淆了我,因为我不确定是否必须设置环境变量和/或Java系统属性和/或默认凭证配置文件和/或Amazon ECS容器凭证和/或实例配置文件凭据?
请帮帮我。我对这个问题感到震惊了将近一周。
PS: 以下是ec2InstanceRole分配给我的个人资料
Role ARN arn:aws:iam::111111111111:role/aws-elasticbeanstalk-ec2-role
Role description
Instance Profile ARNs arn:aws:iam::111111111111:instance-profile/aws-elasticbeanstalk-ec2-role
Path /
Creation time 2017-10-17 11:27 PDT
并分配给上述作用的政策是
AmazonS3FullAccess
AWSElasticBeanstalkWebTier
AWSElasticBeanstalkMulticontainerDocker
AWSElasticBeanstalkWorkerTier
我试过AmazonS3 s3Client = AmazonS3ClientBuilder.standard()。build();与我现有的存储桶策略以及删除我的存储桶策略。没有运气。 –
我已经添加了分配给角色的IAM策略,该角色又被分配给Quesiton中的Ec2实例。 –
Btw,当Ec2InstanceRole分配给Ec2实例时,是否需要设置Ec2实例中的环境变量和/或Java系统属性和/或默认凭证配置文件? –