Python配置Bucket Policy

更新时间:2025-03-07 06:18:53

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

注意事项

  • 在配置Bucket Policy之前,请确保您已了解该功能。详情请参见Bucket Policy

  • 本文示例代码以华东1(杭州)的地域IDcn-hangzhou为例,默认使用外网Endpoint,如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的RegionEndpoint的对应关系,请参见OSS地域和访问域名

  • 要设置Bucket Policy,您必须有oss:PutBucketPolicy权限;要获取Bucket Policy,您必须有oss:GetBucketPolicy权限;要删除Bucket Policy,您必须有oss:DeleteBucketPolicy权限。具体操作,请参见RAM用户授权自定义的权限策略

方法定义

设置Bucket Policy

put_bucket_policy(request: PutBucketPolicyRequest, **kwargs) → PutBucketPolicyResult

获取Bucket Policy

get_bucket_policy(request: GetBucketPolicyRequest, **kwargs) → GetBucketPolicyResult

删除Bucket Policy

delete_bucket_policy(request: DeleteBucketPolicyRequest, **kwargs) → DeleteBucketPolicyResult

参数名

类型

说明

参数名

类型

说明

request

PutBucketPolicyRequest

设置请求参数,具体请参见PutBucketPolicyRequest

GetBucketPolicyRequest

设置请求参数,具体请参见GetBucketPolicyRequest

DeleteBucketPolicyRequest

设置请求参数,具体请参见DeleteBucketPolicyRequest

返回值列表

类型

说明

类型

说明

PutBucketPolicyResult

返回值,具体请参见PutBucketPolicyResult

GetBucketPolicyResult

返回值,具体请参见GetBucketPolicyResult

DeleteBucketPolicyResult

返回值,具体请参见DeleteBucketPolicyResult

关于设置Bucket Policy方法的完整定义,请参见put_bucket_policy

关于获取Bucket Policy方法的完整定义,请参见get_bucket_policy

关于删除Bucket Policy方法的完整定义,请参见delete_bucket_policy

示例代码

设置Bucket Policy

您可以使用以下代码设置Bucket Policy。

import argparse
import alibabacloud_oss_v2 as oss

# 创建一个命令行参数解析器用于获取命令行参数
parser = argparse.ArgumentParser(description="put bucket policy sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令行参数
    args = parser.parse_args()

    # 从环境变量中加载访问凭证
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的默认配置
    cfg = oss.config.load_default()
    # 设置凭据提供者
    cfg.credentials_provider = credentials_provider
    # 设置区域
    cfg.region = args.region
    # 如果提供了endpoint,则设置endpoint到配置中
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 创建OSS客户端
    client = oss.Client(cfg)

    # 以下示例用于资源拥有者(即UID为174649585760xxxx的Bucket Owner)通过Bucket Policy授权指定用户(UID为20214760404935xxxx的RAM用户)拥有列举examplebucket下所有文件的权限。
    policy_text = "{\"Statement\": [{\"Effect\": \"Allow\", \"Action\": [\"oss:GetObject\", \"oss:ListObjects\"], \"Principal\": [\"20214760404935xxxx\"], \"Resource\": [\"acs:oss:*:174649585760xxxx:examplebucket/*\"]}], \"Version\": \"1\"}"

    # 将policy应用到指定的存储空间
    result = client.put_bucket_policy(oss.PutBucketPolicyRequest(
            bucket=args.bucket,
            body=policy_text,
    ))

    # 打印结果的状态码和请求ID
    print(f'status code: {result.status_code}, request id: {result.request_id}')

if __name__ == "__main__":
    main()

获取Bucket Policy

您可以使用以下代码获取Bucket Policy。

import argparse
import alibabacloud_oss_v2 as oss

# 创建一个命令行参数解析器
parser = argparse.ArgumentParser(description="get bucket policy sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令行参数
    args = parser.parse_args()

    # 从环境变量中加载访问凭证
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK的默认配置
    cfg = oss.config.load_default()
    # 设置凭证提供者为从环境变量获取的凭证
    cfg.credentials_provider = credentials_provider
    # 设置区域
    cfg.region = args.region
    # 如果提供了endpoint,则设置endpoint到配置中
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 创建OSS客户端
    client = oss.Client(cfg)

    # 调用get_bucket_policy方法获取指定存储空间的策略
    result = client.get_bucket_policy(oss.GetBucketPolicyRequest(
            bucket=args.bucket,
    ))

    # 打印返回的状态码、请求ID和响应体
    print(f'status code: {result.status_code},'
            f' request id: {result.request_id},'
            f' body: {result.body},'
    )

# 当脚本作为主程序运行时,调用main函数
if __name__ == "__main__":
    main()

删除Bucket Policy

您可以使用以下代码删除Bucket Policy。

import argparse
import alibabacloud_oss_v2 as oss

# 创建一个命令行参数解析器
parser = argparse.ArgumentParser(description="delete bucket policy sample")
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)
parser.add_argument('--bucket', help='The name of the bucket.', required=True)
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

def main():
    # 解析命令行参数
    args = parser.parse_args()

    # 从环境变量中加载访问凭证
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 使用SDK默认配置
    cfg = oss.config.load_default()
    # 设置凭证提供者为从环境变量获取的凭证
    cfg.credentials_provider = credentials_provider
    # 设置区域
    cfg.region = args.region
    # 如果指定了endpoint,则设置endpoint到配置中
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 创建OSS客户端
    client = oss.Client(cfg)

    # 调用删除存储空间policy的方法
    result = client.delete_bucket_policy(oss.DeleteBucketPolicyRequest(
            bucket=args.bucket,  # 指定要操作的存储空间名
    ))

    # 打印请求的结果状态码和请求ID
    print(f'status code: {result.status_code}, request id: {result.request_id}')

# 当脚本作为主程序运行时执行main函数
if __name__ == "__main__":
    main()

相关文档

  • 本页导读 (1)
  • 注意事项
  • 方法定义
  • 示例代码
  • 相关文档
AI助理

点击开启售前

在线咨询服务

你好,我是AI助理

可以解答问题、推荐解决方案等