1.身份認證
我們生活的世界是一個現(xiàn)實的世界,每個人都有其獨特的身份,幾乎不可能被仿冒。但網(wǎng)絡(luò)是一個完全虛擬的世界,隨著網(wǎng)絡(luò)犯罪的增加,如何在虛擬環(huán)境下對用戶的身份做出準確、快速的識別已經(jīng)成為一個重要的研究課題。
S3中使用基于HMAC-SHA1的數(shù)字簽名方式來確定用戶身份。HMAC-SHA1是一種安全的基于加密Hash函數(shù)和共享密鑰的消息認證協(xié)議,它可以有效地防止數(shù)據(jù)在傳輸過程中被截獲和篡改,維護了數(shù)據(jù)的完整性、可靠性和安全性。HMAC-SHA1消息認證機制的成功在于一個加密的Hash函數(shù)、一個加密的隨機密鑰和一個安全的密鑰交換機制。在新用戶注冊時,Amazon會給每個用戶分配一個Access Key ID和一個Secret Access Key。Access Key ID是一個20位的由字母和數(shù)字組成的串,Secret Access Key是一個40位的字符串。Access Key ID用來確定服務(wù)請求的發(fā)送者,而Secret Access Key則參與數(shù)字簽名過程,用來證明用戶是發(fā)送服務(wù)請求的賬戶的合法擁有者。S3數(shù)字簽名具體實現(xiàn)過程如圖3-17所示。
S3用戶首先發(fā)出服務(wù)請求,系統(tǒng)會自動生成一個服務(wù)請求字符串。HMAC函數(shù)的要功能是計算用戶的服務(wù)請求字符串和Secret Access Key生成的數(shù)字簽名,并將這個簽名和服務(wù)請求字符串一起傳給S3服務(wù)器。當服務(wù)器租用接收到信息后會從中分離出用戶的Access Key ID,通過査詢S3數(shù)據(jù)庫得到用戶的Secret Access Key。利用和上面相同的過程生成一個數(shù)字簽名,然后和用戶發(fā)送的數(shù)字簽名做比對,相同則通過驗證,反之拒絕。
2.訪問控制列表
訪問控制列表(Access Control List,ACL)是S3提供的可供用戶自行定義的訪問控制策略列表。很多時候用戶希望將自己的文件和別人共享但又不想未經(jīng)授權(quán)的用戶進入,此時可以根據(jù)需要設(shè)置合適的訪問控制列表。S3的訪問控制策略(Access Control Policy, ACP)提供如表3-5所示的五種訪問權(quán)限。
需要注意的是桶和對象的ACL是各自獨立的,對桶有某種訪問權(quán)限不代表對桶中的對象也具有相同的權(quán)限,也就是說S3的ACL不具有繼承性。
S3中有三大類型的授權(quán)用戶,分別是所有者(Owner)、個人授權(quán)用戶(User)、 組授權(quán)用戶(Group)。
1)所有者
所有者是桶或?qū)ο蟮膭?chuàng)建者,默認具有的是WRITE_ACP權(quán)限。所有者本身也要服從ACL,如果該所有者沒有READ_ACP,則無法讀取ACL。但是所有者可以通過覆寫相應(yīng)桶或?qū)ο蟮腁CP獲取想要的權(quán)限,從這個意義上來說,所有者默認就是最高權(quán)限擁有者。
2)個人授權(quán)用戶
這包括兩種授權(quán)方式。一種是通過電子郵件地址授權(quán)的用戶(User by E-mail),即授權(quán)給和某個特定電子郵件地址綁定的AWS用戶;另一種是通過用戶ID進行授權(quán)(User by Canonical Representation),這種方式是直接授權(quán)給擁有某個特定AWS ID的用戶。后一種方式比較麻煩,因為ID是一個不規(guī)則的字符串,用戶在授權(quán)的過程中容易出錯。值得注意的是通過電子郵件地址方式授權(quán)的方法最終還是在S3服務(wù)器租用內(nèi)部轉(zhuǎn)換成相應(yīng)的用戶ID進行授權(quán)。
3)組授權(quán)用戶
同樣包括兩種方式。一種是AWS用戶組(AWS User Group),它將授權(quán)分發(fā)給所有AWS賬戶擁有者;另一種是所有用戶組(All User Group),這是一種有著很大潛在危險的授權(quán)方式,因為它允許匿名訪問,所以不建議使用這種方式。