すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:クライアントサイド暗号化 (Python SDK V1)

最終更新日:Nov 29, 2025

クライアントサイド暗号化が有効になっている場合、オブジェクトは 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 をご参照ください。