簡體   English   中英

Boto 403 AccessDenied Exception with IAM用戶憑據,適用於Cyber​​duck和AWS Web控制台

[英]Boto 403 AccessDenied Exception with IAM user credentials, Works in Cyberduck and AWS web console

我在stackoverflow上發現了很多關於這方面的問題,但沒有解決我的問題。 經過大量的谷歌搜索仍然我面臨AccessDenied異常:

<Error>
<Code>AccessDenied</Code>
</Message><RequestId>ADF9C0DE6C86DF4F</RequestId>
<HostId>JwQLkNB0LuJvh0jwrsJe9wazxLsd+hrZ2qwvjCvmXYd2A/ckCrsotRMHm</HostId>
</Error>

以下是我的用戶和組的政策文檔:

用戶政策:

{
"Statement":[
  {
     "Sid":"AllowListBucketIfSpecificPrefixIsIncludedInRequest",
     "Action":"s3:*",
     "Effect":"Allow",
     "Resource":["arn:aws:s3::: mybucket", "arn:aws:s3:::mybucket/*"],
     "Condition":{
        "StringLike":{"s3:prefix":["Development/*"]
        }
     }
  },
  {
    "Sid":"AllowUserToReadWriteObjectDataInDevelopmentFolder", 
    "Action":"s3:*",
    "Effect":"Allow",
    "Resource":["arn:aws:s3::: mybucket/Development/*"]
  },
  {
     "Sid": "ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment",
     "Action": ["s3:ListBucket"],
     "Effect": "Deny",
     "Resource": ["arn:aws:s3::: mybucket", "arn:aws:s3::: mybucket/*"],
     "Condition":{  "StringNotLike": {"s3:prefix":["Development/*"] },
                    "Null"         : {"s3:prefix":false }
      }
  }
]
}

組策略:

{
"Statement": [
{
  "Sid": "AllowGroupToSeeBucketListAndAlsoAllowGetBucketLocationRequiredForListBucket",
  "Action": ["s3:ListAllMyBuckets", "s3:GetBucketLocation"],
  "Effect": "Allow",
  "Resource": ["arn:aws:s3:::*"]
},
{
  "Sid": "AllowRootLevelListingOfCompanyBucket",
  "Action": ["s3:ListBucket"],
  "Effect": "Allow",
  "Resource": ["arn:aws:s3::: mybucket", "arn:aws:s3::: mybucket/*"],
  "Condition":{
      "StringEquals":{"s3:prefix":[""]}
   }
},
{
  "Sid": "RequireFolderStyleList",
  "Action": ["s3:ListBucket"],
  "Effect": "Deny",
  "Resource": ["arn:aws:s3:::*"],
  "Condition":{
      "StringNotEquals":{"s3:delimiter":"/"}
   }
 },
{
  "Sid": "ExplictDenyAccessToPrivateFolderToEveryoneInTheGroup",
  "Action": ["s3:*"],
  "Effect": "Deny",
  "Resource":["arn:aws:s3:::mybucket/Private/*"]
},
{
  "Sid": "DenyListBucketOnPrivateFolder",
  "Action": ["s3:ListBucket"],
  "Effect": "Deny",
  "Resource": ["arn:aws:s3:::*"],
  "Condition":{
      "StringLike":{"s3:prefix":["Private/"]}
   }
}
]
}

使用用戶名創建用戶 - testuser然后為此IAM用戶獲取access_key和secret_access_key。 現在我可以使用aws web控制台和cyberduck訪問mybucket及其子文件夾。

但每當我嘗試使用boto訪問時,獲取AccessDenied異常(錯誤403)。

博托碼:

<!-- language: python -->
from boto.s3.connection import S3Connection
connect = S3Connection('_______________________','_____________________')
# Without Validate
bucket = conn.get_bucket('mybucket', validate=False) #here got bucket object
bucket.get_key('one/two/three.png') # AccessDenied


#With Validate
bucket = conn.get_bucket('mybucket') #AccessDenied

當我嘗試使用boto-rsync時,即使我遇到同樣的問題。

有什么建議 ??

錯誤403表示拒絕訪問,因此存在身份驗證問題。 要分析API調用和響應,可以使用以下行:

boto.set_stream_logger('boto')

我注意到的一些觀點:

  • 組和用戶規則沒問題, 刪除了“mybucket”前面的前導空格
  • 第一個目錄名是“開發”而不是“一個”
  • “無驗證”表示直接訪問文件

以下代碼工作正常:

import boto
conn = boto.connect_s3("id","secret")
bucket = conn.get_bucket('mybucket', validate=False)
bucket.get_key('Development/two/three.png')
# <Key: mybucket,Development/two/three.png>

但我是IAM的新手,似乎“With Validate”首先嘗試讀取“/ mybucket /”,但是它被拒絕通過用戶策略ExplicitlyDenyAnyRequestsForAllOtherFoldersExceptDevelopment。

編輯評論 “訪問開發中的所有鍵”試試這個::

list = bucket.list("Development/",delimiter="/")
for key in list:
    print key.name

暫無
暫無

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

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