2017-04-18 171 views
1

我在S3桶中有一個雲信息模板(url遵循模式,但不完全等於:https://s3.amazonaws.com/bucket-name/cloudform.yaml)。我需要能夠從CLI訪問bash腳本。我希望組織中的所有人(都在此單個帳戶中)可以訪問此模板,但組織外的其他人無法訪問模板。我嘗試過的存儲桶政策如下所示:S3主要桶策略權限

{ 
"Version": "2012-10-17", 
"Id": "Policy11111111", 
"Statement": [ 
    { 
     "Sid": "Stmt111111111", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": "arn:aws:iam::7777777777:root" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::bucket-name/*" 
    } 
] 
} 

有了這項政策,我和我的辦公室中的其他人無法訪問該網址。即使我用root帳戶登錄,我也遇到了拒絕訪問。

而且,這種變化(只設置主要爲*),使鬥訪問人:

{ 
    "Version": "2012-10-17", 
    "Id": "Policy11111111", 
    "Statement": [ 
     { 
      "Sid": "Stmt111111111", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "*" 
      }, 
      "Action": "s3:GetObject", 
      "Resource": "arn:aws:s3:::bucket-name/*" 
     } 
    ] 
} 

顯然跡象都指向我的主要領域是錯誤配置。 777777777是我在「我的帳戶」頁面下看到的帳戶ID的替代品。

那麼,我需要在IAM前端擔心這個嗎?考慮到我是以root用戶身份登錄的,我想我應該可以訪問此內容,只要我輸入存儲桶策略即可。任何幫助將非常感激。

回答

1

簡短而親切:

桶政策不允許你做你想要什麼,因爲主構件通配符限制。最好的辦法是創建一個IAM組,並將所有IAM用戶放入該組,如果他們需要訪問。

龍版本:

只是爲了講清楚,到https://s3.amazonaws.com/bucket-name/cloudform.yaml任何要求必須簽名,並有必要的身份驗證參數或要求將拒絕訪問被拒絕。唯一的例外是如果存儲桶策略或存儲桶ACL允許公共訪問,但聽起來不像這是你想要的。

當你說「組織中的每個人(都在這個單一帳戶中)」時,我假設你指的是帳戶下的IAM用戶正在從AWS控制檯訪問文件,或者使用其他代碼或工具的IAM用戶(例如AWS CLI)來訪問該文件。

所以這聽起來像你想要的是指定委託人作爲

"Principal": { 
    "AWS": "arn:aws:iam::777777777777:user/*" 
} 

因爲這是模式會是怎樣爲777777777777帳戶ID下的任何IAM用戶的能力。不幸的是,這是不允許的,因爲除非你使用catch-all通配符「*」,否則委託人不允許使用通配符。換句話說,「*」是允許的,但「前綴*」或「*後綴」不是。 (祝AWS證明這更好的。)

你可以指定你在鬥政策,像這樣每個用戶IAM:

"Principal": { 
    "AWS": [ 
     "arn:aws:iam::777777777777:user/alice", 
     "arn:aws:iam::777777777777:user/bob", 
     "arn:aws:iam::777777777777:user/carl", 
     ... 
     "arn:aws:iam::777777777777:user/zed", 
} 

但你可能不希望更新的策略爲每個新用戶。

創建一個允許訪問該文件的IAM組是最容易的。然後,您將添加所有IAM用戶到該組。如果您添加新用戶,那麼您必須手動將它們添加到該組,因此它不像您最初想要的那樣方便。