關注公衆號:AWS愛好者(iloveaws)
文 | 沉默惡魔(禁止轉載,轉載請先經過作者同意)
網站:www.iloveaws.cn
【 Domain 1的組織複雜性設計(Design for Organizational Complexity)】——-配置跨賬戶S3存儲桶的訪問(Cross Account S3 Bucket Configuration)
Hello大家好,歡迎回來,我們今天的課程內容是跨賬戶S3存儲桶的訪問。
當前,在很多組織中,應用跨賬戶S3存儲桶訪問的架構組成是非常普遍的,同樣,對於AWS SAP認證考試,掌握跨賬戶存儲桶的訪問知識點也是非常重要。
我們開始今天的課程。
使用存儲桶策略配置跨賬戶S3存儲桶訪問
將S3存儲桶的訪問權限授予屬於不同aws帳戶的委託人,在很多組織的AWS架構中非常常見,爲了能夠讓大家更容易的掌握這方面內容,我將要做個實操演示,畫了個簡單的架構圖,後面的演示都依照此架構來進行。
我們看下圖,假設當前組織有兩個AWS賬戶,左邊的ACCOUNT A 中包括組織所有的S3存儲桶,右邊的ACCOUNT B中運行着組織所有的EC2資源,假設ACCOUNT B中的EC2需要定期備份重要數據到ACCOUNT A中的存儲桶,能不能實現呢?我們知道,創建的S3存儲桶默認情況下是私有的,任何存儲桶擁有者之外的賬戶都不能訪問存儲桶,在這種情況下,就需要使用存儲桶策略來達成 跨賬戶進行S3存儲桶訪問,也就是說ACCOUNT A中的創建存儲桶策略,允許ACCOUNT B訪問存儲桶。
在接下來的內容,我們來演示下如何實現。
配置S3存儲桶策略
首先,來到ACCOUNT A的S3的管理控制檯,進入iloveawscn這個存儲桶,然後權限-進入存儲桶策略,可以看到目前這個存儲桶沒有配置存儲桶策略。
前面講過,如果要讓ACCOUNT B能夠跨賬戶訪問S3存儲桶,是需要配置存儲桶策略的,我已經準備好了一個簡單的存儲桶策略,一下就是存儲桶策略的內容,大家可以直接使用它進行測試。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "cross",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::256454142732:root"
},
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::iloveawscn",
"arn:aws:s3:::iloveawscn/*"
]
}
]
}
讓我現在把策略粘貼過來,然後看下策略的具體內容:
Effect 是允許,Principal資源委託人,要配置爲ACCOUNT B也就是EC2所在賬戶的arn。
我們切換到ACCOUNT B瀏覽器,複製一下賬戶id,256454142732,將它複製到存儲桶策略的Principal。
Action爲S3的所有動作。然後看Resource,要將此存儲桶的arn將此部分替換。我們已經替換好了,爲了更清楚我在演示下,替換完成後保存,這樣我們的存儲桶策略已經生效了。
這裏需要在說明一點,大家並不需要自己從頭開始寫一個存儲桶策略,AWS提供了策略生成器幫助我們生成策略,在aws官方文檔中您也會找到很多存儲桶策略的示例,我經常採用的方法是當需要寫一個策略的時候使用百度或者谷歌搜索引擎通過搜索關鍵字,找到策略示例在aws官方文檔的位置,然後修改後使用策略,個人覺得這種方式是最方便的。當然要熟練應用策略就需要您對策略的組成內容有所掌握。
好了,存儲桶策略我們已經保存了,我們繼續。
準備工作:將ACCOUNT A和ACCOUNT B憑證配置到CLI的credentials配置文件
然後切換到ACCOUNT B的瀏覽器,看下我提前做好的準備工作。
進入到IAM-用戶,我已經創建好了一個名爲ACCOUNT B的用戶,並給這個用戶分配了管理員訪問權限,同時爲ACCOUNT B用戶生成了訪問密鑰。
另外我已經將ACCOUNT A和ACCOUNT B的訪問密鑰全部配置到了CLI的credentials配置文件中,也就是說,我現在可以使用CLI可分別指定使用ACCOUNTA或者B的密鑰憑證來執行CLI命令,來看一下:
進入到CLI,我們看下credentials配置文件的內容,我配置了兩個賬戶,上面的是ACCOUNT A賬戶和它對應的訪問密鑰,下面的是ACCOUNT B賬戶和它對應的訪問密鑰,所以目前cli的配置中包括了ACCOUNT A和B兩個賬戶的密鑰信息。
好的,以上介紹了目前提前配置的內容,那接下來我們繼續演示。
使用ACCOUNT A和B的憑證測試訪問S3存儲桶
首先,在 CLI中,我們先用ACCOUNT A的密鑰,使用cli命令列出iloveawscn這個存儲桶裏面的對象。使用—profile參數指定使用配置文件中的accounta憑證。
可以看到我們已經成功列出了存儲桶中的對象,存儲桶中有一個test.txt文件。
下面我們同樣進行上述操作,但是使用ACCOUNT B的密鑰憑證,看看能不能訪問ACCOUNT A的存儲桶的對象。也就是說測試ACCOUNT B實現跨賬戶訪問ACCOUNT A中的S3存儲桶。將—profile 後面修改爲ACCOUNT B,看下結果,好的,同樣允許訪問並列出了存儲桶中的對象。說明我們前面配置的存儲桶策略已經生效了
接下來我們繼續做測試,在我們cli的當前目錄有個accountb_file文件,這是我們已經建立好的一個文本文件,我們cat一下文件內容就一行。
現在我們要將這個文件使用ACCOUNT B的憑證,將其拷貝到ACCOUNT A的iloveawscn存儲桶中,這樣的話這個文件是屬於ACCOUNT B的。
來使用CLI操作下:
aws s3 cp accountb_file s3://iloveawscn/ —profile accountb
搞定,可以看到accountb_file這個文件已經成功從我本地拷貝至ACCOUNT A的存儲桶中
我們到ACCOUNT A 的s3控制檯確認下,進入存儲桶然後刷新下,我們可以看到2個文件,test.txt是開始本課前就存在的文件,另一個accountb_file是剛纔我們使用的ACCOUNT B的憑證上傳的文件,文件已經成功上傳至存儲桶。
到這裏,我們通過上面的演示,就已經成功實現了跨賬戶S3存儲桶的訪問。
我是根用戶,爲什麼存儲桶中有的文件我還是沒權限操作?
接下來我想繼續做個測試,切換到CLI,我想使用ACCOUNT A的憑證 ,將存儲桶中的test.txt 拷貝到我本地,注意這個test.txt文件是之前課程通過ACCOUNT A 控制檯上傳的文件,我們現在來操作下:
aws s3 cp s3://iloveawscn/test.txt . —profile accounta
好的,test.txt文件已經成功拷貝到我本地,我們看下文件已存在。
現在讓我同樣使用ACCOUNT A憑證拷貝accountb_file這個文件到我本地,我改一下命令,然後執行:
aws s3 cp s3://iloveawscn/accountb_file . —profile accounta
提示拷貝發生錯誤,拒絕訪問,這是爲什麼呢?
我們切換到accounta控制檯頁面,然後進入存儲桶後找到accountb_file這個文件,在右側面板屬性可以看到很多屬性是拒絕訪問的。而我現在登陸到控制檯的用戶,是ACCOUNT A的根用戶,在ACCOUNT A中擁有最大的管理員權限,但是同樣還是提示拒絕訪問這個文件。我們嘗試下載這個文件,也無法下載。
這是很多學友比較困惑的地方,大家可以思考下原因,我們將在下節課講解這部分內容。
好了,我們今天介紹了跨賬戶s3存儲桶訪問內容,希望大家能夠通過今天的一系列的實操測試對這部分知識點有所掌握。
希望此係列教程能爲您通過 AWS解決方案架構師認證 Professional 認證考試帶來幫助,如您有任何疑問:
關注公衆號:AWS愛好者(iloveaws)
文 | 沉默惡魔(禁止轉載,轉載請先經過作者同意)
網站:www.iloveaws.cn
我們今天的課程就到這裏,感謝大家的觀看,我們下一課程再見。