设置桶访问权限
功能说明
您可以使用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 | 桶版本控制状态 |