全部產品
Search
文件中心

Object Storage Service:bucket-policy(授權策略)

更新時間:Jul 31, 2024

Bucket Policy是基於資源的授權策略,Bucket擁有者可以通過Bucket Policy授權其他使用者訪問OSS指定資源。bucket-policy命令用於添加、修改、查詢、刪除Bucket授權策略(Bucket Policy)。

注意事項

  • 要添加或修改Bucket Policy,您必須具有oss:PutBucketPolicy許可權;要擷取Bucket Policy配置,您必須具有oss:GetBucketPolicy許可權;要刪除Bucket Policy配置,您必須具有oss:DeleteBucketPolicy許可權。具體操作,請參見為RAM使用者授權自訂的權限原則

  • 從ossutil 1.6.16版本開始,命令列中Binary名稱支援直接使用ossutil,您無需根據系統重新整理Binary名稱。如果您的ossutil版本低於1.6.16,則需要根據系統重新整理Binary名稱。更多資訊,請參見命令列工具ossutil命令參考

添加或修改Bucket Policy

添加或修改Bucket Policy前,需要在本地建立JSON格式的檔案,並在JSON檔案中配置Bucket Policy。單個JSON檔案可以配置多條Bucket Policy,但所有Bucket Policy的總大小不能超過16 KB。

添加或修改Bucket Policy時,ossutil先從JSON格式的檔案中讀取Bucket Policy配置,然後將讀取到Bucket Policy添加到指定的Bucket。添加Bucket Policy為覆蓋語義,即新添加的Bucket Policy會覆寫已有的Bucket Policy配置。

  • 命令格式

    ossutil bucket-policy --method put oss://bucketname local_json_file

    參數說明如下:

    參數

    說明

    bucketname

    添加或修改Bucket Policy的目標儲存空間名稱。

    local_json_file

    配置Bucket Policy的本地JSON檔案名稱。

  • 使用樣本

    1. 在本地建立名為local_json_file檔案,並根據使用情境寫入不同的Bucket Policy。

      Bucket Policy的常見配置樣本如下:

      說明

      以下為資源擁有者(即Resource中UID為174649585760xxxx的Bucket Owner)通過Bucket Policy授權指定使用者(例如Principal中UID為20214760404935xxxx的RAM使用者,匿名使用者為*)不同許可權的樣本。

      • 僅允許指定IP的匿名使用者存取目標儲存空間examplebucket內的所有資源。

        {
            "Statement": [
                {
                    "Action": [
                        "oss:GetObject",
                        "oss:GetObjectAcl",
                        "oss:ListObjects",
                        "oss:RestoreObject",
                        "oss:GetVodPlaylist",
                        "oss:ListObjectVersions",
                        "oss:GetObjectVersion",
                        "oss:GetObjectVersionAcl",
                        "oss:RestoreObjectVersion"
                    ],
                    "Condition": {
                        "IpAddress": {
                            "acs:SourceIp": [
                                "10.10.10.10"
                            ]
                        }
                    },
                    "Effect": "Allow",
                    "Principal": [
                        "*"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket/*"
                    ]
                },
                {
                    "Action": [
                        "oss:ListObjects",
                        "oss:GetObject"
                    ],
                    "Condition": {
                        "StringLike": {
                            "oss:Prefix": [
                                "*"
                            ]
                        },
                        "IpAddress": {
                            "acs:SourceIp": [
                                "10.10.10.10"
                            ]
                        }
                    },
                    "Effect": "Allow",
                    "Principal": [
                        "*"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket"
                    ]
                }
            ],
            "Version": "1"
        }
      • 授權指定的RAM使用者擁有讀取examplebucket中hangzhou/2020hangzhou/2015目錄的唯讀許可權。

        {
            "Statement": [
                {
                    "Action": [
                        "oss:GetObject",
                        "oss:GetObjectAcl",
                        "oss:ListObjects",
                        "oss:RestoreObject",
                        "oss:GetVodPlaylist",
                        "oss:ListObjectVersions",
                        "oss:GetObjectVersion",
                        "oss:GetObjectVersionAcl",
                        "oss:RestoreObjectVersion"
                    ],
                    "Effect": "Allow",
                    "Principal": [
                        "20214760404935xxxx"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*",
                        "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2015/*"
                    ]
                },
                {
                    "Action": [
                        "oss:ListObjects",
                        "oss:GetObject"
                    ],
                    "Condition": {
                        "StringLike": {
                            "oss:Prefix": [
                                "hangzhou/2020/*",
                                "hangzhou/2015/*"
                            ]
                        }
                    },
                    "Effect": "Allow",
                    "Principal": [
                        "20214760404935xxxx"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket"
                    ]
                }
            ],
            "Version": "1"
        }
      • 拒絕匿名使用者存取examplebucket中hangzhou/2021/目錄下的所有檔案。

        {
            "Statement": [
                {
                    "Action": [
                        "oss:RestoreObject",
                        "oss:ListObjects",
                        "oss:AbortMultipartUpload",
                        "oss:PutObjectAcl",
                        "oss:GetObjectAcl",
                        "oss:ListParts",
                        "oss:DeleteObject",
                        "oss:PutObject",
                        "oss:GetObject",
                        "oss:GetVodPlaylist",
                        "oss:PostVodPlaylist",
                        "oss:PublishRtmpStream",
                        "oss:ListObjectVersions",
                        "oss:GetObjectVersion",
                        "oss:GetObjectVersionAcl",
                        "oss:RestoreObjectVersion"
                    ],
                    "Effect": "Deny",
                    "Principal": [
                        "*"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2021/*"
                    ]
                },
                {
                    "Action": [
                        "oss:ListObjects",
                        "oss:GetObject"
                    ],
                    "Condition": {
                        "StringLike": {
                            "oss:Prefix": [
                                "hangzhou/2021/*"
                            ]
                        }
                    },
                    "Effect": "Deny",
                    "Principal": [
                        "*"
                    ],
                    "Resource": [
                        "acs:oss:*:174649585760xxxx:examplebucket"
                    ]
                }
            ],
            "Version": "1"
        }
    2. 為examplebucket添加Bucket Policy。

      ossutil bucket-policy --method put oss://examplebucket local_json_file

      以下輸出結果表明已成功添加Bucket Policy。

      1.125101(s) elapsed

擷取Bucket Policy配置

  • 命令格式

    ossutil bucket-policy --method get oss://bucketname local_json_file

    參數

    說明

    bucketname

    擷取Policy配置的目標Bucket名稱。

    local_json_file

    用於存放Policy配置的本地JSON檔案名稱。如果未指定此參數,則Policy配置將直接輸出到螢幕。

  • 使用樣本

    擷取examplebucket配置的Bucket Policy。

    ossutil bucket-policy --method get oss://examplebucket local_json_file

    以下輸出結果表明已成功擷取Bucket Policy配置,並將其寫入了本地JSON檔案。

    0.212407(s) elapsed

刪除Bucket Policy配置

當您不再需要通過Bucket Policy授權其他使用者訪問您的OSS資源時,請刪除已配置的Bucket Policy。

  • 命令格式

    ossutil bucket-policy --method delete oss://bucketname
  • 使用樣本

    刪除examplebucket中所有已配置的Bucket Policy。

    ossutil bucket-policy --method delete oss://examplebucket

    以下輸出結果表明examplebucket中已配置的所有Bucket Policy均已刪除。

    0.530750(s) elapsed

通用選項

當您需要通過命令列工具ossutil切換至另一個地區的Bucket時,可以通過-e選項指定該Bucket所屬的Endpoint。當您需要通過命令列工具ossutil切換至另一個阿里雲帳號下的Bucket時,可以通過-i選項指定該帳號的AccessKey ID,並通過-k選項指定該帳號的AccessKey Secret。

例如您需要為另一個阿里雲帳號下,華東1(杭州)名為examplebucket的儲存空間配置Bucket Policy,命令如下:

ossutil bucket-policy --method put oss://examplebucket local_json_file -e oss-cn-hangzhou.aliyuncs.com -i LTAI4Fw2NbDUCV8zYUzAxxxx  -k 67DLVBkH7EamOjy2W5RVAHUY9Hxxxx

關於此命令的其他通用選項的更多資訊,請參見通用選項