赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 对象存储
  4. 操作指南
  5. 权限控制
  6. 接入点
  7. AP Policy与Bucket Policy以及RAM Policy的关系

AP Policy与Bucket Policy以及RAM Policy的关系

  • 接入点
  • 发布于 2025-04-21
  • 0 次阅读
文档编辑
文档编辑

本文介绍当您需要通过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'}}

相关文档

  • 创建接入点

  • 使用接入点

相关文章

创建接入点 2025-04-21 18:16

接入点(Access Point)用于简化大规模共享数据集的数据访问权限控制管理的场景。本文介绍如何创建接入点。 前提条件 如果希望使用网络来源为VPC的接入点,您需要提前创建VPC。具体操作,请参见创建和管理专有网络。

使用接入点 2025-04-21 18:16

创建接入点后,OSS会自动为您生成接入点别名。您可以使用接入点别名访问存储空间(Bucket)内符合权限要求的数据。 前提条件 已创建接入点。具体步骤,请参见创建接入点。 使用阿里云SDK

AP Policy与Bucket Policy以及RAM Policy的关系 2025-04-21 18:16

本文介绍当您需要通过AP(接入点)对OSS执行相关操作时,AP Policy、RAM Policy、Bucket Policy之间需要满足的条件。 权限策略之间的制约关系 从以下表格得知,只有同时满足以下两个条件,才能通过接入点对OSS执行相关操作。 RAM Polic

目录
Copyright © 2025 your company All Rights Reserved. Powered by 赛尔网络.
京ICP备14022346号-15
gongan beian 京公网安备11010802041014号