AWS Encryption SDK for Python - AWS Encryption SDK

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS Encryption SDK for Python

このトピックでは、 AWS Encryption SDK for Pythonをインストールして使用する方法について説明します。でのプログラミングの詳細については AWS Encryption SDK for Python、 のaws-encryption-sdk-pythonリポジトリを参照してください GitHub。API ドキュメントについては、「ドキュメントを読む」を参照してください。

前提条件

をインストールする前に AWS Encryption SDK for Python、以下の前提条件があることを確認してください。

Python のサポートされているバージョン

AWS Encryption SDK for Python バージョン 3.2.0 以降では、Python 3.8 以降が必要です。

注記

AWS 暗号化マテリアルプロバイダーライブラリ (MPL) は、バージョン 4.x で AWS Encryption SDK for Python 導入された のオプションの依存関係です。をインストールする場合はMPL、Python 3.11 以降を使用する必要があります。

以前のバージョンの は Python 2.7 および Python 3.4 以降 AWS Encryption SDK をサポートしていますが、最新バージョンの を使用することをお勧めします AWS Encryption SDK。

Python をダウンロードするには、「Python のダウンロード」を参照してください。

Python 用 pip インストールツール

pip は、Python 3.6 以降のバージョンには含まれていますが、アップグレードすることをお勧めします。pip のアップグレードまたはインストールの詳細については、「pip ドキュメント」の「インストール」を参照してください。

インストール

AWS Encryption SDK for Pythonの最新バージョンをインストールします。

注記

3.0.0 より AWS Encryption SDK for Python 前の のすべてのバージョンはend-of-supportフェーズ にあります。

バージョン 2.0.x 以降から AWS Encryption SDK の最新バージョンにコードやデータを変更せずに安全に更新できます。ただし、バージョン 2.0.x で導入された新しいセキュリティ機能には下位互換性がありません。1.7.x より前のバージョンから 2.0.x 以降のバージョンに更新するには、まず AWS Encryption SDKの最新の 1.x バージョンに更新する必要があります。詳細については、「AWS Encryption SDK の移行」を参照してください。

次の例に示すように AWS Encryption SDK for Python、 pipを使用して をインストールします。

最新バージョンをインストールするには
pip install "aws-encryption-sdk[MPL]"

[MPL] サフィックスは、AWS 暗号化マテリアルプロバイダーライブラリ () をインストールしますMPL。MPL には、データを暗号化および復号するためのコンストラクトが含まれています。MPL は、バージョン 4.x で AWS Encryption SDK for Python 導入された のオプションの依存関係です。をインストールすることを強くお勧めしますMPL。ただし、 を使用しない場合はMPL、[MPL]サフィックスを省略できます。

pip を使用してパッケージをインストールおよびアップグレードする方法の詳細については、「パッケージのインストール」を参照してください。

には、すべてのプラットフォームで暗号化ライブラリ (pyca/cryptography) AWS Encryption SDK for Python が必要です。pip のすべてのバージョンでは、Windows に cryptography ライブラリがインストールされて構築されます。pip 8.1 以降では、Linux に cryptography が自動的にインストールされて構築されます。以前のバージョンの pip を使用していて、Linux 環境に、cryptography ライブラリを構築するために必要なツールがない場合は、それらをインストールする必要があります。詳細については、「Building cryptography on Linux」を参照してください。

バージョン 1.10.0 と 2.5.0 は、2.5.0 と 3.3.2 の間の暗号化依存関係を AWS Encryption SDK for Python ピンします。の他のバージョンでは、最新バージョンの暗号化 AWS Encryption SDK for Python をインストールします。3.3.2 以降の暗号化のバージョンが必要な場合は、 AWS Encryption SDK for Pythonの最新のメジャーバージョンを使用することを推奨します。

の最新バージョンについては AWS Encryption SDK for Python、 のaws-encryption-sdk-pythonリポジトリを参照してください GitHub。

をインストールしたら AWS Encryption SDK for Python、このガイドの Python サンプルコードを確認して開始します。

のバージョン 4.x AWS Encryption SDK for Python

このセクションでは、オプションの暗号化マテリアルプロバイダーライブラリ (MPL) の依存関係で使用する AWS Encryption SDK for Python と、 のバージョン 4.x で導入された新機能について説明します。

AWS Encryption SDK for Python で のバージョン 4.x を使用する場合MPL、キーリングを使用してエンベロープ暗号化 を実行できます。 AWS Encryption SDK には、以前のバージョンで使用したマスターキープロバイダーと互換性のあるキーリングが用意されています。詳細については、「キーリングの互換性」を参照してください。マスターキープロバイダーからキーリングへの移行の例については、 のaws-encryption-sdk-pythonリポジトリの「移行例」を参照してください GitHub。

このトピックの例は、デフォルトのコミットメントポリシー 、 で AWS Encryption SDK クライアントをインスタンス化しますREQUIRE_ENCRYPT_REQUIRE_DECRYPT。詳細については、「コミットメントポリシーの設定」を参照してください。

AWS KMS のキーリング AWS Encryption SDK for Python

の基本的な AWS KMS キーリングは 1 つのKMSキーのみ AWS Encryption SDK for Python を取ります。また、 AWS KMS クライアントも必要です。これにより、 KMSキーの AWS リージョン 用に クライアントを設定する機会が得られます。

1 つ以上のラッピング AWS KMS キーでキーリングを作成するには、マルチキーリングを使用します。 AWS Encryption SDK for Python には、1 つ以上のキーを使用する特殊なマルチキーリングと AWS KMS 、サポートされている任意のタイプの 1 つ以上のキーリングを使用する標準のマルチキーリングがあります。一部のプログラマーは、マルチキーリングメソッドを使用してすべてのキーリングを作成することを好み、 AWS Encryption SDK for Python はその戦略をサポートしています。

AWS Encryption SDK for Python は、マルチ AWS KMS リージョンキー を含む一般的なユースケースすべてに、基本的な単一キーキーキーリングとマルチキーリングを提供します。

例えば、1 つの AWS KMS キーで AWS KMS キーリングを作成するには、 create_aws_kms_keyring()メソッドを使用できます。

# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) # Create a boto3 client for AWS KMS kms_client = boto3.client('kms', region_name="us-west-2") # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput( kms_key_id=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab, kms_client=kms_client ) kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring( input=keyring_input )

1 つ以上のキーで AWS KMS キーリングを作成するには、 create_aws_kms_multi_keyring()メソッドを使用します。この例では KMS キーを 2 つ使用しています。1 つのKMSキーを指定するには、 generatorパラメータのみを使用します。追加KMSキーを指定する kms_key_idsパラメータはオプションです。

このキーリングの入力は AWS KMS クライアントを取りません。代わりに、 はキーリングのKMSキーで表される各リージョンのデフォルト AWS KMS クライアント AWS Encryption SDK を使用します。例えば、 generatorパラメータの値によって識別されるKMSキーが米国西部 (オレゴン) リージョン (us-west-2) にある場合、 はus-west-2リージョンのデフォルト AWS KMS クライアント AWS Encryption SDK を作成します。 AWS KMS クライアントをカスタマイズする必要がある場合は、 create_aws_kms_keyring()メソッドを使用します。

# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring kms_multi_keyring_input: CreateAwsKmsMultiKeyringInput = CreateAwsKmsMultiKeyringInput( generator=default_region_kms_key_id, kms_key_ids=[second_region_kms_key_id] ) kms_multi_keyring: IKeyring = mat_prov.create_aws_kms_multi_keyring( input=kms_multi_keyring_input )

AWS Encryption SDK for Python は、対称暗号化 (SYMMETRIC_DEFAULT) または非対称RSAKMSキーを使用する AWS KMS キーリングをサポートしています。非対称RSAKMSキーで作成された AWS KMS キーリングには、1 つのキーペアのみを含めることができます。

非対称RSA AWS KMS キーリングで暗号化するには、キーリングの作成時に暗号化に使用するパブリックキーマテリアルを指定する必要があるため、kms:GenerateDataKey または kms:Encrypt は必要ありません。 AWS KMS このキーリングで暗号化する場合、 呼び出しは行われません。非対称RSA AWS KMS キーリングで復号するには、kms:Decrypt アクセス許可が必要です。

非対称RSA AWS KMS キーリングを作成するには、非対称キーARNからパブリックキーとプライベートRSAKMSキーを指定する必要があります。パブリックキーはPEMエンコードする必要があります。次の例では、非対称 AWS KMS キーペアを使用してRSAキーリングを作成します。

# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) # Optional: Create an encryption context encryption_context: Dict[str, str] = { "encryption": "context", "is not": "secret", "but adds": "useful metadata", "that can help you": "be confident that", "the data you are handling": "is what you think it is", } # Instantiate the material providers library mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring keyring_input: CreateAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput( public_key=public_key, kms_key_id=kms_key_id, encryption_algorithm="RSAES_OAEP_SHA_256", kms_client=kms_client ) kms_rsa_keyring: IKeyring = mat_prov.create_aws_kms_rsa_keyring( input=keyring_input )

バージョン 4.x で必要な暗号化コンテキスト

AWS Encryption SDK for Python で のバージョン 4.x を使用する場合MPL、必要な暗号化コンテキストを使用して、暗号化オペレーションで暗号化コンテキストCMMを要求できます。暗号化コンテキストは、一連の非シークレットのキーと値のペアです。暗号化コンテキストは、暗号化されたデータに暗号化されてバインドされます。これにより、フィールドを復号するために同じ暗号化コンテキストが必要になります。必要な暗号化コンテキスト を使用する場合CMM、すべての暗号化および復号呼び出しに含める必要がある 1 つ以上の必要な暗号化コンテキストキー (必須キー) を指定できます。

注記

必要な暗号化コンテキストCMMは、次のバージョンでのみサポートされています。

  • のバージョン 3.x AWS Encryption SDK for Java

  • AWS Encryption SDK 用 のバージョン 4.x。NET

  • オプションの暗号化マテリアルプロバイダーライブラリ (MPL) の依存関係とともに AWS Encryption SDK for Python使用する場合、 のバージョン 4.x

必要な暗号化コンテキスト を使用してデータを暗号化する場合はCMM、サポートされているこれらのバージョンのいずれかでのみデータを復号化できます。

暗号化すると、 は、必要なすべての暗号化コンテキストキーが、指定した暗号化コンテキストに含まれている AWS Encryption SDK ことを確認します。は、指定した暗号化コンテキスト AWS Encryption SDK に署名します。必須キーではないキーと値のペアのみがシリアル化され、暗号化操作によって返される暗号化メッセージのヘッダーにプレーンテキストで保存されます。

復号化時には、必要なキーを表すすべてのキーと値のペアを含む暗号化コンテキストを提供する必要があります。 AWS Encryption SDK は、この暗号化コンテキストと、暗号化されたメッセージのヘッダーに保存されているキーと値のペアを使用して、暗号化オペレーションで指定した元の暗号化コンテキストを再構築します。が元の暗号化コンテキストを再構築 AWS Encryption SDK できない場合、復号オペレーションは失敗します。誤った値を持つ必要なキーを含むキーと値のペアを供給すると、暗号化されたメッセージは復号化できません。暗号化時に指定したのと同じキーと値のペアを供給する必要があります。

重要

暗号化のコンテキストで必要なキーにどの値を選択するかを慎重に検討してください。復号化時には、同じキーとそれに対応する値を再度提供できる必要があります。必要なキーを再現できない場合、暗号化されたメッセージは復号化できません。

次の例では、必要な暗号化コンテキスト を使用して AWS KMS キーリングを初期化しますCMM。

# Instantiate the AWS Encryption SDK client client = aws_encryption_sdk.EncryptionSDKClient( commitment_policy=CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT ) # Create your encryption context encryption_context: Dict[str, str] = { "key1": "value1", "key2": "value2", "requiredKey1": "requiredValue1", "requiredKey2": "requiredValue2" } # Create a list of required encryption context keys required_encryption_context_keys: List[str] = ["requiredKey1", "requiredKey2"] # Instantiate the material providers library mpl: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders( config=MaterialProvidersConfig() ) # Create the AWS KMS keyring keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput( kms_key_id=kms_key_id, kms_client=boto3.client('kms', region_name="us-west-2") ) kms_keyring: IKeyring = mpl.create_aws_kms_keyring(keyring_input) # Create the required encryption context CMM underlying_cmm: ICryptographicMaterialsManager = \ mpl.create_default_cryptographic_materials_manager( CreateDefaultCryptographicMaterialsManagerInput( keyring=kms_keyring ) ) required_ec_cmm: ICryptographicMaterialsManager = \ mpl.create_required_encryption_context_cmm( CreateRequiredEncryptionContextCMMInput( required_encryption_context_keys=required_encryption_context_keys, underlying_cmm=underlying_cmm, ) )