我想使用S3托管通过Kotlin Spring Boot应用程序上载的文件。我按照说明使用了各种其他文档,并尝试了一些解决stackoverflow上类似问题的方法。我总是收到403错误。如何设置S3和IAM以便上载文件?我如何找出问题所在?任何帮助都将不胜感激。
我已经激活了访问日志记录,这需要很长时间,而且还没有对我有太大帮助,特别是因为生成日志需要45分钟。忽略状态为200的响应,日志中会出现以下消息(桶代表我的桶的名称):
我通过
AmazonS3ClientBuilder.defaultClient()
我检查了实现,它从我设置的环境变量中检索凭据。
要提交文件,我在S3Service实现中使用以下方法:
private fun uploadFileToBucket(fileName: String, file: File) {
s3client.putObject(
PutObjectRequest(bucketName, fileName, file)
.withCannedAcl(CannedAccessControlList.PublicRead)
)
}
这是我对IAM用户的策略(用户从组继承策略):
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"s3:PutAccountPublicAccessBlock",
"s3:GetAccountPublicAccessBlock",
"s3:ListAllMyBuckets",
"s3:HeadBucket"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/*"
]
}
]
}
这就是bucket策略:
{
"Version": "2012-10-17",
"Id": "PolicyId",
"Statement": [
{
"Sid": "StmtId",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::account:user/username"
},
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucket"
}
]
}
最后,我希望能够将文件放入存储桶并提供对这些文件的公共访问。例如,我想从Angular应用程序上传图像,通过我的Spring Boot应用程序上传它们并将它们显示在Angular应用程序上。现在我甚至无法通过Postman上传它们而不会出现403错误。
正如Mark B所指出的,IAM策略可以缩短,并且存储桶策略无论如何都不需要。但是,上传文件适用于这些设置和修改后的设置。我的代码和S3配置中的问题是我试图修改ACL而不允许它在我的存储桶中。正如我在下面的屏幕截图中标记的那样,必须禁用阻止新的公共ACL,否则服务器根据定义以403响应。
IAM政策可以缩短为:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket",
"arn:aws:s3:::bucket/*"
]
}
]
}
换句话说,第二条语句提供了完全的S3访问权限,因此IAM策略中的第一条语句毫无意义。
您的桶策略可能有问题。很难说,因为我认为您已经用占位符替换了几个值。但是,在这种情况下,您根本不需要桶策略。我会删除它。
如果有人帮我解决这个问题,我会非常感激。 我正在为我的项目使用codeigniter框架。并想将我的图像上传到amazon s3桶中。当我尝试使用S3.php文件时 string(92)“不支持您提供的授权机制。请使用AWS4-HMAC-SHA256。” 有人能帮我解决这个问题吗。
我正在使用amazon s3 android低级sdk上传文件,并希望设置md5校验和来上传数据。 1)以下是创建凭据的代码: 2)以下是计算md5的代码 } 3)以下是使用元数据设置md5的代码: 但是当我设置md5时,amazon抛出了一个异常: 原因:com.amazonaws.services.s3.model.AmazonS3Exception:匿名用户无法发起多部分上传。请进行身份验证
有没有一种方法可以将文件列表从一个S3存储桶复制到另一个存储桶?两个S3存储桶都在同一个AWS帐户中。我可以使用aws cli命令一次复制一个文件: 然而,我有1000份文件要复制。我不想复制源存储桶中的所有文件,因此无法使用sync命令。有没有一种方法可以用需要复制的文件名列表来调用一个文件,从而自动化这个过程?
问题内容: 我想使用python复制s3存储桶中的文件。 例如:我的存储桶名称=测试。在存储桶中,我有2个文件夹名称为“ dump”和“ input”。现在,我想使用python将文件从本地目录复制到S3“转储”文件夹…有人可以帮助我吗? 问题答案: 尝试这个… [更新]我不是pythonist,所以感谢您对import语句的注意。另外,我不建议将凭证放在您自己的源代码中。如果您在AWS内部运行此
问题内容: 我认为,当jenkins构建静态网站时,我有一个简单的用例,因此在构建结束时,我有一个类似于$ WORKSPACE / site-result的文件夹。 现在,我想将此文件夹上传到S3(如果已有存储,请清理存储桶)。我该怎么做? 我正在使用管道,但是如果需要可以切换到自由样式项目。到目前为止,我已经安装了S3插件(S3发布者插件)。已创建IAM用户。向“配置系统”部分添加了凭据。并且找
我用的是fs。readFile读取大约700KB的本地mp4文件,AWS SDK将文件加载到我的S3存储桶中。这个过程是可行的,但文件已损坏,可能是因为S3上生成的文件大小仅为500KB左右而被截断。 我使用的代码可以很好地处理图像。只是不适用于mp4文件。这是我的代码: 我已尝试从params对象中省略ContentEncoding和/或ContentType属性。 编辑: 因此,当我conso