OSS支持在服務器端對上傳的數據進行加密編碼(Server-Side Encryption)。上傳數據時,OSS對收到的用戶數據進行加密,然后再將得到的加密數據持久化保存下來。下載數據時,OSS自動對保存的加密數據進行解密并把原始數據返回給用戶,并在返回的HTTP請求Header中,聲明該數據進行了服務器端加密。
注意事項
在配置服務器端加密之前,請確保您已了解該功能。詳情請參見服務器端加密。
本文以華東1(杭州)外網Endpoint為例。如果您希望通過與OSS同地域的其他阿里云產品訪問OSS,請使用內網Endpoint。關于OSS支持的Region與Endpoint的對應關系,請參見OSS地域和訪問域名。
本文以從環境變量讀取訪問憑證為例。如何配置訪問憑證,請參見配置訪問憑證。
本文以OSS域名新建OSSClient為例。如果您希望通過自定義域名、STS等方式新建OSSClient,請參見初始化。
要配置Bucket加密,您必須具有
oss:PutBucketEncryption
權限;要獲取Bucket加密配置,您必須具有oss:GetBucketEncryption
權限;要刪除Bucket加密配置,您必須具有oss:DeleteBucketEncryption
權限。具體操作,請參見為RAM用戶授權自定義的權限策略。
配置Bucket加密
您可以通過以下代碼設置Bucket默認加密方式,設置成功之后,所有上傳至該Bucket但未設置加密方式的Object都會使用Bucket默認加密方式進行加密:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
from oss2.models import ServerSideEncryptionRule
# 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填寫Endpoint對應的Region信息,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數
region = "cn-hangzhou"
# examplebucket填寫存儲空間名稱。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 創建Bucket加密配置,以AES256加密為例。
rule = ServerSideEncryptionRule()
rule.sse_algorithm = oss2.SERVER_SIDE_ENCRYPTION_AES256
# 設置KMS密鑰ID,加密方式為KMS可設置此項。如需使用指定的密鑰加密,需輸入指定的CMK ID;若使用OSS托管的CMK進行加密,此項為空。使用AES256進行加密時,此項必須為空。
rule.kms_master_keyid = ""
# 設置Bucket加密。
result = bucket.put_bucket_encryption(rule)
# 查看HTTP返回碼。
print('http response code:', result.status)
獲取Bucket加密配置
以下代碼用于獲取Bucket加密配置:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填寫Endpoint對應的Region信息,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數
region = "cn-hangzhou"
# examplebucket填寫存儲空間名稱。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 獲取Bucket加密配置。
result = bucket.get_bucket_encryption()
# 打印獲取到的加密配置。
print('sse_algorithm:', result.sse_algorithm)
print('kms_master_keyid:', result.kms_master_keyid) #如果Bucket加密方式為AES256,那么kms_master_keyid為None。
刪除Bucket加密配置
以下代碼用于刪除Bucket加密配置:
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# 從環境變量中獲取訪問憑證。運行本代碼示例之前,請確保已設置環境變量OSS_ACCESS_KEY_ID和OSS_ACCESS_KEY_SECRET。
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# 填寫Bucket所在地域對應的Endpoint。以華東1(杭州)為例,Endpoint填寫為https://oss-cn-hangzhou.aliyuncs.com。
endpoint = "https://oss-cn-hangzhou.aliyuncs.com"
# 填寫Endpoint對應的Region信息,例如cn-hangzhou。注意,v4簽名下,必須填寫該參數
region = "cn-hangzhou"
# examplebucket填寫存儲空間名稱。
bucket = oss2.Bucket(auth, endpoint, "examplebucket", region=region)
# 刪除Bucket加密配置。
result = bucket.delete_bucket_encryption()
# 查看HTTP返回碼。
print('http status:', result.status)
相關文檔
關于服務器端加密的完整示例代碼,請參見GitHub示例。
關于設置服務器端加密的API接口說明,請參見PutBucketEncryption。
關于獲取服務器端加密配置的API接口說明,請參見GetBucketEncryption。
關于刪除服務器端加密配置的API接口說明,請參見DeleteBucketEncryption。