設置桶訪問權限
功能說明
您可以使用setBucketAcl接口設置桶的訪問權限(ACL) ,以下代碼展示如何設置桶的訪問權限。
使用訪問控制列表(ACL)在存儲桶上設置桶訪問權限。要設置存儲桶的ACL,您必須具有WRITE_ACP權限。您可以使用以下兩種方式之一來設置存儲桶的權限:在請求正文中指定ACL、使用請求標頭指定權限。注意:您不能同時使用正文和請求標頭指定訪問權限。
媒體存儲支持一組預定義的ACL,稱為canned ACL。每個canned ACL都有一組預定義的被許可人和權限,預定義的訪問策略使用請求標頭指定權限,見下表:
| 權限 | 描述 | SDK對應值 |
|---|---|---|
| 私有讀寫 | 所有者獲得FULL_CONTROL。 其他人沒有訪問權限(默認) | private |
| 公共讀私有寫 | 所有者獲得FULL_CONTROL。 AllUsers組獲得READ訪問權限 | public-read |
| 公共讀寫 | 所有者獲得FULL_CONTROL。 AllUsers組具有“讀取”和“寫入”訪問權限。 通常不建議在存儲桶上授予此權限 | public-read-write |
指定顯式訪問權限和被授權用戶。這些參數映射到s3Client在ACL中支持的權限集。使用 AccessControlList 設置桶訪問權限時,可以設置特定用戶對桶的訪問權限。桶的 AccessControlList 權限如下表:
| 權限 | SDK對應值 |
|---|---|
| 可讀,可列出桶下的對象。 | READ |
| 可寫,可創建/刪除/覆蓋寫該桶下的對象。 | WRITE |
| 可讀取桶的acl規則。 | READ_ACP |
| 可修改桶的acl規則。 | WRITE_ACP |
| 完全權限。擁有以上所有權限。 | FULL_CONTROL |
代碼示例
使用canned ACL設置桶的訪問權限示例代碼如下:用預定義訪問策略設置桶權限。
s3Client.putBucketAcl({
Bucket: "<your-bucket-name>",
// 設置桶訪問權限
ACL: private | public-read | public-read-write,
}, (err, data) => {
if (err) {
console.error(err);
} else {
console.log(data);
}
});使用AccesssControlList設置桶的訪問權限示例代碼如下:以下示例替換了存儲桶上的現有ACL。授予存儲桶所有者(使用所有者ID指定)FullControl權限,并向用戶組授予寫入權限。
var params = {
Bucket: "<your-bucket-name>",
AccessControlPolicy: {
Grants: [
{
Grantee: {
// The canonical ID of the user. This ID is an obfuscated form of your XOS account number.
ID: "<grantee-canonical-id>",
Type: "CanonicalUser",
},
Permission: "FULL_CONTROL",
},
],
Owner: {
ID: "<owner-canonical-id>",
},
}};
s3Client.putBucketAcl(params, function (err, data) {
if (err) {
console.error(err);
} else {
console.log(data);
}
});請求參數
預定義的ACL
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
| ACL | String | 桶訪問權限,參考上面的canned ACL | 是 |
指定顯式訪問權限和被授權用戶AccessControlList
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
| AccessControlPolicy | Object | 訪問權限和被授權用戶對象 | 是 |
關于AccessControlPolicy的說明:
Owner參數用來指定桶的所有者信息,Grants參數用來指定被授權的用戶信息。其中和權限有關的參數是Permission,您可以選擇 FULL_CONTROL | READ | WRITE | READ_ACP | WRITE_ACP 來設定相應的權限。
返回結果
根據返回碼判斷是否操作成功。
獲取桶訪問權限
功能說明
您可以使用getBucketAcl接口獲取桶的訪問權限(ACL) ,以下代碼展示如何獲取桶的訪問權限。
在調用 getBucketAcl 方法時,您需要傳遞的唯一參數是所選存儲桶的名稱。當前訪問控制列表配置由在傳遞到回調函數的 data 參數中返回。
代碼示例
var bucketParams = {
// 您需要傳遞的唯一參數是所選存儲桶的名稱
Bucket: "<your-bucket-name>",
};
// call s3Client to retrieve policy for selected bucket
s3Client.getBucketAcl(bucketParams, function (err, data) {
if (err) {
console.log("Error", err);
} else if (data) {
console.log("Success", data.Grants);
}
});請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| Grantee | Object | 桶訪問權限配置 |
| Permission | String | 桶訪問權限 |
獲取桶策略
功能說明
在調用 getBucketPolicy 方法時,您需要傳遞的唯一參數是所選存儲桶的名稱。如果存儲桶當前具有策略,該策略在由傳遞到回調函數的data參數中返回,如果所選存儲桶沒有策略,該信息將在error參數中返回給回調函數。
代碼示例
var bucketParams = {
Bucket: "<your-bucket-name>",
};
// call s3Client to retrieve policy for selected bucket
s3Client.getBucketPolicy(bucketParams, function(err, data) {
if (err) {
console.log("Error", err);
} else if (data) {
console.log("Success", data.Policy);
}
});請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| Policy | Object | 桶策略對象 |
關于Policy一些說明
| 參數 | 說明 |
|---|---|
| Resource | 指定statement起作用的一組資源,支持通配符“*”,表示所有資源 |
| Action | 指定本條statement作用的操作,Action字段為媒體存儲支持的所有操作集合,以字符串形式表示,不區分大小寫。支持通配符“*”,表示該資源能進行的所有操作 |
| Effect | 指定本條statement的權限是允許還是拒絕,Effect的值必須為Allow或者Deny |
| Principal | 被授權人,指定本條statement權限針對的Domain以及User,支持通配符“*”,表示所有用戶(匿名用戶)。當對Domain下所有用戶授權時,Principal格式為arn:aws:iam:::user/*。當對某個User進行授權時,Principal格式為arn:aws:iam:::user/<your-user-name> |
設置桶生命周期配置
功能說明
生命周期管理可以通過設置規則實現自動清理過期的對象,優化存儲空間。本文介紹如何設置桶(Bucket)生命周期配置。 您可以使用putBucketLifecycleConfiguration接口設置桶的生命周期配置,配置規則可以通過匹配對象key前綴、標簽的方法設置當前版本或者歷史版本對象的過期時間,對象過期后會被自動刪除。
代碼示例
var params = {
Bucket: "<your-bucket-name>",
LifecycleConfiguration: {
Rules: [
{
Expiration: {
Days: 3650,
},
Filter: { //required
Prefix: '',
},
ID: 'TestOnly',
Status: 'Enabled', //required
Transitions: [
{
Days: 365,
StorageClass: 'GLACIER',
},
],
NoncurrentVersionExpiration: {
NoncurrentDays: 123,
},
AbortIncompleteMultipartUpload: {
DaysAfterInitiation: 123
}
},
],
}
};
?
s3Client.putBucketLifecycleConfiguration(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
| LifecycleConfiguration | LifecycleConfiguration | 封裝了生命周期規則的數組,最多包含1000條規則 | 是 |
關于LifecycleConfiguration一些說明
| 參數 | 說明 |
|---|---|
| Prefix | 需要過濾的前綴 |
| Tag | 需要過濾的Tag組包含key和value |
| Transitions | 存儲類型自動轉換規則 |
| NoncurrentVersionExpiration | 針對歷史版本過期 |
| AbortIncompleteMultipartUpload | 清理過期未完成分片 |
返回結果
根據返回碼判斷是否操作成功。
獲取桶生命周期配置
功能說明
您可以使用getBucketLifecycleConfiguration接口獲取桶的生命周期配置。
代碼示例
var params = {
Bucket: "<your-bucket-name>",
};
?
s3Client.getBucketLifecycleConfiguration(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| LifecycleConfiguration | LifecycleConfiguration | 一個描述生命周期管理的規則數組,一條規則包含了規則ID、匹配的對象key前綴、匹配的對象標簽信息、當前版本對象過期時間、歷史版本對象過期時間和是否生效標識等信息 |
關于LifecycleConfiguration一些說明
| 參數 | 說明 |
|---|---|
| Prefix | 需要過濾的前綴 |
| Tag | 需要過濾的Tag組包含key和value |
| Transitions | 存儲類型自動轉換規則 |
| NoncurrentVersionExpiration | 針對歷史版本過期 |
| AbortIncompleteMultipartUpload | 清理過期未完成分片 |
刪除桶生命周期配置
功能說明
您可以使用deleteBucketLifecycle接口刪除桶的生命周期配置。
代碼示例
// Set the parameters for s3Client.deleteBucketLifecycle
var bucketParams = {
Bucket: "<your-bucket-name>",
};
?
s3Client.deleteBucketLifecycle(bucketParams, function (err, data) {
if (err) {
console.log("Error", err);
} else if (data) {
console.log("Success", JSON.stringify(data.CORSRules));
}
});請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
返回結果
根據返回碼判斷是否操作成功。
設置桶版本控制狀態
功能說明
通過媒體存儲提供的版本控制,您可以在一個桶中保留多個對象版本。例如,image.jpg(版本1)和image.jpg(版本2) 。如果您希望防止自己意外覆蓋和刪除版本,或存檔對象,以便您可以檢索早期版本的對象,您可以開啟版本控制功能。您必須在您的存儲桶上顯式啟用版本控制。默認情況下,版本控制處于禁用狀態。無論您是否已啟用版本控制,您的存儲桶中的每個對象都具有版本 ID。如果未啟用版本控制,則版本 ID 值被設置為空。如果已啟用版本控制,則對象會被指定唯一版本 ID 值。在存儲桶上啟用版本控制時,該存儲桶中的現有對象(如果有)不會發生更改:版本ID(空)、內容和權限保持為相同。
在開啟版本控制功能后,上傳同名對象將不再刪除舊對象,而是添加一個新的對象。普通的刪除操作也不會將對象徹底刪除,而是添加一個 Delete Marker 作為標識。容器開啟版本控制功能之后,無法再關閉該功能,只能暫停。
代碼示例
//開啟版本控制
var params = {
Bucket: "<your-bucket-name>",
VersioningConfiguration: {
Status: 'Enabled'
},
};
s3Client.putBucketVersioning(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});
?
//暫停版本控制
var params = {
Bucket: "<your-bucket-name>",
VersioningConfiguration: {
Status: 'Suspended'
},
};
s3Client.putBucketVersioning(params, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
| VersioningConfiguration | Object | 桶版本控制配置對象 | 是 |
| Status | String | 桶版本 |
返回結果
根據返回碼判斷是否操作成功。
獲取桶版本控制狀態
功能說明
媒體存儲支持設置和存儲一個對象的多個版本,使您更方便地檢索和還原各個版本,以便可以快速恢復數據。 您可以使用 getBucketVersioning接口獲取版本控制狀態,代碼示例:
代碼示例
// Create the parameters for calling getBucketVersioning
var bucketParams = {
Bucket: "<your-bucket-name>",
};
?
// call S3 to getBucketVersioning
s3Client.getBucketVersioning(bucketParams, function (err, data) {
if (err) {
console.log("Error", err);
} else {
console.log("Success", data);
}
});請求參數
| 參數 | 類型 | 說明 | 是否必要 |
|---|---|---|---|
| Bucket | String | 桶名稱 | 是 |
返回結果
| 參數 | 類型 | 說明 |
|---|---|---|
| Status | String | 桶版本控制狀態 |