授权或限制用户访问OSS的常见Bucket Policy示例

更新时间:2025-04-21 09:52:45

Bucket PolicyOSS提供的一种针对存储空间(Bucket)的授权策略,使您可以精细化地授权或限制有身份的访问者(阿里云账号、RAM用户、RAM角色)或匿名访问者对指定OSS资源的访问。例如,您可以为其他阿里云账号的RAM用户授予指定OSS资源的只读权限。

通用说明

RAM Policy不同,Bucket Policy还包含了用于指定允许或拒绝访问资源的主体元素Principal。使用Principal,您可以精细化地授权或限制不同访问者对指定OSS资源的访问。在不需要对访问者做个性化区分时,可以通过集中式管理权限,避免重复授权或限制。例如,通过在Principal输入多个RAM用户的UID匹配指定的RAM用户;或通过在Principal中输入通配符星号(*)匹配所有访问者。

注意事项

  • Bucket Policy的策略语句中,如果Principal为通配符星号(*),且包含Condition,则策略语句会对包含Bucket Owner在内的所有访问者生效。即使是默认拥有所有访问权限的Bucket Owner,如果触发拒绝策略,其访问请求也会被拒绝。

  • Bucket Policy的策略语句中,如果Principal为通配符星号(*),但不包含Condition,则策略语句只会对除Bucket Owner以外的所有访问者生效。对于默认拥有所有访问权限的Bucket Owner,不会触发拒绝策略,其访问请求不会被拒绝。

示例一:授予指定RAM用户读写权限

当您希望允许自己团队的指定成员或合作方的指定成员上传、下载、管理存储空间中的文件时,您可以通过Bucket Policy在存储空间级别直接为这些成员对应的RAM用户授予权限,而无需为每个RAM用户单独设置访问策略。以下示例用于授予指定RAM用户(UID27737962156157xxxx20214760404935xxxx)对目标存储空间(examplebucket)的读写权限。

重要

以下允许策略语句中,由于没有授予指定RAM用户列举存储空间的权限,因此指定RAM用户无法在阿里云控制台的Bucket列表页面查看所有的存储空间,找到目标的存储空间,然后点击进入。指定RAM用户可以通过添加收藏路径来访问目标存储空间,而无需拥有列举存储空间的权限。具体操作,请参见访问路径

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "oss:GetObject",
                "oss:PutObject",
                "oss:GetObjectAcl",
                "oss:PutObjectAcl",
                "oss:AbortMultipartUpload",
                "oss:ListParts",
                "oss:RestoreObject",
                "oss:GetVodPlaylist",
                "oss:PostVodPlaylist",
                "oss:PublishRtmpStream",
                "oss:ListObjectVersions",
                "oss:GetObjectVersion",
                "oss:GetObjectVersionAcl",
                "oss:RestoreObjectVersion"
            ],
            "Principal":[
                "27737962156157xxxx",
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket/*"
            ]
        },
        {
            "Effect":"Allow",
            "Action":[
                "oss:ListObjects"
            ],
            "Principal":[
                "27737962156157xxxx",
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "*"
                    ]
                }
            }
        }
    ]
}

示例二:授予指定RAM用户对指定目录的只读权限

当您需要保护存储空间中的特定项目文件不被篡改,但允许相关的项目成员读取这些文件时,您可以为对应的RAM用户授予只读权限。以下示例用于授予指定RAM用户(UID20214760404935xxxx)对目标存储空间(examplebucket)下指定目录(前缀为hangzhou/2020shanghai/2015)的只读权限。

重要

由于未授予列举存储空间的权限,因此指定RAM用户无法在控制台的Bucket列表页面查看和进入存储空间。RAM用户可以通过添加收藏路径来访问目标存储空间,而无需拥有列举存储空间的权限。具体操作,请参见访问路径

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:GetObject",
                "oss:GetObjectAcl",
                "oss:GetObjectVersion",
                "oss:GetObjectVersionAcl"
            ],
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket/hangzhou/2020/*",
                "acs:oss:*:174649585760xxxx:examplebucket/shanghai/2015/*"
            ]
        },
        {
            "Action":[
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "hangzhou/2020/*",
                        "shanghai/2015/*"
                    ]
                }
            },
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket"
            ]
        }
    ]
}

示例三:授予所有访问者列举所有文件的权限

当您的存储空间用于公共资源共享,需要让所有访问者都能查看文件名但不能访问文件的实际内容时,您可以设置Principal为通配符星号(*),并为其授予列举所有文件的权限。以下示例用于授予所有访问者列举目标存储空间(examplebucket)下所有文件的权限。

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Effect":"Allow",
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket"
            ]
        }
    ]
}

示例四:授予指定RAM用户查看存储空间并列举文件的权限

当您希望团队或合作方的指定成员查看存储空间的所有信息并列举其中的文件时,您可以通过Bucket Policy直接为这些成员对应的RAM用户授予权限,而无需单独设置访问策略。以下示例用于授予指定RAM用户查看目标存储空间(examplebucket)的所有信息并列举其中的文件的权限。

重要

以下允许策略语句中,由于没有授予指定RAM用户列举存储空间的权限,因此指定RAM用户无法在阿里云控制台的Bucket列表页面查看所有的存储空间,找到目标的存储空间,然后点击进入。指定RAM用户可以通过添加收藏路径来访问目标存储空间,而无需拥有列举存储空间的权限。具体操作,请参见访问路径

{
    "Version":"1",
    "Statement":[
        {
            "Action":[
                "oss:Get*",
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Effect":"Allow",
            "Principal":[
                "20214760404935xxxx"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket"
            ]
        }
    ]
}

示例五:授予指定RAM角色读取文件的权限

当您需要允许RAM用户或应用程序临时访问您的存储空间文件时,可以创建一个RAM角色并授予相应权限。RAM用户或应用程序通过扮演该角色,便能够获得读取您存储空间文件的临时访问凭证。以下示例用于为一个阿里云账号下的1RAM角色下的所有会话以及1RAM角色下的指定会话授予读取存储空间(examplebucket)下所有文件的权限。

重要

BucketPolicy给角色授权的时候,Principal需要遵循以下格式:arn:sts::<uid>:assumed-role/<role-name>/<session-name>。其中,<role-name>以及<session-name>的值大小写敏感。

{
    "Version": "1",
    "Statement": [
        {
            "Action": [
                "oss:GetObject"
            ],
            "Effect": "Allow",
            "Principal": [
                "arn:sts::10323xxxxx72056:assumed-role/okrole/sessiontest",
                "arn:sts::10323xxxxx72056:assumed-role/secondrole/*"
            ],
            "Resource": [
                "acs:oss:*:1032xxxxx672056:examplebucket/*"
            ]
        }
    ]
}

示例六:限制只能从指定VPC访问

若需限制存储空间只能从指定VPC访问,您可以使用acs:SourceVpc条件关键字创建拒绝策略语句并添加到Bucket Policy中,阻止其他VPC或公网的请求。其他VPC或公网的请求会因不符合指定VPC ID条件而被拒绝。以下示例拒绝除指定VPC(IDt4nlw426y44rd3iq4xxxx)外的所有访问者读取目标存储空间(examplebucket)的文件。

重要
  • 以下拒绝策略语句中,由于Principal为通配符星号(*)且包含Condition,因此该拒绝策略语句会所有访问者生效,,包括 Bucket Owner。添加以下拒绝策略语句后,若Bucket Owner不是从指定VPC访问,其访问请求也会被拒绝。

  • 以下拒绝策略语句仅用于限制访问,而不会授予任何访问权限。如果授权主体没有被授予过访问权限,您可以添加一条允许策略语句来授予其访问权限。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket/*"
            ],
            "Condition":{
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        }
    ]
}

示例七:限制只能从指定公网IP地址访问

当需要限制存储空间只能从指定公网IP地址访问时,使用acs:SourceIp条件关键字创建拒绝策略语句并添加到Bucket Policy中,阻止其他公网IP地址或VPC的请求。来自其他公网IP地址或VPC的请求会被识别为不符合指定IP条件,触发拒绝规则。以下示例拒绝除指定公网IP地址203.0.113.5外的所有访问者对examplebucket的读取操作。

重要
  • 以下拒绝策略语句中,由于Principal为通配符星号(*)且包含Condition,该拒绝策略对所有访问者(包括Bucket Owner)生效。即使是Bucket Owner,如果不是从指定公网IP地址访问,其请求也会被拒绝。

  • 以下拒绝策略语句仅用于限制访问,而不会授予任何访问权限。如果授权主体没有被授予过访问权限,您可以添加一条允许策略语句来授予其访问权限。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket/*"
            ],
            "Condition":{
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "203.0.113.5"
                    ]
                }
            }
        }
    ]
}

示例八:限制只能从指定VPC的指定IP地址网段访问

当需要限制存储空间只能从指定VPC的指定IP地址访问时,您可以创建两条拒绝策略语句:

  • 使用acs:SourceVpc条件关键字创建一条拒绝策略语句,阻止来自其他VPC或公网的请求。来自其他公网IP地址或VPC的请求会被识别为不符合指定IP条件,触发拒绝规则。

  • 使用acs:SourceIp条件关键字和acs:SourceVpc条件关键字创建一条拒绝策略语句,用于阻止指定VPC网段之外的请求。

将以上两条拒绝策略语句添加到Bucket Policy后,满足任一条件即触发拒绝。以下示例用于拒绝除指定VPC(IDt4nlw426y44rd3iq4xxxx)的指定IP地址网段(192.168.0.0/16)以外的所有访问者对目标存储空间(examplebucket)进行读取文件操作。

重要
  • 以下拒绝策略语句中,由于Principal为通配符星号(*)且包含Condition,因此会对所有访问者生效,包括Bucket Owner。如果不是从指定VPC的指定IP地址网段访问,访问请求将被拒绝。

  • 以下拒绝策略语句仅用于限制访问,而不会授予任何访问权限。如果授权主体没有被授予过访问权限,您可以添加一条允许策略语句来授予其访问权限。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket/*"
            ],
            "Condition":{
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        },
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket/*"
            ],
            "Condition":{
                "StringEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                },
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "192.168.0.0/16"
                    ]
                }
            }
        }
    ]
}

示例九:限制只能从指定公网IP地址或指定VPC访问

当需要限制存储空间只能从指定公网IP地址或指定VPC访问时,您可以创建两条拒绝策略语句:

  • 使用acs:SourceIp条件关键字创建一条拒绝策略语句,阻止来自其他公网IP地址的请求,同时使用StringNotLike条件操作和acs:SourceVpc条件关键字排除来自指定VPC的请求。

  • 使用acs:SourceVpc条件关键字创建一条拒绝策略语句,阻止来自其他VPC的请求,同时使用StringLike条件操作和acs:SourceVpc关键字排除来自指定公网IP地址的请求,以避免触发不满足指定VPC ID条件而被错误拒绝。

将以上两条拒绝策略语句添加到Bucket Policy后,满足任一条件就会触发拒绝。以下示例用于拒绝除指定公网IP地址(IP地址为203.0.113.5)或指定VPC(IDt4nlw426y44rd3iq4xxxx)以外的所有访问者执行对目标存储空间(examplebucket)进行读取文件操作。

重要
  • 以下拒绝策略语句中,由于Principal为通配符星号(*)且包含Condition,因此会对所有访问者生效,包括Bucket Owner。如果不是从指定的公网IP地址或指定VPC访问,访问请求将被拒绝。

  • 以下拒绝策略语句仅用于限制访问,而不会授予任何访问权限。如果授权主体没有被授予过访问权限,您可以添加一条允许策略语句来授予其访问权限。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket/*"
            ],
            "Condition":{
                "StringNotLike":{
                    "acs:SourceVpc":[
                        "vpc-*"
                    ]
                },
                "NotIpAddress":{
                    "acs:SourceIp":[
                        "203.0.113.5"
                    ]
                }
            }
        },
        {
            "Effect":"Deny",
            "Action":[
                "oss:GetObject"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket/*"
            ],
            "Condition":{
                "StringLike":{
                    "acs:SourceVpc":[
                        "vpc-*"
                    ]
                },
                "StringNotEquals":{
                    "acs:SourceVpc":[
                        "vpc-t4nlw426y44rd3iq4xxxx"
                    ]
                }
            }
        }
    ]
}

示例十:限制API调用方式必须为临时访问凭证

当您希望通过调用API的方式来访问存储空间的资源时,需要限制API调用方式必须是临时访问凭证,您可以使用acs:AccessId条件关键字创建一条拒绝策略语句并将其添加到Bucket Policy中,用于阻止其他非临时访问凭证(例如通过阿里云账号或者RAM用户的长期访问密钥)的访问方式。对于通过非临时访问凭证的访问方式,会触发策略中的拒绝规则。以下示例用于拒绝除临时访问凭证(以TMP.或者STS.开头的)以外的所有访问者查看目标存储空间(examplebucket)以及列举文件的操作。

{
    "Version": "1",
    "Statement": [
        {            
            "Effect": "Deny",
            "Action":[
                "oss:Get*",
                "oss:ListObjects",
                "oss:ListObjectVersions"
            ],
            "Principal":[
                "*"
            ],
            "Resource":[
                "acs:oss:*:174649585760xxxx:examplebucket/*"
            ],
            "Condition": {
                "StringNotLike": {
                    "acs:AccessId": [
                        "TMP.*",
                        "STS.*"
                 ]
                }
            }
        }
    ]
}

相关文档

  • 本页导读 (1)
  • 通用说明
  • 注意事项
  • 示例一:授予指定RAM用户读写权限
  • 示例二:授予指定RAM用户对指定目录的只读权限
  • 示例三:授予所有访问者列举所有文件的权限
  • 示例四:授予指定RAM用户查看存储空间并列举文件的权限
  • 示例五:授予指定RAM角色读取文件的权限
  • 示例六:限制只能从指定VPC访问
  • 示例七:限制只能从指定公网IP地址访问
  • 示例八:限制只能从指定VPC的指定IP地址网段访问
  • 示例九:限制只能从指定公网IP地址或指定VPC访问
  • 示例十:限制API调用方式必须为临时访问凭证
  • 相关文档