例NET - AWS データベース暗号化 SDK

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

例NET

次の例は、DynamoDB 用の クライアントNET側の暗号化ライブラリを使用して、アプリケーション内のテーブル項目を保護する方法を示しています。その他の例 (および独自の例) については、「」のNET「-dynamodb リポジトリ」の「」例を参照してください GitHub。 aws-database-encryption-sdk

次の例は、DynamoDB 用の クライアントNET側の暗号化ライブラリを、入力されていない新しい Amazon DynamoDB テーブルで設定する方法を示しています。既存の Amazon DynamoDB テーブルをクライアント側の暗号化のために設定する場合は、「既存のテーブルにバージョン 3.x を追加する」を参照してください。

DynamoDB SDKの低レベル AWS データベース暗号化の使用 API

次の例は、 AWS KMS キーリングAPIで DynamoDB SDKの低レベルの AWS Database Encryption を使用して、DynamoDB PutItemリクエストでクライアント側で項目を自動的に暗号化して署名する方法を示しています。

サポートされている任意のキーリングを使用できますが、可能な限りいずれかの AWS KMS キーリングを使用することをお勧めします。

完全なコードサンプル : .BasicPutGetExamplecs を参照してください。

ステップ 1: AWS KMS キーリングを作成する

次の例ではCreateAwsKmsMrkMultiKeyring、 を使用して対称暗号化 AWS KMS キーを持つ KMSキーリングを作成します。CreateAwsKmsMrkMultiKeyring メソッドにより、キーリングは、単一リージョンのキーとマルチリージョンのキーの両方を確実に正しく処理します。

var matProv = new MaterialProviders(new MaterialProvidersConfig()); var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId }; var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
ステップ 2: 属性アクションを設定する

次の例では、テーブル項目の属性アクションの例を表すattributeActionsOnEncryptディクショナリを定義します。

注記

次の例では、属性を として定義していませんSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 属性を指定する場合、パーティション属性とソート属性も である必要がありますSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT

var attributeActionsOnEncrypt = new Dictionary<string, CryptoAction> { ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN, ["attribute2"] = CryptoAction.SIGN_ONLY, [":attribute3"] = CryptoAction.DO_NOTHING };
ステップ 3: 署名から除外する属性を定義する

次の例では、すべての DO_NOTHING 属性が個別のプレフィックス「:」を共有し、そのプレフィックスを使用して、許可される署名なし属性を定義すると想定しています。クライアントは、「:」というプレフィックスが付いた属性名は署名から除外されると想定します。詳細については、「Allowed unsigned attributes」を参照してください。

const String unsignAttrPrefix = ":";
ステップ 4: DynamoDB テーブルの暗号化設定を定義する

次の例では、この DynamoDB テーブルの暗号化設定を表す tableConfigs マップを定義します。

この例では、DynamoDB テーブル名を論理テーブル名として指定します。最初に暗号化設定を定義する際に、DynamoDB テーブル名を論理テーブル名として指定することを強くお勧めします。詳細については、「Database Encryption SDK for AWS DynamoDB の暗号化設定」を参照してください。

注記

検索可能な暗号化または署名付きビーコンを使用するには、暗号化設定に SearchConfig も含める必要があります。

Dictionary<String, DynamoDbTableEncryptionConfig> tableConfigs = new Dictionary<String, DynamoDbTableEncryptionConfig>(); DynamoDbTableEncryptionConfig config = new DynamoDbTableEncryptionConfig { LogicalTableName = ddbTableName, PartitionKeyName = "partition_key", SortKeyName = "sort_key", AttributeActionsOnEncrypt = attributeActionsOnEncrypt, Keyring = kmsKeyring, AllowedUnsignedAttributePrefix = unsignAttrPrefix }; tableConfigs.Add(ddbTableName, config);
ステップ 5: 新しい AWS SDK DynamoDB クライアントを作成する

次の例では、ステップ 4 TableEncryptionConfigsの を使用して新しい AWS SDK DynamoDB クライアントを作成します。

var ddb = new Client.DynamoDbClient( new DynamoDbTablesEncryptionConfig { TableEncryptionConfigs = tableConfigs });
ステップ 6: DynamoDB テーブル項目を暗号化して署名する

次の例では、サンプルテーブル項目を表すitemディクショナリを定義し、その項目を DynamoDB テーブルに配置します。項目は、DynamoDB に送信される前に、クライアント側で暗号化および署名されます。

var item = new Dictionary<String, AttributeValue> { ["partition_key"] = new AttributeValue("BasicPutGetExample"), ["sort_key"] = new AttributeValue { N = "0" }, ["attribute1"] = new AttributeValue("encrypt and sign me!"), ["attribute2"] = new AttributeValue("sign me!"), [":attribute3"] = new AttributeValue("ignore me!") }; PutItemRequest putRequest = new PutItemRequest { TableName = ddbTableName, Item = item }; PutItemResponse putResponse = await ddb.PutItemAsync(putRequest);

下位レベルの使用 DynamoDbItemEncryptor

次の例は、下位レベルの DynamoDbItemEncryptorAWS KMS キーリングとともに使用して、テーブル項目を直接暗号化して署名する方法を示しています。DynamoDbItemEncryptor は項目を DynamoDB テーブルに配置しません。

DynamoDB Enhanced Client では、サポートされている任意のキーリングを使用できますが、可能な限り、いずれかの AWS KMS キーリングを使用することをお勧めします。

注記

下位レベルの DynamoDbItemEncryptor は、検索可能な暗号化をサポートしていません。検索可能な暗号化を使用するには、DynamoDB SDK用の低レベルの AWS データベース暗号化APIを使用します。

完全なコードサンプル : .ItemEncryptDecryptExamplecs を参照してください。

ステップ 1: AWS KMS キーリングを作成する

次の例ではCreateAwsKmsMrkMultiKeyring、 を使用して対称暗号化 AWS KMS キーを持つ KMSキーリングを作成します。CreateAwsKmsMrkMultiKeyring メソッドにより、キーリングは、単一リージョンのキーとマルチリージョンのキーの両方を確実に正しく処理します。

var matProv = new MaterialProviders(new MaterialProvidersConfig()); var keyringInput = new CreateAwsKmsMrkMultiKeyringInput { Generator = kmsKeyId }; var kmsKeyring = matProv.CreateAwsKmsMrkMultiKeyring(keyringInput);
ステップ 2: 属性アクションを設定する

次の例では、テーブル項目の属性アクションの例を表すattributeActionsOnEncryptディクショナリを定義します。

注記

次の例では、属性を として定義していませんSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXTSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT 属性を指定する場合、パーティション属性とソート属性も である必要がありますSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT

var attributeActionsOnEncrypt = new Dictionary<String, CryptoAction> { ["partition_key"] = CryptoAction.SIGN_ONLY, // The partition attribute must be SIGN_ONLY ["sort_key"] = CryptoAction.SIGN_ONLY, // The sort attribute must be SIGN_ONLY ["attribute1"] = CryptoAction.ENCRYPT_AND_SIGN, ["attribute2"] = CryptoAction.SIGN_ONLY, [":attribute3"] = CryptoAction.DO_NOTHING };
ステップ 3: 署名から除外する属性を定義する

次の例では、すべての DO_NOTHING 属性が個別のプレフィックス「:」を共有し、そのプレフィックスを使用して、許可される署名なし属性を定義すると想定しています。クライアントは、「:」というプレフィックスが付いた属性名は署名から除外されると想定します。詳細については、「Allowed unsigned attributes」を参照してください。

String unsignAttrPrefix = ":";
ステップ 4: DynamoDbItemEncryptor 設定を定義する

次の例では、DynamoDbItemEncryptor の設定を定義します。

この例では、DynamoDB テーブル名を論理テーブル名として指定します。最初に暗号化設定を定義する際に、DynamoDB テーブル名を論理テーブル名として指定することを強くお勧めします。詳細については、「Database Encryption SDK for AWS DynamoDB の暗号化設定」を参照してください。

var config = new DynamoDbItemEncryptorConfig { LogicalTableName = ddbTableName, PartitionKeyName = "partition_key", SortKeyName = "sort_key", AttributeActionsOnEncrypt = attributeActionsOnEncrypt, Keyring = kmsKeyring, AllowedUnsignedAttributePrefix = unsignAttrPrefix };
ステップ 5: DynamoDbItemEncryptor を作成する

次の例では、ステップ 4config を使用して新しい DynamoDbItemEncryptor を作成します。

var itemEncryptor = new DynamoDbItemEncryptor(config);
ステップ 6: テーブル項目を直接暗号化して署名する

次の例では、DynamoDbItemEncryptor を使用して項目を直接暗号化し、署名します。DynamoDbItemEncryptor は項目を DynamoDB テーブルに配置しません。

var originalItem = new Dictionary<String, AttributeValue> { ["partition_key"] = new AttributeValue("ItemEncryptDecryptExample"), ["sort_key"] = new AttributeValue { N = "0" }, ["attribute1"] = new AttributeValue("encrypt and sign me!"), ["attribute2"] = new AttributeValue("sign me!"), [":attribute3"] = new AttributeValue("ignore me!") }; var encryptedItem = itemEncryptor.EncryptItem( new EncryptItemInput { PlaintextItem = originalItem } ).EncryptedItem;