簡體   English   中英

“aws s3 ls”和“aws s3api list-objects”的不同行為

[英]Different behavior for “aws s3 ls” and “aws s3api list-objects”

我看到了aws s3 lsaws s3api list-buckets的不同行為

這是第一個:

$ aws s3 ls s3://demo.for.customers

Bucket: demo.for.customers
Prefix: 

      LastWriteTime     Length Name
      -------------     ------ ----
                           PRE 5CE4D191-FD14-4C85-8146-9FB8C29B7A7B/
                           PRE FFBC4675-F864-40E9-8AB8-BDF7A0437010/

所以,我能夠列出demo.for.customers中的對象

現在,當我使用s3api運行相同的東西時,我被拒絕訪問:

$ aws s3api list-objects --bucket demo.for.customers
A client error (AccessDenied) occurred: Access Denied

問題:為什么我通過s3api拒絕列出對象的訪問權限。

我提出這個問題的原因是,如果我使用AWS S3 Ruby SDK ,我會遇到同樣的問題。

但是,當我使用aws s3 ls時,事情很好。

因此AWS S3 Ruby SDKaws s3api表現出相同的行為。 所以,我在這里只粘貼了aws s3api CLI問題。

順便說一句,這是已應用於運行以上所有命令的用戶的IAM策略:

{
  "Statement": [
    {
      "Action": [
        "s3:ListAllMyBuckets",
        "s3:GetBucketLocation"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::"
      ]
    },
    {
      "Action": [
        "s3:ListBucket"
      ],
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::demo.for.customers"
      ],
      "Condition": {
        "StringEquals": {
          "s3:prefix": [
            "",
            "FFBC4675-F864-40E9-8AB8-BDF7A0437010/"
          ],
          "s3:delimiter": [
            "/"
          ]
        }
      }
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": [
        "arn:aws:s3:::demo.for.customers/FFBC4675-F864-40E9-8AB8-BDF7A0437010/"
      ]
    }
  ]
}

這是ruby代碼產生完全相同的錯誤;

#!/usr/bin/ruby

require 'aws-sdk'
require 'awesome_print'
AWS.config( :access_key_id      => 'whatever', 
            :secret_access_key  => 'again whatever',
            :region             => 'us-west-2')

s3 = AWS.s3
buckets = s3.client.list_objects(:bucket_name => "demo.for.customers")
ap buckets

輸出是:

# ruby s3policies.rb 
/var/lib/gems/1.9.1/gems/aws-sdk-1.14.1/lib/aws/core/client.rb:366:in `return_or_raise': Access Denied (AWS::S3::Errors::AccessDenied)

根據您定義的角色,對列表對象的調用需要前綴和分隔符。

以下命令適用於您:

aws s3api list-objects --bucket demo.for.customers --prefix "" --delimiter "/"

如果您在ListBucket策略中刪除了分隔符條件,那么這將適用於您:

aws s3api list-objects --bucket demo.for.customers --prefix ""

如果您還刪除了前綴條件,那么這將適用於您:

aws s3api list-objects --bucket demo.for.customers

測試上述內容的一種好方法是復制角色策略並逐步刪除條件,直到它按預期運行。

確保從運行此位置的位置(目錄)中設置了正確的權限。

該目錄應具有正確的所有權(所有者應該是運行此實用程序的用戶而不是root或任何其他用戶)並且具有足夠的權限來創建目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM