キーストアアクションを設定する - AWS Encryption SDK

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

キーストアアクションを設定する

キーストアアクションは、ユーザーが実行できるオペレーションと、 AWS KMS その階層キーリングがキーストアに許可リストされている KMS キーをどのように使用するかを決定します。は、次のキーストアアクション設定 AWS Encryption SDK をサポートしています。

静的

キーストアを静的に設定すると、キーストアは、キーストアアクションを設定するkmsConfigurationときに で指定した KMS キー ARN に関連付けられた KMS キーのみを使用できます。ブランチキーの作成、バージョニング、または取得時に別の KMS キー ARN が発生した場合、例外がスローされます。

でマルチリージョン KMS キーを指定できますがkmsConfiguration、リージョンを含むキーの ARN 全体が KMS キーから派生したブランチキーに保持されます。別のリージョンでキーを指定することはできません。値を一致させるには、まったく同じマルチリージョンキーを指定する必要があります。

キーストアアクションを静的に設定すると、使用オペレーション (GetActiveBranchKey、、GetBeaconKey) と管理オペレーション ( GetBranchKeyVersionCreateKey および ) を実行できますVersionKeyCreateKeyは、キーストアの許可リストに新しい KMS キー ARN を追加できる特権オペレーションです。この KMS キーは、新しいアクティブなブランチキーを作成できます。KMS キーがキーストアに追加されると、削除できないため、このオペレーションへのアクセスを制限することをお勧めします。

発見

検出用にキーストアアクションを設定すると、キーストアはキーストアに許可リストされている任意の AWS KMS key ARN を使用できます。ただし、マルチリージョン KMS キーが検出され、キーの ARN のリージョンが使用されている AWS KMS クライアントのリージョンと一致しない場合、例外がスローされます。

検出用にキーストアを設定する場合、 CreateKeyや などの管理オペレーションを実行することはできませんVersionKey。暗号化、復号、署名、検証オペレーションを有効にする使用オペレーションのみを実行できます。詳細については、「最小特権のアクセス許可の実装」を参照してください。

キーストアアクションを設定する

キーストアアクションを設定する前に、次の前提条件が満たされていることを確認してください。

  • 実行する必要があるオペレーションを決定します。詳細については、「最小特権のアクセス許可の実装」を参照してください。

  • 論理キーストア名を選択する

    DynamoDB テーブル名と論理キーストア名の間には one-to-one のマッピングが必要です。論理キーストア名は、DynamoDB の復元オペレーションを簡素化するために、テーブルに保存されているすべてのデータに暗号でバインドされます。最初のユーザーが最初に定義した後は変更できません。キーストアアクションでは、常に同じ論理キーストア名を指定する必要があります。詳細については、「logical key store name」を参照してください。

次の例では、キーストアアクションを静的に設定します。キーストアとして機能する DynamoDB テーブルの名前、キーストアの論理名、対称暗号化 KMS キーを識別する KMS キー ARN を指定する必要があります。

注記

キーストアサービスを静的に設定するときは、指定した KMS キー ARN を慎重に検討してください。CreateKey オペレーションは、ブランチキーストアの許可リストに KMS キー ARN を追加します。KMS キーがブランチキーストアに追加されると、削除することはできません。

Java
final KeyStore keystore = KeyStore.builder().KeyStoreConfig( KeyStoreConfig.builder() .ddbClient(DynamoDbClient.create()) .ddbTableName(keyStoreName) .logicalKeyStoreName(logicalKeyStoreName) .kmsClient(KmsClient.create()) .kmsConfiguration(KMSConfiguration.builder() .kmsKeyArn(kmsKeyArn) .build()) .build()).build();
C# / .NET
var kmsConfig = new KMSConfiguration { KmsKeyArn = kmsKeyArn }; var keystoreConfig = new KeyStoreConfig { KmsClient = new AmazonKeyManagementServiceClient(), KmsConfiguration = kmsConfig, DdbTableName = keyStoreName, DdbClient = new AmazonDynamoDBClient(), LogicalKeyStoreName = logicalKeyStoreName }; var keystore = new KeyStore(keystoreConfig);
Python
keystore: KeyStore = KeyStore( config=KeyStoreConfig( ddb_client=ddb_client, ddb_table_name=key_store_name, logical_key_store_name=logical_key_store_name, kms_client=kms_client, kms_configuration=KMSConfigurationKmsKeyArn( value=kms_key_id ), ) )
Rust
let sdk_config = aws_config::load_defaults(aws_config::BehaviorVersion::latest()).await; let key_store_config = KeyStoreConfig::builder() .kms_client(aws_sdk_kms::Client::new(&sdk_config)) .ddb_client(aws_sdk_dynamodb::Client::new(&sdk_config)) .ddb_table_name(key_store_name) .logical_key_store_name(logical_key_store_name) .kms_configuration(KmsConfiguration::KmsKeyArn(kms_key_arn.to_string())) .build()?; let keystore = keystore_client::Client::from_conf(key_store_config)?;
Go
import ( keystore "github.com/aws/aws-cryptographic-material-providers-library/mpl/awscryptographykeystoresmithygenerated" keystoretypes "github.com/aws/aws-cryptographic-material-providers-library/mpl/awscryptographykeystoresmithygeneratedtypes" ) kmsConfig := keystoretypes.KMSConfigurationMemberkmsKeyArn{ Value: kmsKeyArn, } keyStore, err := keystore.NewClient(keystoretypes.KeyStoreConfig{ DdbTableName: keyStoreTableName, KmsConfiguration: &kmsConfig, LogicalKeyStoreName: logicalKeyStoreName, DdbClient: ddbClient, KmsClient: kmsClient, }) if err != nil { panic(err) }

次の の例では、検出用のキーストアアクションを設定します。キーストアとして機能する DynamoDB テーブルの名前と論理キーストア名を指定する必要があります。

Java
final KeyStore keystore = KeyStore.builder().KeyStoreConfig( KeyStoreConfig.builder() .ddbClient(DynamoDbClient.create()) .ddbTableName(keyStoreName) .logicalKeyStoreName(logicalKeyStoreName) .kmsClient(KmsClient.create()) .kmsConfiguration(KMSConfiguration.builder() .discovery(Discovery.builder().build()) .build()) .build()).build();
C# / .NET
var keystoreConfig = new KeyStoreConfig { KmsClient = new AmazonKeyManagementServiceClient(), KmsConfiguration = new KMSConfiguration {Discovery = new Discovery()}, DdbTableName = keyStoreName, DdbClient = new AmazonDynamoDBClient(), LogicalKeyStoreName = logicalKeyStoreName }; var keystore = new KeyStore(keystoreConfig);
Python
keystore: KeyStore = KeyStore( config=KeyStoreConfig( ddb_client=ddb_client, ddb_table_name=key_store_name, logical_key_store_name=logical_key_store_name, kms_client=kms_client, kms_configuration=KMSConfigurationDiscovery( value=Discovery() ), ) )
Rust
let key_store_config = KeyStoreConfig::builder() .kms_client(kms_client) .ddb_client(ddb_client) .ddb_table_name(key_store_name) .logical_key_store_name(logical_key_store_name) .kms_configuration(KmsConfiguration::Discovery(Discovery::builder().build()?)) .build()?;
Go
import ( keystore "github.com/aws/aws-cryptographic-material-providers-library/mpl/awscryptographykeystoresmithygenerated" keystoretypes "github.com/aws/aws-cryptographic-material-providers-library/mpl/awscryptographykeystoresmithygeneratedtypes" ) kmsConfig := keystoretypes.KMSConfigurationMemberdiscovery{} keyStore, err := keystore.NewClient(keystoretypes.KeyStoreConfig{ DdbTableName: keyStoreName, KmsConfiguration: &kmsConfig, LogicalKeyStoreName: logicalKeyStoreName, DdbClient: ddbClient, KmsClient: kmsClient, }) if err != nil { panic(err) }