開發(fā)指南

本文主要面向新浪云存儲(chǔ)服務(wù)的開發(fā)者,開發(fā)者可通過此文學(xué)習(xí)如何使用新浪云存儲(chǔ)進(jìn)行開發(fā)

ACL

新浪云存儲(chǔ)ACL(Access Control List,即:訪問控制列表)在計(jì)算機(jī)文件系統(tǒng)中體現(xiàn)為附加在一個(gè)object上的權(quán)限列表;用戶可以通過ACL指定哪些用戶、組或系統(tǒng)進(jìn)程可被授予object的訪問權(quán)限,以及允許在object上進(jìn)行哪些操作。

ACL功能

云存儲(chǔ)ACL具備以下功能:

  • 身份驗(yàn)證:

    新浪云存儲(chǔ)的開發(fā)者可根據(jù)AccessKey和SecureKey對(duì)本次請(qǐng)求進(jìn)行簽名,ACL根據(jù)簽名來判斷當(dāng)前發(fā)起請(qǐng)求的用戶的身份。

  • 權(quán)限管理與校驗(yàn):

    新浪云存儲(chǔ)用戶可通過ACL來管理bucket和object的訪問控制權(quán)限,管理方式即設(shè)置bucket policy和object policy。通過設(shè)置policy可允許云存儲(chǔ)的注冊(cè)用戶將資源(bucket和object)的訪問和控制權(quán)限開放給其他用戶。

    新浪云存儲(chǔ)用戶可以是:

    • 云存儲(chǔ)注冊(cè)用戶
    • 匿名用戶
    • 其他用戶系統(tǒng)中的用戶, 通過簽名方式靈活指定

    policy的功能說明:

    • bucket policy:可通過對(duì)bucket的權(quán)限設(shè)置實(shí)現(xiàn)粗粒度的權(quán)限控制;
    • object policy:則是針對(duì)單個(gè)文件進(jìn)行權(quán)限控制。


ACL基本概念

名稱 含義 描述
Policy 權(quán)限 用戶通過Policy來管理云存儲(chǔ)內(nèi)資源訪問權(quán)限;
Policy可以由一條或多條策略組成;
Policy之間相互獨(dú)立。
Owner 資源的擁有者 創(chuàng)建bucket或object時(shí),ACL在policy中設(shè)置的Owner信息;
Owner與Bucket、Object綁定,不可被修改,對(duì)用戶透明;
Owner具備Bucket、Object的root權(quán)限,可以進(jìn)行任何操作;
ACL通過簽名信息來判斷當(dāng)前發(fā)起請(qǐng)求的用戶是不是Owner。
Requester 請(qǐng)求者 Requester即發(fā)起Http Request的云存儲(chǔ)使用者。
Group 被授權(quán)的組 用戶可以設(shè)置特定組內(nèi)的用戶對(duì)所屬資源的訪問權(quán)限。指定本條權(quán)限是針對(duì)哪個(gè)用戶組。
User 被授權(quán)的人 指定本條權(quán)限是針對(duì)哪個(gè)用戶。
Grantee 的授權(quán)的人或者組 Grantee可以是User,也可以是Group。
Grant 授予何種權(quán)限 例如:授權(quán)A用戶對(duì)資源只讀;授權(quán)B用戶對(duì)資源有讀寫權(quán)限;

Grantee是誰?

Grantee可以是一個(gè)云存儲(chǔ)中的注冊(cè)用戶,用UserId標(biāo)示, 例如:SINA0000001001HBK388

Grantee還可以是一個(gè)新浪云存儲(chǔ)預(yù)定義的用戶組,有如下兩種:

  • GRPS0000000CANONICAL:此組表示所有的新浪云存儲(chǔ)注冊(cè)帳戶。所有的請(qǐng)求必須簽名(認(rèn)證),如果簽名認(rèn)證通過,即可按照已設(shè)置的權(quán)限規(guī)則進(jìn)行訪問。
  • GRPS000000ANONYMOUSE:匿名用戶組,對(duì)應(yīng)的請(qǐng)求可以不帶簽名。例如:把資源/bucket_name/file.txt對(duì)GRPS000000ANONYMOUSE設(shè)置為只讀,則任何人不用簽名就可以進(jìn)行下載。
  • SINA000000000000IMGX:圖片處理服務(wù),將您的bucket的ACL設(shè)置為對(duì)SINA000000000000IMGX的讀寫權(quán)限,在您使用圖片處理服務(wù)的時(shí)候可以免簽名。

Grant包括什么?

下表列出了可以給資源(bucket或者object)授予的權(quán)限:

權(quán)限 被作用于Bucket時(shí) 被作用于Object時(shí)
READ 允許Grantee列當(dāng)前Bucket中的文件 允許Grantee下載文件、獲取文件的Metadata
WRITE 允許Grantee在當(dāng)前Bucket中創(chuàng)建、覆蓋、刪除任何Object 不適用
READ_ACP 允許Grantee讀取當(dāng)前Bucket的ACL信息 允許Grantee讀取當(dāng)前Object的ACL信息
WRITE_ACP 允許Grantee設(shè)置當(dāng)前Bucket的ACL 允許Grantee設(shè)置當(dāng)前Object的ACL
FULL_CONTROL FULL_CONTROL = READ + WRITE + READ_ACP + WRITE_ACP FULL_CONTROL = READ + WRITE + READ_ACP + WRITE_ACP

示例:

/*
  用戶SINA0000000123456789有全部權(quán)限
  匿名用戶只讀
  認(rèn)證用戶讀寫
*/
{
	'SINA0000000123456789' :  [ "read", "read_acp" , "write", "write_acp" ],
	'GRPS000000ANONYMOUSE' :  [ "read" ],
	'GRPS0000000CANONICAL' :  [ "read", "write" ]
}

快捷ACL

當(dāng)您通過HTTP請(qǐng)求創(chuàng)建資源(bucket或object)時(shí),可以設(shè)置Request Header(請(qǐng)求頭):x-amz-acl,創(chuàng)建資源的同時(shí)設(shè)置ACL。

快捷ACL 作用于 描述
private Bucket和Object Owner權(quán)限 = FULL_CONTROL,其他人沒有任何權(quán)限
public-read Bucket和Object Owner權(quán)限 = FULL_CONTROL,GRPS000000ANONYMOUSE權(quán)限 = READ
public-read-write Bucket和Object Owner權(quán)限 = FULL_CONTROLGRPS000000ANONYMOUSE權(quán)限 = READ + WRITE
authenticated-read Bucket和Object Owner權(quán)限 = FULL_CONTROL,GRPS0000000CANONICAL權(quán)限 = READ

如何設(shè)置一個(gè)ACL?

設(shè)置ACL有兩種方式:

  • 以上面示例中的JSON格式,通過調(diào)用PUT ACL接口對(duì)已有資源進(jìn)行設(shè)置;
  • 通過快捷方式,在創(chuàng)建資源(bucket或object)時(shí),可以設(shè)置Request Header(請(qǐng)求頭):x-amz-acl,創(chuàng)建資源的同時(shí)設(shè)置ACL。

相關(guān)API,請(qǐng)參照API文檔中的介紹。