【发布时间】:2018-05-02 21:13:09
【问题描述】:
我正在使用 AWS Credentials* 连接到我的 AWS S3。
final AmazonS3 s3 = new AmazonS3Client(
new AWSStaticCredentialsProvider(new BasicAWSCredentials("accessKey*",
"secretKey")));
s3.setRegion(Region.US_West.toAWSRegion());
s3.setEndpoint("s3-us-west-1.amazonaws.com");
从我的本地主机,我可以上传图片,因为我启用了版本控制,我得到 versionId 用于下一行。
versionId = s3.putObject(new PutObjectRequest("bucketName", name, convFile)).getVersionId();
PS 3:上面的代码被包装在一个 try-catch 块中,并且 catch 块打印出这个
You failed to upload fileName => fileName.jpeg (Permission denied)
但是,如果我从 ElasticBeanStalk 执行相同的代码,我会得到 versionId=null 并且图像不会上传到 S3。
我没有看到凭据异常。
- 当我在用户(在 IAM 下)中搜索 accessKey 时,我意识到它没有分配给任何用户。
阅读所有文档后,我创建了两个用户。 一个在我创建的组下,另一个没有组。
我使用了这些用户的 accessKey,但我仍然无法将图像上传到 S3。
这就是我的存储桶策略的样子 创建两个用户后
{
"Version": "2012-10-17",
"Id": "Policy1",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::someNumnber:user/username"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucketName"
}
]
}
在创建两个用户之前(当 localhost 成功将图像上传到 S3 时进行了以下设置)
{
"Version": "2012-10-17",
"Id": "Policy15",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bcktName",
"arn:aws:s3:::bcktName/*"
]
}
]
}
我在 4 个晚上都对这个问题感到震惊。 请帮我。 我不使用 boto 或任何其他东西。 它是一个直接上传到 tomcat 的战争文件,它必须将图像上传到 S3。它在 localhost 中有效,但在 S3 中无效。
PS:这就是我的 CORS 配置的样子
<?xml version="1.0" encoding="UTF-8"?>
<CORSConfiguration xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
<CORSRule>
<AllowedOrigin>*</AllowedOrigin>
<AllowedMethod>GET</AllowedMethod>
<AllowedMethod>POST</AllowedMethod>
<MaxAgeSeconds>20000</MaxAgeSeconds>
<ExposeHeader>ETag</ExposeHeader>
<ExposeHeader>x-amz-server-side-encryption</ExposeHeader>
<ExposeHeader>x-amz-request-id</ExposeHeader>
<ExposeHeader>x-amz-id-2</ExposeHeader>
<AllowedHeader>*</AllowedHeader>
</CORSRule>
</CORSConfiguration>
PS 2:
我应该在访问控制列表中做些什么吗?截至目前,我看到所有者帐户与我整个 AWS 的用户名相同。我认为在本地工作的访问密钥和密钥也与所有者帐户有关。
【问题讨论】:
-
您附加到 Elastic Beanstalk EC2 实例的角色策略是什么?
-
@Ashan 你的意思是角色策略,IAM 角色?我的 BeanStalk 的 Ec2 实例的“IAM 角色”看到了“aws-elasticbeanstalk-ec2-role”
-
是的。角色内部授予的权限是什么?
-
AmazonS3FullAccess、AWSElasticBeanstalkWebTier、AWSElasticBeanstalkMulticontainerDocker 和 AWSElasticBeanstalkWorkerTier。一切都有 AWSManagerPolicy。
-
还要仔细检查角色中的信任关系是否有 ec2.amazon...
标签: amazon-web-services amazon-s3 amazon-elastic-beanstalk