设置存储桶策略

除了桶访问权限外,桶的拥有者还可以通过桶策略,提供对桶和桶内对象的集中访问控制。您可以在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"
            ]
        }
    ]
}