我正在使用Elixir中的ex_aws库来尝试删除一个 对象在 S3 存储桶中,但是,我收到 403,访问被拒绝 生产中的响应,我不知道为什么会发生这种情况。 作为一个相关的问题,使用不同的存储桶和环境,我收到 204 响应,但对象实际上并未被删除。
存储桶的策略对象具有必要的权限,例如:
{
"Sid": "BucketACL",
"Effect": "Allow",
"Principal": {
"AWS": "${my-apps-arn}"
},
"Action": "*",
"Resource": "${my-buckets-arn}/*"
}
我什至尝试添加一个额外的存储桶 ACL 语句,该语句明确 添加s3:DeleteObject
操作,并允许它。
存储桶未进行版本控制,因此我认为这并不意味着我需要添加 调用DeleteObjectVersion
或类似电话。
任何帮助或建议,使我朝着正确的方向,我们将不胜感激。
编辑:
可能还值得一提的是,my-apps-arn
是应用程序的单独 IAM 用户,具有类似于以下内容的内联策略:
{
"Statement": [
{
"Action": [
"s3:*"
],
"Resource": [
"${my-bucket-arn}",
"${my-bucket-arn}/*"
],
"Effect": "Allow"
}
]
}
**编辑 2 **
更多信息,以下代码是我如何制作 请求:
:app_name
|> Application.get_env(:aws_bucket_name)
|> S3.delete_object(path)
|> ExAws.request()
其中path
设置为要删除的对象。
相关的EX_AWS配置变量设置如下:
config :ex_aws,
access_key_id: ["${aws_key_id}"],
secret_access_key: ["${aws_secret_key}"],
s3: [
host: "${s3-bucket-url}",
region: "${region}"
]
此外,作为带外建议,我试图删除一个 对象通过 AWS CLI 工具具有相同的凭证,并且位于 能够删除对象的事实。所以这可能是客户问题之后 都。
此后我改用aws_auth,这为我正确签署请求并允许我删除 S3 中的对象。 可能是ex_aws中存在错误,或者更有可能的是,我试图错误地使用它。 但是,使用aws_auth
既容易,又更支持应用程序的工作流程,我会坚持下去。