AWS KMS キーリング - AWS データベース暗号化 SDK

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

AWS KMS キーリング

クライアント側の暗号化ライブラリの名前が AWS Database Encryption SDK に変更されました。このデベロッパーガイドでは、引き続き DynamoDB Encryption Client に関する情報を提供します。

AWS KMS キーリングは、対称暗号化または非対称 RSA AWS KMS keysを使用してデータキーを生成、暗号化、復号します。 AWS Key Management Service (AWS KMS) は KMS キーを保護し、FIPS 境界内で暗号化オペレーションを実行します。可能な限り、 AWS KMS キーリング、または同様のセキュリティプロパティを持つキーリングを使用することをお勧めします。

キーリングで対称マルチリージョン KMS AWS KMS キーを使用することもできます。マルチリージョン を使用した詳細と例については AWS KMS keys、「」を参照してくださいマルチリージョンの使用 AWS KMS keys。マルチリージョンキーの詳細については、「AWS Key Management Service デベロッパーガイド」の「マルチリージョンキーを使用する」を参照してください。

AWS KMS キーリングには、次の 2 種類のラッピングキーを含めることができます。

  • ジェネレーターキー: プレーンテキストのデータキーを生成し、暗号化します。データを暗号化するキーリングには、ジェネレーターキーが 1 つ必要です。

  • 追加キー: ジェネレーターキーが生成したプレーンテキストのデータキーを暗号化します。 AWS KMS キーリングには、0 個以上の追加キーを含めることができます。

レコードを暗号化するにはジェネレーターキーが必要です。 AWS KMS キーリングに AWS KMS キーが 1 つしかない場合、そのキーはデータキーの生成と暗号化に使用されます。

すべてのキーリングと同様に、 AWS KMS キーリングは独立して使用することも、同じタイプまたは異なるタイプの他のキーリングを持つマルチキーリングで使用することもできます。

AWS KMS キーリングに必要なアクセス許可

AWS Database Encryption SDK は を必要とせず AWS アカウント 、 に依存しません AWS のサービス。ただし、 AWS KMS キーリングを使用するには、キーリング AWS KMS keys の に対する AWS アカウント と以下の最小限のアクセス許可が必要です。

  • AWS KMS キーリングで暗号化するには、ジェネレーターキーに対する kms:GenerateDataKey アクセス許可が必要です。 AWS KMS キーリングのすべての追加キーに対する kms:Encrypt アクセス許可が必要です。

  • AWS KMS キーリングで復号するには、キー AWS KMS リング内の少なくとも 1 つのキーに対する kms:Decrypt アクセス許可が必要です。

  • AWS KMS キーリングで構成されるマルチキーリングで暗号化するには、ジェネレータキーリングのジェネレータキーに対する kms:GenerateDataKey アクセス許可が必要です。他のすべてのキー AWS KMS リングの他のすべてのキーに対する kms:Encrypt アクセス許可が必要です。

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

のアクセス許可の詳細については AWS KMS keys、「 AWS Key Management Service デベロッパーガイド」の「認証とアクセスコントロール」を参照してください。

AWS KMS キーリング AWS KMS keys での の識別

AWS KMS キーリングには、1 つ以上の を含めることができます AWS KMS keys。 AWS KMS キーリングで を指定する AWS KMS key には、サポートされている AWS KMS キー識別子を使用します。キーリング AWS KMS key 内の を識別するために使用できるキー識別子は、 オペレーションと言語の実装によって異なります。 AWS KMS keyのキー識別子の詳細については、AWS Key Management Service デベロッパーガイドの「キー識別子」を参照してください。

ベストプラクティスとして、自らのタスクにとって実用的である最も具体的なキー識別子を使用します。

  • AWS KMS キーリングで暗号化するには、キー ID キー ARN エイリアス名 、またはエイリアス ARN を使用してデータを暗号化できます。

    注記

    暗号化キーリングで KMS キーのエイリアス名またはエイリアス ARN を指定すると、暗号化オペレーションによって、現在エイリアスに関連付けられているキー ARN が、暗号化されたデータキーのメタデータに保存されます。エイリアスは保存されません。エイリアスの変更は、暗号化されたデータキーの復号に使用される KMS キーには影響しません。

  • AWS KMS キーリングで復号するには、キー ARN を使用して を識別する必要があります AWS KMS keys。詳細については、「ラッピングキーの選択」を参照してください。

  • 暗号化および復号に使用するキーリングでは、キー ARN を使用して AWS KMS keysを指定する必要があります。

復号時に、 AWS Database Encryption SDK は、暗号化されたデータ AWS KMS キーの 1 つを復号 AWS KMS key できる のキーリングを検索します。具体的には、 AWS Database Encryption SDK は、マテリアルの説明内の暗号化されたデータキーごとに次のパターンを使用します。

  • AWS Database Encryption SDK は、マテリアルの説明のメタデータからデータキーを暗号化 AWS KMS key した のキー ARN を取得します。

  • AWS Database Encryption SDK は、復号キーリングで、一致するキー ARN AWS KMS key を持つ を検索します。

  • キーリングで一致するキー ARN AWS KMS key を持つ が見つかった場合、 AWS Database Encryption SDK は KMS キーを使用して暗号化されたデータキーを復号 AWS KMS するように に要求します。

  • それ以外の場合は、暗号化された次のデータキーに進みます (ある場合)。

AWS KMS キーリングの作成

各 AWS KMS キーリングは、同じ AWS KMS key または異なる AWS アカウント および AWS KMS keys の 1 つまたは複数の で設定できます AWS リージョン。 AWS KMS key は、対称暗号化キー (SYMMETRIC_DEFAULT) または非対称 RSA KMS キーである必要があります。対称暗号化マルチリージョン KMS キーを使用することもできます。マルチ AWS KMS キーリング では、1 つ以上のキーリングを使用できます。

データを暗号化および復号する AWS KMS キーリングを作成することも、暗号化または復号専用の AWS KMS キーリングを作成することもできます。データを暗号化する AWS KMS キーリングを作成するときは、ジェネレーターキー を指定する必要があります。これは、プレーンテキストのデータキーを生成して暗号化するために使用される AWS KMS key です。データキーは数学的には KMS キーとは無関係です。次に、選択した場合は、同じプレーンテキストのデータキーを暗号化 AWS KMS keys する追加の を指定できます。このキーリングで保護された暗号化されたフィールドを復号するには、使用する復号キーリングに、キーリングで AWS KMS keys 定義されている の少なくとも 1 つが含まれているか、 が含まれていない必要があります AWS KMS keys。( のない AWS KMS キーリング AWS KMS keys は、AWS KMS 検出キーリング と呼ばれます)。

暗号化キーリングまたはマルチキーリング内のすべてのラッピングキーは、データキーを暗号化できる必要があります。いずれかのラッピングキーが暗号化に失敗すると、暗号化メソッドは失敗します。そのため、呼び出し元は、キーリング内のすべてのキーについて必要な許可を持っている必要があります。検出キーリングを使用して、単独またはマルチキーリングでデータを暗号化すると、暗号化操作は失敗します。

次の例では、 CreateAwsKmsMrkMultiKeyringメソッドを使用して、対称暗号化 KMS AWS KMS キーを持つ キーリングを作成します。CreateAwsKmsMrkMultiKeyring メソッドは自動的に AWS KMS クライアントを作成し、キーリングが単一リージョンキーとマルチリージョンキーの両方を正しく処理するようにします。これらの例では、キー ARNsを使用して KMS キーを識別します。詳細については、「AWS KMS キーリング AWS KMS keys での の識別」を参照してください。

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput keyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(kmsKeyArn) .build(); final IKeyring kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsMrkMultiKeyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyArn }; var awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);

次の例では、 CreateAwsKmsRsaKeyringメソッドを使用して、非対称 RSA KMS AWS KMS キーを持つ キーリングを作成します。非対称 RSA AWS KMS キーリングを作成するには、次の値を指定します。

  • kmsClient: 新しい AWS KMS クライアントを作成する

  • kmsKeyID: 非対称 RSA KMS キーを識別するキー ARN

  • publicKey: 渡されたキー ByteBuffer のパブリックキーを表す UTF-8 でエンコードされた PEM ファイルの 。 kmsKeyID

  • encryptionAlgorithm: 暗号化アルゴリズムは RSAES_OAEP_SHA_256または である必要があります RSAES_OAEP_SHA_1

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsRsaKeyringInput createAwsKmsRsaKeyringInput = CreateAwsKmsRsaKeyringInput.builder() .kmsClient(KmsClient.create()) .kmsKeyId(rsaKMSKeyArn) .publicKey(publicKey) .encryptionAlgorithm(EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256) .build(); IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsRsaKeyringInput = new CreateAwsKmsRsaKeyringInput { KmsClient = new AmazonKeyManagementServiceClient(), KmsKeyId = rsaKMSKeyArn, PublicKey = publicKey, EncryptionAlgorithm = EncryptionAlgorithmSpec.RSAES_OAEP_SHA_256 }; IKeyring awsKmsRsaKeyring = matProv.CreateAwsKmsRsaKeyring(createAwsKmsRsaKeyringInput);

マルチリージョンの使用 AWS KMS keys

AWS Database Encryption SDK では、マルチリージョンをラッピングキー AWS KMS keys として使用できます。1 つの でマルチリージョンキーを使用して暗号化する場合 AWS リージョン、別の で関連するマルチリージョンキーを使用して復号できます AWS リージョン。

マルチリージョン KMS キーは、同じキーマテリアルとキー ID AWS リージョン を持つ異なる AWS KMS keys の のセットです。これらの関連キーは、さまざまなリージョンで同じキーであるかのように使用できます。マルチリージョンキーは、 をクロスリージョン呼び出しせずに、あるリージョンで暗号化し、別のリージョンで復号する必要がある一般的なディザスタリカバリおよびバックアップシナリオをサポートします AWS KMS。マルチリージョンキーの詳細については、「AWS Key Management Service デベロッパーガイド」の「マルチリージョンキーを使用する」を参照してください。

マルチリージョンキーをサポートするために、 AWS Database Encryption SDK には AWS KMS マルチリージョン対応のキーリングが含まれています。CreateAwsKmsMrkMultiKeyring メソッドは、単一リージョンキーとマルチリージョンキーの両方をサポートします。

  • 単一リージョンキーの場合、マルチリージョン対応シンボルは、単一リージョン AWS KMS キーリングのように動作します。データを暗号化した単一リージョンキーを使用してのみ、暗号化テキストの復号が試されます。 AWS KMS キーリングエクスペリエンスを簡素化するために、対称暗号化 KMS キーを使用するときは常に CreateAwsKmsMrkMultiKeyringメソッドを使用することをお勧めします。

  • マルチリージョンキーの場合、マルチリージョン対応シンボルは、データを暗号化したのと同じマルチリージョンキー、または指定したリージョン内の関連するマルチリージョンキーを使用して暗号文の復号を試みます。

複数の KMS キーを使用するマルチリージョン対応キーリングでは、複数の単一リージョンキーとマルチリージョンキーを指定できます。ただし、関連するマルチリージョンキーのセットごとに 1 つのキーしか指定できません。同じキー ID で複数のキー識別子を指定すると、コンストラクタの呼び出しは失敗します。

次の例では、マルチリージョン KMS AWS KMS キーを使用して キーリングを作成します。この例では、マルチリージョンキーをジェネレーターキーとして指定し、単一リージョンキーを子キーとして指定します。

Java
final MaterialProviders matProv = MaterialProviders.builder() .MaterialProvidersConfig(MaterialProvidersConfig.builder().build()) .build(); final CreateAwsKmsMrkMultiKeyringInput createAwsKmsMrkMultiKeyringInput = CreateAwsKmsMrkMultiKeyringInput.builder() .generator(multiRegionKeyArn) .kmsKeyIds(Collections.singletonList(kmsKeyArn)) .build(); IKeyring awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);
C# / .NET
var matProv = new MaterialProviders(new MaterialProvidersConfig()); var createAwsKmsMrkMultiKeyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = multiRegionKeyArn, KmsKeyIds = new List<String> { kmsKeyArn } }; var awsKmsMrkMultiKeyring = matProv.CreateAwsKmsMrkMultiKeyring(createAwsKmsMrkMultiKeyringInput);

マルチリージョン AWS KMS キーリングを使用すると、暗号文を Strict モードまたは discover モードで復号できます。厳格モードで暗号文を復号するには、暗号文を復号するリージョン内の関連するマルチリージョンキーのキー ARN を使用してマルチリージョン対応シンボルをインスタンス化します。別のリージョン (例: レコードが暗号化されたリージョン) で関連するマルチリージョンキーのキー ARN を指定した場合、マルチリージョン対応シンボルは、その AWS KMS keyのクロスリージョン呼び出しを実行します。

Strict モードで復号する場合、マルチリージョン対応シンボルにはキー ARN が必要です。関連するマルチリージョンキーの各セットからキー ARN を 1 つだけ受け付けます。

AWS KMS マルチリージョンのキーを使用して、検出モードで復号することもできます。検出モードで復号する場合は、 AWS KMS keysを指定しません。(単一リージョン AWS KMS の検出キーリングの詳細については、「」を参照してくださいAWS KMS 検出キーリングの使用。)

マルチリージョンキーで暗号化した場合、検出モードのマルチリージョン対応シンボルは、ローカルリージョン内の関連するマルチリージョンキーを使用して復号しようとします。何も存在しない場合、呼び出しは失敗します。検出モードでは、 AWS Database Encryption SDK は暗号化に使用されるマルチリージョンキーのクロスリージョン呼び出しを試みません。

AWS KMS 検出キーリングの使用

復号するときは、 AWS Database Encryption SDK が使用できるラッピングキーを指定することがベストプラクティスです。このベストプラクティスに従うには、ラ AWS KMS ッピングキーを指定したキーに制限する復号キーリングを使用します AWS KMS 。ただし、AWS KMS 検出キーリング 、つまりラッピング AWS KMS キーを指定しない キーリングを作成することもできます。

AWS Database Encryption SDK は、標準の AWS KMS 検出キーリングと AWS KMS 、マルチリージョンキー用の検出キーリングを提供します。 AWS Database Encryption SDK でのマルチリージョンキーの使用については、「マルチリージョンの使用 AWS KMS keys」を参照してください。

ラッピングキーが指定されていないため、検出キーリングはデータを暗号化できません。検出キーリングを使用して、単独またはマルチキーリングでデータを暗号化すると、暗号化操作は失敗します。

復号化時に、検出キーリングを使用すると、 AWS Database Encryption SDK AWS KMS は、暗号化されたデータキーを所有またはアクセスできるユーザーに関係なく、暗号化されたデータキー AWS KMS key を暗号化した を使用して復号化するように に要求できます AWS KMS key。呼び出しは、呼び出し元にその AWS KMS keyに対する kms:Decrypt 許可がある場合にのみ成功します。

重要

復号マルチキーリング に AWS KMS 検出キーリングを含めると、検出キーリングは、マルチキーリングの他のキーリングで指定されたすべての KMS キー制限を上書きします。マルチキーリングは、最も制限の少ないキーリングのように動作します。検出キーリングを単独または複数のキーリングで使用してデータを暗号化すると、暗号化オペレーションは失敗します

AWS Database Encryption SDK は、便利な AWS KMS 検出キーリングを提供します。ただし、次の理由から、可能な限り制限されたキーリングを使用することをお勧めします。

  • 真正性 – AWS KMS 検出キーリングは、発信者 AWS KMS key が復号化に使用するアクセス許可を持っている限り、マテリアルの説明でデータキーを暗号化するために使用された AWS KMS key を使用できます。これは、呼び出し元 AWS KMS key が使用する ではない可能性があります。例えば、暗号化されたデータキーの 1 つが、誰でも使用できる安全性 AWS KMS key の低い で暗号化されている可能性があります。

  • レイテンシーとパフォーマンス – Database AWS KMS AWS Encryption SDK は、他の AWS アカウント およびリージョン AWS KMS keys の によって暗号化されたデータキーを含む、暗号化されたすべてのデータキーの復号を試み、呼び出し元 AWS KMS keys に復号に使用するアクセス許可がないため、検出キーリングは他のキーリングよりもかなり遅くなる可能性があります。

検出キーリングを使用する場合は、検出フィルターを使用して、指定 AWS アカウント および パーティション 内のキーに使用できる KMS キーを制限することをお勧めします。アカウント ID とパーティションの検索については、「」のAWS アカウント 「識別子ARN 形式」を参照してくださいAWS 全般のリファレンス

次のコード例では、 AWS Database Encryption SDK が使用できる KMS AWS KMS キーをawsパーティションと111122223333サンプルアカウントのキーに制限する検出フィルターを使用して、検出キーリングをインスタンス化します。

このコードを使用する前に、例の AWS アカウント とパーティションの値を、 AWS アカウント と パーティションの有効な値に置き換えてください。KMS キーが中国リージョンにある場合は、aws-cn のパーティションの値を使用します。KMS キーが AWS GovCloud (US) Regionsにある場合は、aws-us-gov のパーティションの値を使用します。他のすべての AWS リージョンについては、aws のパーティションの値を使用します。

Java
// Create discovery filter DiscoveryFilter discoveryFilter = DiscoveryFilter.builder() .partition("aws") .accountIds(111122223333) .build(); // Create the discovery keyring CreateAwsKmsMrkDiscoveryMultiKeyringInput createAwsKmsMrkDiscoveryMultiKeyringInput = CreateAwsKmsMrkDiscoveryMultiKeyringInput.builder() .discoveryFilter(discoveryFilter) .build(); IKeyring decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);
C# / .NET
// Create discovery filter var discoveryFilter = new DiscoveryFilter { Partition = "aws", AccountIds = 111122223333 }; // Create the discovery keyring var createAwsKmsMrkDiscoveryMultiKeyringInput = new CreateAwsKmsMrkDiscoveryMultiKeyringInput { DiscoveryFilter = discoveryFilter }; var decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);

AWS KMS リージョン検出キーリングの使用

AWS KMS リージョンレベルの検出キーリングは、KMS キーの ARN を指定しないキーリングです。代わりに、 AWS Database Encryption SDK は、特定の の KMS キーのみを使用して復号化できます AWS リージョン。

AWS KMS リージョン検出キーリングを使用して復号する場合、 AWS Database Encryption SDK は、指定された の AWS KMS key で暗号化された暗号化されたデータキーを復号します AWS リージョン。成功するには、呼び出し元が、データキーを暗号化 AWS リージョン した指定された AWS KMS keys 内の少なくとも 1 つの に対するkms:Decryptアクセス許可を持っている必要があります。

他の検出キーリングと同様、リージョンレベルの検出キーリングは暗号化には影響しません。暗号化されたフィールドを復号する場合にのみ機能します。暗号化と復号に使用されるマルチキーリングでリージョンレベルの検出キーリングを使用する場合、それは復号時にのみ有効です。マルチリージョン検出キーリングを単独または複数のキーリングで使用してデータを暗号化すると、暗号化オペレーションは失敗します。

重要

復号マルチキーリング に AWS KMS リージョン検出キーリングを含めると、リージョン検出キーリングは、マルチキーリングの他のキーリングで指定されたすべての KMS キー制限を上書きします。マルチキーリングは、最も制限の少ないキーリングのように動作します。 AWS KMS 検出キーリングは、単独で使用する場合も、マルチキーリングで使用する場合も、暗号化には影響しません。

AWS Database Encryption SDK のリージョン検出キーリングは、指定されたリージョンの KMS キーでのみ復号を試みます。検出キーリングを使用する場合は、 AWS KMS クライアントでリージョンを設定します。これらの AWS Database Encryption SDK 実装では、リージョンごとに KMS キーをフィルタリングしませんが、指定されたリージョン外の KMS キーの復号リクエストは失敗 AWS KMS します。

検出キーリングを使用する場合は、検出フィルターを使用して、復号に使用される KMS キーを、指定された AWS アカウント および パーティション内のキーに制限することをお勧めします。

例えば、次のコードは、検出フィルターを使用して AWS KMS リージョン検出キーリングを作成します。このキーリングは、 AWS Database Encryption SDK を、米国西部 (オレゴン) リージョン (us-west-2) のアカウント 111122223333 の KMS キーに制限します。

Java
// Create the discovery filter DiscoveryFilter discoveryFilter = DiscoveryFilter.builder() .partition("aws") .accountIds(111122223333) .build(); // Create the discovery keyring CreateAwsKmsMrkDiscoveryMultiKeyringInput createAwsKmsMrkDiscoveryMultiKeyringInput = CreateAwsKmsMrkDiscoveryMultiKeyringInput.builder() .discoveryFilter(discoveryFilter) .regions("us-west-2") .build(); IKeyring decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);
C# / .NET
// Create discovery filter var discoveryFilter = new DiscoveryFilter { Partition = "aws", AccountIds = 111122223333 }; // Create the discovery keyring var createAwsKmsMrkDiscoveryMultiKeyringInput = new CreateAwsKmsMrkDiscoveryMultiKeyringInput { DiscoveryFilter = discoveryFilter, Regions = us-west-2 }; var decryptKeyring = matProv.CreateAwsKmsMrkDiscoveryMultiKeyring(createAwsKmsMrkDiscoveryMultiKeyringInput);