close

  最近研究了一下怎麽用REST API的方法執行S3相關存取物件的操作,發現要APICall S3 相關存取操作的話,在API標頭需要放入 Authorization 標頭,因為AWS需要藉由Authorization的資訊確定來存取S3 ServiceAPI Caller是合法的AWS User,但要手刻API並在裡面加入Authorization的表頭實在不容易,也寫code去計算Authorization的結果跟Signature,所以如果只是想純粹用api 方式去存取S3 Service的話,還有另一種透過AWS CLIs3api command來取代REST API 呼叫,效果幾乎一模一樣。

  下圖是一般API 呼叫s3 serviceRequest Sample:

  下圖是要寫code來計算Authorization的演算法:

由上可知要寫code實作Authorization的演算法還是有一點功夫要費,所以我們可以用這裡要使用的另一種快速而簡單的方法: aws s3api command 來執行S3 Service API 呼叫。

  AWS 提供AWS CLI 工具讓使用者可以透過本機端的Command Line來執行AWS 相關作業,這樣就可以不用在AWS Console 執行AWS的工作,同時也可以透過Shell Script方式來執行AWS的自動化作業。

  S3api 便是AWS CLI的指令集合之一,可以用API方式來調用S3 Service存取S3 bucket/object 資源,算是非常方便的指令。

  所以要執行S3api 那就要先安裝AWS CLI,一般windows常見的方式有pip install msi installer ,安裝包可以自AWS官網下載,安裝過程只要下一步一直做就好,這邊就不做介紹,在安裝好AWS CLI 之後,下一步就是打開Command Line 執行aws configuration的設定。

  設定 aws configuration,是要指定操作aws CLI指令的身分,該身分必須是AWS的合法註冊用戶,所以你必須先要有AWS Account才能使用 aws s3api指令。這邊也略過AWS Account 註冊過程,請自行前往AWS 註冊Account

  在註冊完AWS Account之後,就可以從AWS IAM Console取得用戶account AccessKeyID SecretKey,這兩個參數代表AWS User身分,必須 configure AWS CLI 中。

   首先,執行以下指令: $aws configure , 然後依要求輸入底下資訊:

  1. AWS Access Key ID : 你的AccesskeyID
  2. AWS Secret Access Key : 你的 Secretkey 密鑰
  3. Default Region Name : 你的default account region, ex. us-east-1
  4. Default Output Format : json( 空值亦可)

  設定完成後,你下的s3api 指令都會以你的accesskeyid 所代表的aws authenticated account 身分來執行,所以你無法存取到不屬於該 Account 所能存取的s3 bucketobject

  例如我存取一個scd2018-test/payload.txt 檔案,就會AccessDenied,因為改object未開放給owner 以外的人存取:

$aws s3api get-object –bucket scd2018-test –key payload.txt payload.txt

  • Get-object : 呼叫要get object資源的 Method
  • --bucket : 目標bucket
  • --key : object 名稱
  • 最後是Destination : 檔案要下載到本地的payload.txt

 

底下我先嘗試列出自己的bucket 有沒有object可以給我存取, 發現有一張WP_20170530_001.jpg 檔可以存取:

$aws s3api list-objects-v2 –bucket terryliu-demo

於是我下載回來變成demo.jpg:

$aws s3api get-object –bucket terryliu-demo --key WP_20170530_001.jpg demo.jpg

這樣就下載成功了。

  aws s3api command 是一個很強大的工具,可以針對全世界的s3 bucket/object 進行操作,也提供修改他們的permission/acl的方法,因此如果駭客知道某一特定bucket/object可以被aws authenticated user存取,他就可以透過s3api 一般REST API方式來存取AWS S3上別人的敏感或重要資源,因此s3 bucket/objectpermission acl 控管相當重要,一不小心就有可能被駭客用s3api工具竊取,不可不慎。

arrow
arrow

    jackterrylau 發表在 痞客邦 留言(0) 人氣()