全部产品
Search
文档中心

对象存储 OSS:AP Policy与Bucket Policy以及RAM Policy的制约关系

更新时间:Nov 25, 2024

本文介绍当您需要通过AP(接入点)对OSS执行相关操作时,AP Policy、RAM Policy、Bucket Policy之间需要满足的条件。

权限策略之间的制约关系

从以下表格得知,只有同时满足以下两个条件,才能通过接入点对OSS执行相关操作。

  • RAM Policy和Bucket Policy的合并结果判定为Allow

  • AP Policy判定结果为Allow

Input Result

(RAM Policy和Bucket Policy的合并结果)

Ap Policy Result

Output Result

Allow

Allow

Allow

Allow

Deny

Deny

Allow

Ignore

Ignore

Deny

Allow

Deny

Deny

Deny

Deny

Deny

Ignore

Deny

Ignore

Allow

Ignore

Ignore

Deny

Deny

Ignore

Ignore

Ignore

判定结果说明如下表所示。

判定结果

说明

Allow(允许)

如果访问请求命中了权限策略中的Allow语句,且没有命中Deny语句,那么本次判定结果是Allow(允许)。

Deny(显式拒绝)

一旦访问请求命中了权限策略中的Deny语句,那么本次判定结果是Deny。即使访问请求同时命中了Allow语句,但遵循Deny优先原则,Deny语句优先级高于Allow语句,判定结果仍为显式拒绝。

Ignore(隐式拒绝)

如果访问请求既没有命中权限策略中的Allow语句,也没有命中Deny语句,那么本次判定结果是Ignore(隐式拒绝)。RAM身份默认没有执行任何操作的权限,没有被显式允许执行的操作都会被隐式拒绝。

验证示例

示例一

Input Result

(RAM Policy和Bucket Policy的合并结果)

Ap Policy Result

Output Result

Allow

Allow

Allow

RAM Policy和Bucket Policy

权限策略

示例

Input Result

RAM Policy

置空

Allow

阿里云账号(UID为137xxxx)下的RAM用户(UID为205xxxx)拥有对Bucket(example-ap-bucket-001)指定路径finance/下的资源执行任意操作的权限

Bucket Policy

通过Bucket Policy允许阿里云账号(UID为137xxxx)下的RAM用户(UID为205xxxx)对Bucket(example-ap-bucket-001)指定路径finance/下的资源执行任意操作的权限。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "oss:*"
            ],
            "Principal": [
                "205xxxx"
            ],
            "Resource": [
                "acs:oss:*:137xxxx:example-ap-bucket-001/finance/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "oss:ListObjects",
                "oss:GetObject"
            ],
            "Principal": [
                "205xxxx"
            ],
            "Resource": [
                "acs:oss:*:137xxxx:example-ap-bucket-001"
            ],
            "Condition": {
                "StringLike": {
                    "oss:Prefix": [
                        "finance/*"
                    ]
                }
            }
        }
    ]
}

AP Policy

通过以下AP Policy允许RAM用户(UID为205xxxx)对AP关联Bucket指定路径finance/下的资源执行任意操作。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "oss:*"
            ],
            "Principal":[
                "205xxxx"
            ],
            "Resource":[
                "acs:oss:cn-hangzhou:137xxxx:accesspoint/example-ap-001/object/finance/*"
            ]
        },
        {
            "Effect":"Allow",
            "Action":[
                "oss:ListObjects",
                "oss:GetObject"
            ],
            "Principal":[
                "205xxxx"
            ],
            "Resource":[
                "acs:oss:cn-hangzhou:137xxxx:accesspoint/example-ap-001"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "finance/*"
                    ]
                }
            }
        }
    ]
}

AP Policy授权的RAM用户通过接入点上传文件

AP Policy授权的RAM用户(UID为205xxxx)通过接入点上传文件至AP Policy指定路径finance/

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请通过环境变量配置RAM用户的AccessKey。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写接入点别名。
bucket_name = "example-ap-001-14****-ossalias"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。
region = "cn-hangzhou"
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
# 上传文件到AP Policy指定路径下。
result = bucket.put_object('finance/exampleobject.txt', 'Hello OSS')

# HTTP返回码。
print('http status: {0}'.format(result.status))
# 请求ID。请求ID是本次请求的唯一标识,强烈建议在程序日志中添加此参数。
print('request_id: {0}'.format(result.request_id))
# ETag是put_object方法返回值特有的属性,用于标识一个Object的内容。
print('ETag: {0}'.format(result.etag))
# HTTP响应头部。
print('date: {0}'.format(result.headers['date']))

返回结果表明AP Policy授权的用户可以通过接入点上传文件到AP Policy指定路径。

http status: 200
request_id: 673AACB3478AB335343C****
ETag: F0F18C2C66AE1DD512BDCD4366F7****
date: Mon, 18 Nov 2024 02:55:47 GMT

示例二

Input Result

(RAM Policy和Bucket Policy的合并结果)

Ap Policy Result

Output Result

Allow

Ignore

Ignore

RAM Policy和Bucket Policy

权限策略

示例

Input Result

RAM Policy

为阿里云账号(UID为137xxxx)下的某个RAM用户(UID为266xxxx)授予AdministratorAccess权限。

{
    "Statement": [
        {
            "Action": "*",
            "Effect": "Allow",
            "Resource": "*"
        }
    ],
    "Version": "1"
}

Allow

阿里云账号(UID为137xxxx)下的RAM用户(UID为266xxxx)拥有对Bucket(example-ap-bucket-001)指定路径finance/下的资源执行任意操作的权限

Bucket Policy

通过Bucket Policy允许当前阿里云账号(UID为137xxxx)所有RAM用户对Bucket(example-ap-bucket-001)指定路径finance/下的资源执行任意操作。

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "oss:*"
            ],
            "Principal": [
                "*"
            ],
            "Resource": [
                "acs:oss:*:137xxxx:example-ap-bucket-001/finance/*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "oss:ListObjects",
                "oss:GetObject"
            ],
            "Principal": [
                "*"
            ],
            "Resource": [
                "acs:oss:*:137xxxx:example-ap-bucket-001"
            ],
            "Condition": {
                "StringLike": {
                    "oss:Prefix": [
                        "finance/*"
                    ]
                }
            }
        }
    ]
}

AP Policy

通过以下AP Policy允许RAM用户(UID为205xxxx)对AP关联Bucket指定路径finance/下的资源执行任意操作。

{
    "Version":"1",
    "Statement":[
        {
            "Effect":"Allow",
            "Action":[
                "oss:*"
            ],
            "Principal":[
                "205xxxx"
            ],
            "Resource":[
                "acs:oss:cn-hangzhou:137xxxx:accesspoint/example-ap-001/object/finance/*"
            ]
        },
        {
            "Effect":"Allow",
            "Action":[
                "oss:ListObjects",
                "oss:GetObject"
            ],
            "Principal":[
                "205xxxx"
            ],
            "Resource":[
                "acs:oss:cn-hangzhou:137xxxx:accesspoint/example-ap-001"
            ],
            "Condition":{
                "StringLike":{
                    "oss:Prefix":[
                        "finance/*"
                    ]
                }
            }
        }
    ]
}

非AP Policy授权的RAM用户通过接入点上传文件

非AP Policy授权的RAM用户(UID为266xxxx)通过接入点上传文件至AP Policy指定路径finance/

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# 从环境变量中获取访问凭证。运行本代码示例之前,请通过环境变量配置RAM用户的AccessKey。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填写Bucket所在地域对应的Endpoint。以华东1(杭州)为例,Endpoint填写为https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填写接入点别名。
bucket_name = "example-ap-001-14****-ossalias"
# 填写Endpoint对应的Region信息,例如cn-hangzhou。
region = "cn-hangzhou"
bucket = oss2.Bucket(auth, endpoint, bucket_name, region=region)
# 上传文件到AP Policy指定路径。
result = bucket.put_object('finance/exampleobject.txt', 'Hello OSS')

# HTTP返回码。
print('http status: {0}'.format(result.status))
# 请求ID。请求ID是本次请求的唯一标识,强烈建议在程序日志中添加此参数。
print('request_id: {0}'.format(result.request_id))
# ETag是put_object方法返回值特有的属性,用于标识一个Object的内容。
print('ETag: {0}'.format(result.etag))
# HTTP响应头部。
print('date: {0}'.format(result.headers['date']))

返回结果表明非AP Policy授权的RAM用户无法通过AP接入点上传文件到AP Policy指定路径。

oss2.exceptions.AccessDenied: {'status': 403, 'x-oss-request-id': '673C375AECB4DB373307****', 
'details': {'Code': 'AccessDenied', 
'Message': 'You have no right to access this object because of bucket acl.', 
'RequestId': '673C375AECB4DB373307****', 
'HostId': 'example-ap-001-14****-ossalias.oss-cn-hangzhou.aliyuncs.com', 
'EC': '0003-00000001', 'RecommendDoc': 'https://api.aliyun.com/troubleshoot?q=0003-00000001'}}

相关文档