雲計算中的認證基礎——AK

AK還不爲大家所熟知,但我敢百分百肯定,未來的幾年裏,AK在互聯網業界的知名度絕對不會比AK47差,甚至會更強,會達到“無人不知,無人不曉”的程度。任何使用雲計算的企業和個人,都必須首先經過AK的洗禮!


什麼是AK

記得第一次和別人分享AK的時候,對方都先是一愣,然後調侃我怎麼一個搞互聯網的去搞軍工了!這不是一個段子,也許你們腦海中想到的AK還是1974年11月7日在閱兵式上首次露面的這個傢伙。但是今天我們的故事和它沒有半毛錢關係。

AK47

雖然AK還不爲大家所熟知,但我敢百分百肯定,未來的幾年裏,AK在互聯網業界的知名度絕對不會比AK47差,甚至會更強,會達到“無人不知,無人不曉”的程度。任何使用雲計算的企業和個人,都必須首先經過AK的洗禮!

那麼AK是什麼?它又有什麼本事能做到人盡皆知呢?

雲計算歸根結底的產物就是API,也把它叫做API經濟。即:雲計算裏面的API是產品,是能夠爲雲計算提供商帶來經濟利益的。說白了,就是調用API需要花錢。這個邏輯就和用水用電需要交錢一個道理。用水的時候有水錶,根據水錶的編號能找到戶主的身份。用電的時候有電錶,根據電錶的編號能找戶主的身份。使用雲計算API的時候,要根據什麼來找到使用者的身份的呢?答案是AK。

AK的英文全稱是Access Key,翻譯成中文是訪問密鑰。它屬於雲計算中身份認證領域的範疇。用戶在使用雲計算API的時候出示AK,這樣雲服務提供商就能夠根據AK來確定使用者的身份,進而向其收費了。

關於AK的定義,AWS在其文檔Understanding and Getting Your Security Credentials中有詳細的闡述:

Access Key包含兩部分:access key id (例如AKIAIOSFODNN7EXAMPLE)和access key secret (例如wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY)。當訪問AWS API的時候,可以使用Access Key對API請求進行簽名。像用戶名和密碼一樣,在簽名的過程中,必須同時使用access key id 和access key secret。從安全的角度,你需要下你個對待用戶名密碼一樣對待你的Access Key。

使用AK簽名流程

正如上面的文檔所述,當訪問雲計算API的時候,可以使用AK對API請求進行簽名。簽名就是給一個API請求添加認證的過程,可以簡單的理解爲給API請求“蓋章”。有了簽名的加持,雲服務提供廠商就可以識別API調用是誰發起的了。使用AK進行簽名的流程如下入所示。

AWS簽名過程(來源AWS官網文檔)

AWS V2簽名過程細節

本文以AWS第二版簽名爲例,講解下AK簽名的流程。假設某用戶持有AK的信息如下:

<AKIAIOSFODNN7EXAMPLE, wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY>

要發起一個API請求,訪問AWS中elasticmapreduce這款雲產品的DescribeJobFlows接口,基礎的請求信息如下:

https://elasticmapreduce.amazonaws.com?
Action=DescribeJobFlows
&Version=2009-03-31

AWS在收到這個請求以後,並不知道請求者是誰,也不知道該向誰收費了。爲此,AWS要求用戶在請求中添加如下參數:

  • AWSAccessKeyId:AK中的access key id
  • SignatureMethod:本次請求的簽名方法
  • SignatureVersion:本次請求的簽名版本
  • Timestamp:發起本次請求的時間戳
  • Signature:簽名的值

在上面的參數中,前四個參數都是可以直接獲取或者設定的,最後一個參數需要請求者自己計算。在添加簽名之前的請求如下:

https://elasticmapreduce.amazonaws.com?
Action=DescribeJobFlows
&Version=2009-03-31
&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&Timestamp=2011-10-03T15:19:30 

在一切準備就緒之後,就可以按照AWS文檔Signature Version 2 Signing Process規定的方式計算簽名了。首先標準化待簽名的字符串如下:

GET
elasticmapreduce.amazonaws.com
/
AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE&Action=DescribeJobFlows&SignatureMethod=HmacSHA256&SignatureVersion=2&Timestamp=2011-10-03T15%3A19%3A30&Version=2009-03-31

接着使用SignatureMethod指定的算法和用戶持有的access key secret進行簽名,結果如下

i91nKc4PWAt0JJIdXwz9HxZCJDdiy6cf/Mj6vPxyYIs=

上面的簽名值經過URL編碼之後就可以添加到請求中了,最終用戶向AWS發送的請求如下:

https://elasticmapreduce.amazonaws.com?
Action=DescribeJobFlows
&Version=2009-03-31
&AWSAccessKeyId=AKIAIOSFODNN7EXAMPLE
&SignatureVersion=2
&SignatureMethod=HmacSHA256
&Timestamp=2011-10-03T15:19:30 
&Signature=i91nKc4PWAt0JJIdXwz9HxZCJDdiy6cf%2FMj6vPxyYIs%3D

使用AK的意義

雖然在上文中頻繁提到,使用AK是爲了雲服務提供上能夠知道該向誰收費。但這僅僅是AK衆多意義中的一丟丟。AWS在其文檔Signing AWS API Requests 中做了詳細描述。使用AK對API請求進行簽名有如下三個意義:

1. 幫助雲服務提供商驗證API請求者的身份。

簽名能夠保證請求的發起者持有合法的access key secret

2. 防止數據在網絡傳輸的過程中被篡改

將請求參數作爲一部分來計算hash簽名,並將簽名作爲API請求的一部分。AWS可以在收到請求時驗證簽名的合法性,以保證傳輸的數據沒有被篡改。(一旦被篡改,簽名就不對了)

3. 防止重放攻擊

請求的參數中添加了時間戳信息,一旦超過一定的時間限制,請求將不再可用。這就降低了中間人截獲API請求並進行重方的風險。

本文以AWS爲例,講解了在雲計算場景中AK的基本概念、AK的使用方法、以及AK的意義和價值。正如開篇所講,雖AK還不爲大家所熟知,但隨着越來越多的人使用雲計算,AK必將成爲他們走上雲計算的第一課。未來的幾年裏,AK在互聯網業界的知名度會越來越高。當然,我們也要提前意識到,任何事情都有利有弊。AK的普及也必將帶來一些新的值得關注的安全問題。本文就不一一贅述了。

覺得本文好的話,就來關注我吧!@E-臻
圖標

 

發佈了140 篇原創文章 · 獲贊 92 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章