向规范 ID 授予权限时 API `aws s3` 和 `aws s3api` 之间的区别

Kar*_*ati 2 amazon-s3 amazon-web-services

为了将文件上传到 s3 存储桶,我们使用以下 CLI 命令(此命令工作正常):

aws s3api put-object --grant-full-control id=e2cxxxxxxxxx --bucket my_bucket --key folder/filename --body filename
Run Code Online (Sandbox Code Playgroud)

aws s3api不支持文件上传> 5GB,我们将不得不开始会很快支持。我尝试使用aws s3(高级 API)进行上传。该命令现在看起来像:

aws s3 cp filename s3://my_bucket/folder/filename --grants full=id=e2cxxxxxxxxx
Run Code Online (Sandbox Code Playgroud)

但是,此命令会引发 An error occurred (AccessDenied) when calling the UploadPart operation: Access Denied

我试图了解两者有何不同,以及为什么一个投掷AccessDenied而另一个不投掷。

Séb*_*acq 8

s3api组命令是与低级S3 API的 1:1 映射。这s3组命令添加了一些更高级别的功能,例如同步。为了能够做到这一点,它通常需要多个 API 级别的权限。因此,在幕后,一个简单的aws s3 cp命令可能会使用多个低级 API,并且调用者需要每个 API 的权限。

您需要在 IAM 策略的“操作”部分添加所有低级 API。

没有简单的方法可以检查高级命令使用的低级 API 列表是什么。在您的示例中,看起来UploadPart是缺失的。您应该尝试将其添加到用户/角色/组策略中并重试,直到您获得所有这些 ( "Actions" : ["s3:Uploadpart", ...]) 您还可以尝试使用具有管理员权限的用户 ( "Actions" : "s3:*") 并配置 Cloudtrail 以从日志中分析使用的所有 S3 API通过一个特定的命令。