设置存储桶策略
除了桶访问权限外,桶的拥有者还可以通过桶策略,提供对桶和桶内对象的集中访问控制。您可以在putBucketPolicy
接口中使用 JSON格式的文本字符串直接指定策略,您可以执行以下操作,该模块将获取单个命令行参数,指定需要应用其策略的存储桶 :
var readOnlyAnonUserPolicy = {
Version: "2012-10-17",
Statement: [
{
Sid: "AddPerm",
Effect: "Allow",
Principal: "*",
Action: [
"s3Client:GetObject"
],
Resource: [
""
]
}
]
};
// create selected bucket resource string for bucket policy
var bucketResource = "arn:aws:s3Client:::" + process.argv[2] + "/*";
readOnlyAnonUserPolicy.Statement[0].Resource[0] = bucketResource;
// convert policy JSON into string and assign into params
var bucketPolicyParams = {
Bucket: process.argv[2],
Policy: JSON.stringify(readOnlyAnonUserPolicy)
};
// set the new policy on the selected bucket
s3Client.putBucketPolicy(bucketPolicyParams, function(err, data) {
if (err) {
// display error message
console.log("Error", err);
} else {
console.log("Success", data);
}
});
存储桶的策略主要包含以下元素:
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/USERID或者arn:aws:iam:::USER/USERNAME。
// 以下示例策略允许用户Test在资源examplebucket1上的GetObject、GetBucketLocation、ListBucket操作。
{
"Version": "2012-10-17",
"Id": "ExamplePolicyId",
"Statement": [
{
"Sid": "ExampleStatement01",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::123456789012:user/Test"
},
"Action": [
"s3Client:GetObject",
"s3Client:GetBucketLocation",
"s3Client:ListBucket"
],
"Resource": [
"arn:aws:s3Client:::examplebucket1/*",
"arn:aws:s3Client:::examplebucket1"
]
}
]
}