クライアントサイド暗号化が有効になっている場合、オブジェクトは Object Storage Service (OSS) にアップロードされる前にローカルで暗号化されます。カスタマーマスターキー (CMK) のオーナーのみがオブジェクトを復号できます。クライアントサイド暗号化は、データ転送中およびストレージ中のデータセキュリティを強化します。
免責事項
クライアントサイド暗号化を使用する場合、CMK の完全性と有効性を保証する必要があります。不適切なメンテナンスにより CMK が誤って使用されたり紛失したりした場合、復号の失敗によって生じるすべての損失と結果について、お客様が責任を負うものとします。
暗号化されたデータをコピーまたは移行する場合、オブジェクトメタデータの完全性と有効性についてお客様が責任を負うものとします。不適切なメンテナンスにより暗号化されたメタデータが不正確であったり紛失したりした場合、データの復号失敗によって生じるすべての損失と結果について、お客様が責任を負うものとします。
利用シーン
機密性の高いデータ:個人識別情報 (PII)、金融取引記録、健康データ、その他の機密性の高いデータについては、データがローカル環境を離れる前に暗号化することで、転送中に傍受された場合でも元のデータが効果的に保護されるようにしたい場合があります。
コンプライアンス要件:医療保険の相互運用性と説明責任に関する法律 (HIPAA) や一般データ保護規則 (GDPR) などの特定の業界や規制では、サードパーティのプラットフォームに保存されるデータに対して厳格な暗号化管理が求められます。クライアントサイド暗号化は、CMK がユーザーによって管理され、ネットワーク経由で送信されたり、クラウドサービスプロバイダーに公開されたりしないため、これらのコンプライアンス要件を満たすのに役立ちます。
完全な暗号化制御:企業や開発者は、暗号化アルゴリズムの選択、CMK の管理とローテーションなど、暗号化プロセスを完全に制御したい場合があります。この場合、クライアントサイド暗号化を使用して、承認されたユーザーのみがデータを復号してアクセスできるようにすることができます。
リージョン間のデータ移行のセキュリティ:クライアントサイド暗号化は、リージョン間のデータ移行の前後でデータを暗号化された状態に保つのに役立ちます。これにより、インターネット経由でのデータ転送のセキュリティが向上します。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。OSS と同じリージョンにある他の Alibaba Cloud サービスから OSS にアクセスする場合は、内部エンドポイントを使用してください。OSS のリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、アクセス認証情報は環境変数から取得されます。アクセス認証情報の設定方法の詳細については、「OSS SDK for Python 1.0 を使用したアクセス認証情報の設定」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスが作成されます。カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「初期化」をご参照ください。
背景情報
クライアントサイド暗号化では、各オブジェクトに対してランダムなデータキーが生成され、オブジェクトの対称暗号化が実行されます。クライアントは CMK を使用してランダムなデータキーを暗号化します。暗号化されたデータキーは、オブジェクトメタデータの一部としてアップロードされ、OSS サーバーに保存されます。暗号化されたオブジェクトがダウンロードされると、クライアントは CMK を使用してランダムなデータキーを復号し、復号されたデータキーを使用してオブジェクトを復号します。データセキュリティを確保するため、CMK はクライアント上でのみ使用され、ネットワーク経由で送信されたり、サーバーに保存されたりすることはありません。
暗号化方式
現在、マスターキーは次の 2 つの方法で使用されています:
KMS で管理される CMK
Key Management Service (KMS) で管理される CMK をクライアントサイド暗号化に使用する場合、OSS SDK for Python に CMK ID を提供する必要があります。
自己管理の RSA ベースの CMK
自己管理の CMK をクライアントサイド暗号化に使用する場合、CMK の公開鍵と秘密鍵をパラメーターとして OSS SDK for Python に送信する必要があります。
前述の暗号化方式を使用して、データ漏洩を防ぎ、クライアント上のデータを保護できます。データが漏洩した場合でも、他人がデータを復号することはできません。
詳細については、OSS 開発者ガイドの「クライアントサイド暗号化」をご参照ください。
クライアントサイド暗号化 V2 (推奨)
クライアントサイド暗号化は、5 GB を超えるオブジェクトのマルチパートアップロードをサポートしています。マルチパートアップロードを使用してオブジェクトをアップロードする場合、オブジェクトの合計サイズとパートサイズを指定する必要があります。最後のパートを除く各パートのサイズは同じで、16 バイトの倍数である必要があります。
ローカルクライアントで暗号化されたオブジェクトをアップロードする場合、オブジェクトのメタデータは暗号化されて保護され、CopyObject などの操作を呼び出して変更することはできません。
クライアントサイド暗号化に関連するオブジェクトメタデータ
パラメーター
説明
必須
x-oss-meta-client-side-encryption-key
暗号化されたデータキー。暗号化されたデータキーは、RSA ベースの CMK または KMS で管理される CMK を使用して暗号化され、Base64 でエンコードされた文字列です。
はい
x-oss-meta-client-side-encryption-start
データ暗号化のためにランダムに生成された初期化ベクトル。初期化ベクトルは、RSA ベースの CMK または KMS で管理される CMK を使用して暗号化され、Base64 でエンコードされた文字列です。
はい
x-oss-meta-client-side-encryption-cek-alg
データの暗号化に使用されるアルゴリズム。
はい
x-oss-meta-client-side-encryption-wrap-alg
データキーの暗号化に使用されるアルゴリズム。
はい
x-oss-meta-client-side-encryption-matdesc
JSON 形式のコンテンツ暗号化キー (CEK) の説明。
いいえ
x-oss-meta-client-side-encryption-unencrypted-content-length
暗号化前のデータの長さ。content-length が指定されていない場合、このパラメーターは生成されません。
いいえ
x-oss-meta-client-side-encryption-unencrypted-content-md5
暗号化前のデータの MD5 ハッシュ。content-md5 が指定されていない場合、このパラメーターは生成されません。
いいえ
x-oss-meta-client-side-encryption-data-size
マルチパートアップロードを使用してアップロードするオブジェクトの合計サイズ。
条件付き (マルチパートアップロードに必須)
x-oss-meta-client-side-encryption-part-size
マルチパートアップロードで指定されたパートサイズ。
条件付き (マルチパートアップロードに必須)
クライアントサイド暗号化用のバケットの作成
クライアントでオブジェクトを暗号化してアップロードしたり、ダウンロードして復号したりする前に、バケットインスタンスを初期化する必要があります。バケットの操作を呼び出して、オブジェクトをアップロードまたはダウンロードできます。クライアントサイド暗号化では、CryptoBucket クラスは Bucket クラスから操作を継承します。Bucket インスタンスを初期化するのと同じ方法でパラメーターを設定して CryptoBucket インスタンスを初期化できます。
自己管理の RSA ベースの CMK を使用してオブジェクトを暗号化するための CryptoBucket インスタンスの初期化
重要RSA ベースの CMK を使用する場合、CMK を自己管理する必要があります。CMK の紛失や CMK データの破損は、復号の失敗につながる可能性があります。KMS で管理される CMK を使用することを推奨します。RSA ベースの CMK を使用して暗号化を実行する場合は、CMK データをバックアップすることを推奨します。
次のサンプルコードは、自己管理の RSA ベースの CMK を使用してオブジェクトを暗号化するための CryptoBucket インスタンスを初期化する方法の例を示しています:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import RsaProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # オブジェクトを復号するだけの場合は、秘密鍵のみを指定します。 # key_pair = {'private_key': 'yourPrivateKey'} # オブジェクトを暗号化するだけの場合は、公開鍵のみを指定します。 # key_pair = {'public_key': 'yourPublicKey'} # オブジェクトを暗号化および復号する場合は、公開鍵と秘密鍵の両方を指定する必要があります。 key_pair = {'private_key': 'yourPrivateKey', 'public_key': 'yourPublicKey'} # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou このパラメーターは、V4 署名アルゴリズムを使用する場合に必須です。 region = "cn-hangzhou" # バケットの名前を指定します。 bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=RsaProvider(key_pair), region=region)KMS で管理される CMK を使用してオブジェクトを暗号化するための CryptoBucket インスタンスの初期化
次のサンプルコードは、KMS で管理される CMK を使用してオブジェクトを暗号化するための CryptoBucket インスタンスを初期化する方法の例を示しています:
# -*- coding: utf-8 -*- import os import oss2 from oss2.crypto import AliKMSProvider from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) kms_provider = AliKMSProvider(auth, 'yourRegion', 'yourCMKID') # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou このパラメーターは、V4 署名アルゴリズムを使用する場合に必須です。 region = "cn-hangzhou" # バケットの名前を指定します。 bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=kms_provider, region=region)複数の CMK の使用と管理
バケットにアップロードされたオブジェクトを暗号化したり、同じバケットからダウンロードされたオブジェクトを復号したりするために、異なる CMK を使用する場合があります。CMK に異なる説明を指定し、CMK と説明をバケットの暗号化関連情報に追加できます。データが復号されるとき、OSS SDK for Python は説明に基づいて CMK を自動的に照合します。次のサンプルコードは、複数の CMK を提供する方法の例を示しています:
# -*- coding: utf-8 -*- import os import oss2 from oss2.crypto import RsaProvider from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # RSA ベースのキーペアを作成します。 key_pair_1 = {'private_key': 'yourPrivateKey_1', 'public_key': 'yourPublicKey_1'} mat_desc_1 = {'key1': 'value1'} # 別の RSA ベースのキーペアを作成します。 key_pair_2 = {'private_key': 'yourPrivateKey_2', 'public_key': 'yourPublicKey_2'} mat_desc_2 = {'key2': 'value2'} provider = RsaProvider(key_pair=key_pair_2, mat_desc=mat_desc_2) # key_pair_1 の説明をプロバイダーに追加します。 encryption_materials = oss2.EncryptionMaterials(mat_desc_1, key_pair=key_pair_1) provider.add_encryption_materials(encryption_materials) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou このパラメーターは、V4 署名アルゴリズムを使用する場合に必須です。 region = "cn-hangzhou" # プロバイダーを使用して CryptoBucket インスタンスを初期化します。その後、説明が mat_desc_1 である CMK を使用して暗号化されたオブジェクトデータをダウンロードできます。 crypto_bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=provider, region=region)
標準ファイルのアップロードとダウンロード
次のサンプルコードは、KMS マスターキーを使用した標準ファイルのアップロードとダウンロードを示しています:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import RsaProvider from oss2.crypto import AliKMSProvider # 環境変数からアクセス認証情報を取得します。このサンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) kms_provider = AliKMSProvider(auth, 'yourRegion', 'yourCMKID') # バケットが配置されているリージョンのエンドポイントを入力します。たとえば、中国 (杭州) の場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # エンドポイントに対応するリージョン情報を入力します。例:cn-hangzhou。このパラメーターは V4 署名に必須であることに注意してください。 region = "cn-hangzhou" bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=kms_provider, region=region) key = 'motto.txt' content = b'a' * 1024 * 1024 filename = 'download.txt' # ファイルをアップロードします。 bucket.put_object(key, content, headers={'content-length': str(1024 * 1024)}) # OSS ファイルをローカルメモリにダウンロードします。 result = bucket.get_object(key) # ダウンロードしたファイルの内容がアップロードしたファイルの内容と同じであることを確認します。 content_got = b'' for chunk in result: content_got += chunk assert content_got == content # OSS ファイルをローカルファイルにダウンロードします。 result = bucket.get_object_to_file(key, filename) # ダウンロードしたファイルの内容がアップロードしたファイルの内容と同じであることを確認します。 with open(filename, 'rb') as fileobj: assert fileobj.read() == contentマルチパートアップロード
説明マルチパートアップロードタスクが中断され、プロセスが終了した場合、マルチパートアップロードタスクのコンテキストが失われる可能性があります。マルチパートアップロードタスクが中断され、オブジェクトを再アップロードする場合は、オブジェクト全体を再アップロードする必要があります。
大きなオブジェクトをアップロードするには、OSS の再開可能なアップロードの操作を呼び出すことを推奨します。これにより、マルチパートアップロードタスクのコンテキストをローカルクライアントに保存できるため、アップロードタスクが中断された場合でもコンテキストを保持できます。
次のサンプルコードは、KMS で管理される CMK を使用して、マルチパートアップロードでアップロードするオブジェクトを暗号化する方法の例を示しています:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import RsaProvider from oss2.cryptoimportAliKMSProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) kms_provider = AliKMSProvider(auth, 'yourRegion', 'yourCMKID') # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou このパラメーターは、V4 署名アルゴリズムを使用する場合に必須です。 region = "cn-hangzhou" bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider = kms_provider, region=region) """ マルチパートアップロードでクライアントサイド暗号化を実行します """ # マルチパートアップロードタスクを開始します。 part_a = b'a' * 1024 * 100 part_b = b'b' * 1024 * 100 part_c = b'c' * 1024 * 100 multi_content = [part_a, part_b, part_c] parts = [] data_size = 100 * 1024 * 3 part_size = 100 * 1024 multi_key = "test_crypto_multipart" # クライアントサイド暗号化を使用する場合、マルチパートアップロードタスクのコンテキストを初期化します。 context = models.MultipartUploadCryptoContext(data_size, part_size) res = bucket.init_multipart_upload(multi_key, upload_context=context) upload_id = res.upload_id # この例では、パートは順番にアップロードされます。マルチパートアップロードは、複数の並列スレッドをサポートしてアップロードを高速化します。 for i in range(3): # コンテキスト値は変更できません。コンテキストの値が変更されると、データアップロードは失敗します。 result = bucket.upload_part(multi_key, upload_id, i + 1, multi_content[i], upload_context=context) parts.append(oss2.models.PartInfo(i + 1, result.etag, size=part_size, part_crc=result.crc)) # マルチパートアップロードタスクを完了します。 result = bucket.complete_multipart_upload(multi_key, upload_id, parts) # ダウンロードしたオブジェクトのコンテンツとアップロード前のオブジェクトのコンテンツとの間でデータ整合性を確認します。 result = bucket.get_object(multi_key) content_got = b'' for chunk in result: content_got += chunk assert content_got[0:102400] == part_a assert content_got[102400:204800] == part_b assert content_got[204800:307200] == part_c再開可能なアップロード
次のサンプルコードは、自己管理の RSA ベースの CMK を使用して、再開可能なアップロードでアップロードするオブジェクトを暗号化する方法の例を示しています:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import RsaProvider key = 'motto.txt' content = b'a' * 1024 * 1024 * 100 file_name_put = 'upload.txt' # content に含まれるデータをファイルに書き込みます。 with open(file_name_put, 'wb') as fileobj: fileobj.write(content) # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # CryptoBucket インスタンスを初期化し、RSA ベースの CMK を使用してクライアントサイド暗号化を実行します。この暗号化方式は、オブジェクト全体のアップロードとダウンロードのみをサポートします。 # OSS SDK for Python 2.9.0 以降を使用している場合は、LocalRsaProvider を使用して CryptoBucket インスタンスを初期化しないことを推奨します。 # bucket = oss2.CryptoBucket(auth,'yourEndpoint', 'yourBucketName', crypto_provider=LocalRsaProvider()) # オブジェクトを復号するだけの場合は、秘密鍵のみを指定します。 # key_pair = {'private_key': 'yourPrivateKey'} # オブジェクトを暗号化するだけの場合は、公開鍵のみを指定します。 # key_pair = {'public_key': 'yourPublicKey'} # オブジェクトを暗号化および復号する場合は、公開鍵と秘密鍵の両方を指定する必要があります。 key_pair = {'private_key': 'yourPrivateKey', 'public_key': 'yourPublicKey'} # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou このパラメーターは、V4 署名アルゴリズムを使用する場合に必須です。 region = "cn-hangzhou" # CryptoBucket インスタンスを初期化します。upload_contexts_flag を True に設定した場合、upload_part 操作を呼び出すときにマルチパートアップロードコンテキストのパラメーターを設定する必要はありません。 bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=RsaProvider(key_pair), region=region) # この例では、multipart_threshold の値は 10 * 1024 * 1024 に設定されています。デフォルトのマルチパートアップロードのしきい値は 10 MB です。シナリオに基づいて値を指定してください。 # multipart_threshold は、マルチパートアップロードを使用するためのオブジェクトサイズのしきい値を指定します。オブジェクトサイズがしきい値を超えると、マルチパートアップロードが使用されます。オブジェクトサイズがしきい値より小さい場合は、put_object を呼び出してオブジェクトをアップロードすることを推奨します。 # part_size は、マルチパートアップロードのパートサイズを指定します。デフォルトのパートサイズは 10 MB です。 # num_threads は、並列アップロードスレッドの数を指定します。デフォルト値:1。 oss2.resumable_upload(bucket, key, file_name_put, multipart_threshold=10 * 1024 * 1024, part_size=1024 * 1024, num_threads=3)再開可能なダウンロード
次のサンプルコードは、KMS で管理される CMK を使用して、再開可能なダウンロードでダウンロードするオブジェクトを復号する方法の例を示しています:
# -*- coding: utf-8 -*- import os import oss2 from oss2.crypto import RsaProvider from oss2.cryptoimportAliKMSProvider from oss2.credentials import EnvironmentVariableCredentialsProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) key = 'motto.txt' content = b'a' * 1024 * 1024 * 100 file_name_get = 'download.txt' kms_provider = AliKMSProvider(auth, 'yourRegion', 'yourCMKID') endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou このパラメーターは、V4 署名アルゴリズムを使用する場合に必須です。 region = "cn-hangzhou" bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=kms_provider, region=region) # 再開可能なダウンロードを使用してオブジェクトをダウンロードします。 oss2.resumable_download(bucket, key, file_name_get, multiget_threshold=10 * 1024 * 1024, part_size=1024 * 1024, num_threads=3) # ダウンロードしたオブジェクトのコンテンツとアップロード前のオブジェクトのコンテンツとの間でデータ整合性を確認します。 with open(file_name_get, 'rb') as fileobj: assert fileobj.read() == content
クライアントサイド暗号化 V1 (非推奨)
クライアントサイド暗号化 V1 は、PutObject を呼び出すことによる 5 GB 未満のオブジェクトのアップロードのみをサポートします。マルチパートアップロード、再開可能なアップロード、および再開可能なダウンロード操作はサポートされていません。
CryptoBucket クラスの操作を呼び出してオブジェクトをアップロードした後、CopyObject などの操作を呼び出してオブジェクトメタデータを変更することはできません。メタデータが変更されると、データの復号に失敗する可能性があります。
OSS SDK for Python のみがクライアントサイド暗号化 V1 をサポートします。他のプログラミング言語用の OSS SDK は、クライアントサイド暗号化 V1 を使用してアップロードされたデータを復号できません。
OSS SDK for Python V2.11.0 以降は、クライアントサイド暗号化 V2 をサポートします。クライアントサイド暗号化 V2 は、クライアントサイド暗号化 V1 よりも多くの機能を提供します。OSS SDK for Python を最新バージョンにアップグレードすることを推奨します。
クライアントサイド暗号化に関連するオブジェクトメタデータ
パラメーター
説明
必須
x-oss-meta-oss-crypto-key
暗号化されたデータキー。暗号化されたデータキーは、RSA ベースの CMK を使用して暗号化され、Base64 でエンコードされた文字列です。
はい
x-oss-meta-oss-crypto-start
データ暗号化のためにランダムに生成された初期値。この値は、RSA ベースの CMK を使用して暗号化され、Base64 でエンコードされた文字列です。
はい
x-oss-meta-oss-cek-alg
データの暗号化に使用されるアルゴリズム。
はい
x-oss-meta-oss-wrap-alg
データキーの暗号化に使用されるアルゴリズム。
はい
x-oss-meta-oss-matdesc
JSON 形式のコンテンツ暗号化キー (CEK) の説明。このパラメーターは効果がありません。
いいえ
x-oss-meta-unencrypted-content-length
暗号化前のデータの長さ。content-length が指定されていない場合、このパラメーターは生成されません。
いいえ
x-oss-meta-unencrypted-content-md5
暗号化前のデータの MD5 ハッシュ。content-md5 が指定されていない場合、このパラメーターは生成されません。
いいえ
RSA を使用したファイルのアップロードとダウンロード
次のコード例は、RSA を使用してファイルをアップロードおよびダウンロードする方法を示しています:
# -*- coding: utf-8 -*- import os import oss2 from oss2.credentials import EnvironmentVariableCredentialsProvider from oss2.crypto import LocalRsaProvider # 環境変数からアクセス認証情報を取得します。サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider()) # バケットが配置されているリージョンのエンドポイントを指定します。たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。 endpoint = "https://oss-cn-hangzhou.aliyuncs.com" # バケットが配置されているリージョンを指定します。例:cn-hangzhou このパラメーターは、V4 署名アルゴリズムを使用する場合に必須です。 region = "cn-hangzhou" # CryptoBucket インスタンスを初期化し、RSA ベースの CMK を使用してクライアントサイド暗号化を実行します。この暗号化方式は、オブジェクト全体のアップロードとダウンロードのみをサポートします。 bucket = oss2.CryptoBucket(auth, endpoint, 'yourBucketName', crypto_provider=LocalRsaProvider(), region=region) key = 'motto.txt' content = b'a' * 1024 * 1024 filename = 'download.txt' # オブジェクトをアップロードします。 bucket.put_object(key, content, headers={'content-length': str(1024 * 1024)}) # OSS からローカルメモリにオブジェクトをダウンロードします。 result = bucket.get_object(key) # ダウンロードしたオブジェクトのコンテンツとアップロード前のオブジェクトのコンテンツとの間でデータ整合性を確認します。 content_got = b'' for chunk in result: content_got += chunk assert content_got == content # OSS からローカルパスにオブジェクトをダウンロードします。 result = bucket.get_object_to_file(key, filename) # ダウンロードしたオブジェクトのコンテンツとアップロード前のオブジェクトのコンテンツとの間でデータ整合性を確認します。 with open(filename, 'rb') as fileobj: assert fileobj.read() == content
関連ドキュメント
クライアントサイド暗号化の完全なサンプルコードについては、GitHub をご参照ください。