赛尔校园公共服务平台 Logo
平台使用
阿里云
百度云
移动云
智算服务
教育生态
登录 →
赛尔校园公共服务平台 Logo
平台使用 阿里云 百度云 移动云 智算服务 教育生态
登录
  1. 首页
  2. 阿里云
  3. 对象存储
  4. 开发参考
  5. SDK参考
  6. Python
  7. 2.0手册(预览版本)
  8. 数据安全
  9. 数据加密
  10. 服务端加密

服务端加密

  • 数据加密
  • 发布于 2025-04-21
  • 0 次阅读
文档编辑
文档编辑

OSS支持在服务器端对上传的数据进行加密编码(Server-Side Encryption)。上传数据时,OSS对收到的用户数据进行加密,然后再将得到的加密数据持久化保存下来。下载数据时,OSS自动对保存的加密数据进行解密并把原始数据返回给用户,并在返回的HTTP请求Header中,声明该数据进行了服务器端加密。

注意事项

  • 在配置服务器端加密之前,请确保您已了解该功能。详情请参见服务器端加密。

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

  • 本文以从环境变量读取访问凭证为例。如何配置访问凭证,请参见配置访问凭证。

  • 要配置Bucket加密,您必须具有oss:PutBucketEncryption权限;要获取Bucket加密配置,您必须具有oss:GetBucketEncryption权限;要删除Bucket加密配置,您必须具有oss:DeleteBucketEncryption权限。具体操作,请参见为RAM用户授权自定义的权限策略。

示例代码

配置Bucket加密

您可以通过以下代码设置Bucket默认加密方式,设置成功之后,所有上传至该Bucket但未设置加密方式的Object都会使用Bucket默认加密方式进行加密:

import argparse
import alibabacloud_oss_v2 as oss

# 创建命令行参数解析器,用于接收用户输入的参数
parser = argparse.ArgumentParser(description="put bucket encryption sample")

# 添加命令行参数 --region,表示存储空间所在的地域,必填项
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)

# 添加命令行参数 --bucket,表示存储空间的名称,必填项
parser.add_argument('--bucket', help='The name of the bucket.', required=True)

# 添加命令行参数 --endpoint,表示其他服务访问 OSS 时使用的域名,可选项
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

# 添加命令行参数 --sse_algorithm,表示默认的服务器端加密方法,默认值为 'KMS'
# 有效值:KMS(使用 KMS 加密)、AES256(使用 AES-256 加密)、SM4(使用国密算法 SM4)
parser.add_argument('--sse_algorithm', help='The default server-side encryption method. Valid values: KMS, AES256, and SM4.', default='KMS')

# 添加命令行参数 --kms_master_key_id,表示当 SSEAlgorithm 设置为 KMS 且使用指定的 CMK 时的主密钥 ID
# 如果不使用指定的 CMK,则留空
parser.add_argument('--kms_master_key_id', help='The CMK ID that is specified when SSEAlgorithm is set to KMS and a specified CMK is used for encryption. In other cases, leave this parameter empty.', default='')

# 添加命令行参数 --kms_data_encryption,表示对象加密时使用的算法
# 默认值为 'SM4',仅在 SSEAlgorithm 设置为 KMS 时有效
parser.add_argument('--kms_data_encryption', help='The algorithm that is used to encrypt objects. If this parameter is not specified, objects are encrypted by using AES256. This parameter is valid only when SSEAlgorithm is set to KMS. Valid value: SM4', default='SM4')

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

    # 从环境变量中加载凭证信息(AccessKeyId 和 AccessKeySecret)
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 加载 SDK 的默认配置
    cfg = oss.config.load_default()

    # 设置凭证提供者
    cfg.credentials_provider = credentials_provider

    # 设置存储空间所在的地域
    cfg.region = args.region

    # 如果用户提供了自定义的 endpoint,则设置到配置中
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用配置对象初始化 OSS 客户端
    client = oss.Client(cfg)

    # 调用 put_bucket_encryption 方法设置存储空间的加密配置
    result = client.put_bucket_encryption(
        oss.PutBucketEncryptionRequest(
            bucket=args.bucket,  # 指定目标存储空间的名称
            server_side_encryption_rule=oss.ServerSideEncryptionRule(
                apply_server_side_encryption_by_default=oss.ApplyServerSideEncryptionByDefault(
                    kms_master_key_id=args.kms_master_key_id,  # 主密钥 ID(仅在 SSEAlgorithm 为 KMS 时有效)
                    kms_data_encryption=args.kms_data_encryption,  # 对象加密算法(仅在 SSEAlgorithm 为 KMS 时有效)
                    sse_algorithm=args.sse_algorithm,  # 服务器端加密算法(如 KMS、AES256 或 SM4)
                ),
            ),
        )
    )

    # 打印操作结果的状态码和请求 ID
    print(f'status code: {result.status_code}, '  # HTTP 状态码,表示请求是否成功
          f'request id: {result.request_id}')     # 请求 ID,用于追踪请求日志和调试


if __name__ == "__main__":
    # 程序入口,调用 main 函数执行逻辑
    main()

获取Bucket加密配置

您可以使用以下代码获取Bucket加密配置。

import argparse
import alibabacloud_oss_v2 as oss

# 创建命令行参数解析器,用于接收用户输入的参数
parser = argparse.ArgumentParser(description="get bucket encryption sample")

# 添加命令行参数 --region,表示存储空间所在的地域,必填项
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)

# 添加命令行参数 --bucket,表示存储空间的名称,必填项
parser.add_argument('--bucket', help='The name of the bucket.', required=True)

# 添加命令行参数 --endpoint,表示其他服务访问 OSS 时使用的域名,可选项
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

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

    # 从环境变量中加载凭证信息(AccessKeyId 和 AccessKeySecret)
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 加载 SDK 的默认配置
    cfg = oss.config.load_default()

    # 设置凭证提供者
    cfg.credentials_provider = credentials_provider

    # 设置存储空间所在的地域
    cfg.region = args.region

    # 如果用户提供了自定义的 endpoint,则设置到配置中
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用配置对象初始化 OSS 客户端
    client = oss.Client(cfg)

    # 调用 get_bucket_encryption 方法获取存储空间的加密配置
    result = client.get_bucket_encryption(
        oss.GetBucketEncryptionRequest(
            bucket=args.bucket,  # 指定目标存储空间的名称
        )
    )

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


if __name__ == "__main__":
    # 程序入口,调用 main 函数执行逻辑
    main()

删除Bucket加密配置

您可以使用以下代码删除Bucket加密配置。

import argparse
import alibabacloud_oss_v2 as oss

# 创建命令行参数解析器,用于接收用户输入的参数
parser = argparse.ArgumentParser(description="delete bucket encryption sample")

# 添加命令行参数 --region,表示存储空间所在的地域,必填项
parser.add_argument('--region', help='The region in which the bucket is located.', required=True)

# 添加命令行参数 --bucket,表示存储空间的名称,必填项
parser.add_argument('--bucket', help='The name of the bucket.', required=True)

# 添加命令行参数 --endpoint,表示其他服务访问 OSS 时使用的域名,可选项
parser.add_argument('--endpoint', help='The domain names that other services can use to access OSS')

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

    # 从环境变量中加载凭证信息(AccessKeyId 和 AccessKeySecret)
    credentials_provider = oss.credentials.EnvironmentVariableCredentialsProvider()

    # 加载 SDK 的默认配置
    cfg = oss.config.load_default()

    # 设置凭证提供者
    cfg.credentials_provider = credentials_provider

    # 设置存储空间所在的地域
    cfg.region = args.region

    # 如果用户提供了自定义的 endpoint,则设置到配置中
    if args.endpoint is not None:
        cfg.endpoint = args.endpoint

    # 使用配置对象初始化 OSS 客户端
    client = oss.Client(cfg)

    # 调用 delete_bucket_encryption 方法删除存储空间的加密配置
    result = client.delete_bucket_encryption(
        oss.DeleteBucketEncryptionRequest(
            bucket=args.bucket,  # 指定目标存储空间的名称
        )
    )

    # 打印操作结果的状态码和请求 ID
    print(f'status code: {result.status_code}, '  # HTTP 状态码,表示请求是否成功
          f'request id: {result.request_id}')     # 请求 ID,用于追踪请求


if __name__ == "__main__":
    # 程序入口,调用 main 函数执行逻辑
    main()

相关文档

  • 关于配置服务器端加密的API接口说明,请参见PutBucketEncryption。

  • 关于获取服务器端加密配置的API接口说明,请参见GetBucketEncryption。

  • 关于删除服务器端加密配置的API接口说明,请参见DeleteBucketEncryption。

相关文章

服务端加密 2025-04-21 18:15

OSS支持在服务器端对上传的数据进行加密编码(Server-Side Encryption)。上传数据时,OSS对收到的用户数据进行加密,然后再将得到的加密数据持久化保存下来。下载数据时,OSS自动对保存的加密数据进行解密并把原始数据返回给用户,并在返回的HTTP请求Header中,声明该数据进行了

客户端加密 2025-04-21 18:15

OSS客户端加密是在数据上传至OSS之前,由用户在本地对数据进行加密处理,确保只有密钥持有者才能解密数据,增强数据在传输和存储过程中的安全性。 注意事项 本文示例代码以华东1(杭州)的地域IDcn-hangzhou

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