1. 程式人生 > >OSS之訪問控制

OSS之訪問控制

1. OSS之AccessKey

OSS提供了物件儲存服務,在訪問OSS資源時,根據訪問者的資訊可分為匿名訪問和帶簽名訪問。 在OSS中籤名涉及的AccessKey主要有三種:

  • 阿里雲賬號AccessKey:雲賬號AccessKey對擁有的資源有完全的許可權,每個阿里雲賬號能夠同時擁有不超過5個active或者inactive的AK對(AccessKeyId和AccessKeySecret);
  • RAM子賬號AccessKey:RAM (Resource Access Management) 是阿里雲提供的資源訪問控制服務;RAM賬號AK指的是通過RAM被授權的AK,這組AK只能按照RAM定義的規則去訪問Bucket裡的資源;通過RAM,您可以集中管理您的使用者(比如員工、系統或應用程式),以及控制使用者可以訪問您名下哪些資源的許可權;
  • STS賬號AccessKey:STS(Security Token Service)是阿里雲提供的臨時訪問憑證服務,STS賬號AK指的是通過STS頒發的AK;

相應有三種驗籤方式:AK驗證/RAM驗證/STS驗證;

2. OSS之許可權控制

OSS提供了多種形式的許可權控制:Bucket級別許可權/Object級別許可權/賬號級別許可權(RAM)/臨時賬號許可權(STS),具體如下:

  • Bucket級別許可權:三種訪問許可權:public-read-write/public-read/private
    這裡寫圖片描述

  • Object級別許可權:四種訪問許可權:private/public-read/public-read-write/default,具體如下:
    這裡寫圖片描述

  • 賬號級別許可權(RAM):阿里雲賬號通過RAM建立自己AccessKey的子使用者時,可通過Policy的配置方式指定授權內容,Policy具體見下節;

  • 臨時賬號許可權(STS):通過阿里雲STS (Security Token Service) 服務為阿里雲賬號(或RAM使用者)提供的短期訪問許可權,通過STS生成的憑證包括安全令牌(SecurityToken)、臨時訪問金鑰(AccessKeyId, AccessKeySecret),可通過Policy的配置方式指定授權內容,Policy具體見下節;

3. OSS之Policy

{
    "Version": "1",
    "Statement
": [ { "Action": [ "oss:GetBucketAcl", "oss:ListObjects" ], "Resource": [ "acs:oss:*:1775305056529849:mybucket" ], "Effect": "Allow", "Condition": { "StringEquals": { "acs:UserAgent": "java-sdk", "oss:Prefix": "foo" }, "IpAddress": { "acs:SourceIp": "192.168.0.1" } } }, { "Action": [ "oss:PutObject", "oss:GetObject", "oss:DeleteObject" ], "Resource": [ "acs:oss:*:1775305056529849:mybucket/file*" ], "Effect": "Allow", "Condition": { "IpAddress": { "acs:SourceIp": "192.168.0.1" } } } ] }

這是一個授權的Policy,使用者用這樣的一個Policy通過RAM或STS服務向其他使用者授權。Policy當中有一個Statement(一條Policy當中可以有多條Statement)。Statement裡面規定了相應的Action、Resource、Effect和Condition。

這條Policy把使用者自己名下的mybucket和mybucket/file*這些資源授權給相應的使用者,並且支援GetBucketAcl、GetBucket、PutObject、GetObject和DeleteObject這幾種操作。Condition中的條件表示UserAgent為“java-sdk”,源ip為“192.168.0.1”的時候鑑權才能通過,被授權的使用者才能訪問相關的資源。Prefix這個Condtion是在GetBucket(ListObjects)的時候起作用的,關於這個欄位的解釋詳見OSS的API文件。

具體項含義請轉官網:訪問控制

4. OSS之訪問例項

  • 使用AppServer來做資料中轉和資料隔離:
    這裡寫圖片描述
    如上圖所示,只有AppServer能訪問雲服務,ClientApp的每次讀寫資料都需要通過AppServer,AppServer來保證不同使用者資料的隔離訪問,對於該種使用方式,使用阿里雲賬號或者RAM賬號提供的金鑰來進行簽名驗證訪問;避免出現安全問題,通常不使用阿里雲賬號;

  • 使用STS讓使用者直接訪問OSS:
    這裡寫圖片描述

    1. App使用者登入。App使用者和雲賬號無關,它是App的終端使用者,AppServer支援App使用者登入。對於每個有效的App使用者來說,需要AppServer能定義出每個App使用者的最小訪問許可權;
    2. AppServer請求STS服務獲取一個安全令牌(SecurityToken)。在呼叫STS之前,AppServer需要確定App使用者的最小訪問許可權(用Policy語法描述)以及授權的過期時間。然後通過扮演角色(AssumeRole)來獲取一個代表角色身份的安全令牌,角色管理與使用相關內容請參考RAM使用者指南中的角色管理;
    3. STS返回給AppServer一個有效的訪問憑證,包括一個安全令牌;(SecurityToken)、臨時訪問金鑰(AccessKeyId, AccessKeySecret)以及過期時間;
    4. AppServer將訪問憑證返回給ClientApp。ClientApp可以快取這個憑證。當憑證失效時,ClientApp需要向AppServer申請新的有效訪問憑證。比如,訪問憑證有效期為1小時,那麼ClientApp可以每30分鐘向AppServer請求更新訪問憑證;
    5. ClientApp使用本地快取的訪問憑證去請求Aliyun Service API。雲服務會感知STS訪問憑證,並會依賴STS服務來驗證訪問憑證,正確響應使用者請求;

5. 參考