【发布时间】:2018-04-10 07:09:46
【问题描述】:
在我的代码正常工作之前,我将存储桶策略设置得太开放。
{
"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-elasticbeanstalk-ec2-role,它提供了对 S3 的 FullAccess(我知道完全访问是危险的)。
我在部署到 Ec2 的 webapp 中使用以下 java 代码。
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
【问题讨论】:
标签: amazon-web-services amazon-s3 amazon-ec2 aws-sdk