Konfigurasikan tindakan penyimpanan kunci - AWS Encryption SDK

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Konfigurasikan tindakan penyimpanan kunci

Tindakan penyimpanan kunci menentukan operasi apa yang dapat dilakukan pengguna Anda dan bagaimana keyring AWS KMS Hierarkis mereka menggunakan kunci KMS yang diizinkan terdaftar di toko kunci Anda. AWS Encryption SDK Mendukung konfigurasi tindakan penyimpanan kunci berikut.

Statis

Saat Anda mengonfigurasi penyimpanan kunci secara statis, toko kunci hanya dapat menggunakan kunci KMS yang terkait dengan ARN kunci KMS yang Anda berikan kmsConfiguration saat Anda mengonfigurasi tindakan penyimpanan kunci Anda. Pengecualian dilemparkan jika ARN kunci KMS yang berbeda ditemukan saat membuat, membuat versi, atau mendapatkan kunci cabang.

Anda dapat menentukan kunci KMS Multi-wilayah di AndakmsConfiguration, tetapi seluruh ARN kunci, termasuk wilayah, disimpan di kunci cabang yang berasal dari kunci KMS. Anda tidak dapat menentukan kunci di wilayah yang berbeda, Anda harus memberikan kunci multi-wilayah yang sama persis agar nilainya cocok.

Saat Anda mengonfigurasi tindakan penyimpanan kunci secara statis, Anda dapat melakukan operasi penggunaan (GetActiveBranchKey,GetBranchKeyVersion,GetBeaconKey) dan operasi administratif (CreateKeydanVersionKey). CreateKeyadalah operasi istimewa yang dapat menambahkan ARN kunci KMS baru ke daftar izin toko kunci Anda. Kunci KMS ini dapat membuat kunci cabang aktif baru. Kami menyarankan untuk membatasi akses ke operasi ini karena setelah kunci KMS ditambahkan ke toko kunci, itu tidak dapat dihapus.

Penemuan

Saat Anda mengonfigurasi tindakan penyimpanan kunci untuk penemuan, toko kunci dapat menggunakan AWS KMS key ARN apa pun yang diizinkan terdaftar di toko kunci Anda. Namun, pengecualian dilemparkan ketika kunci KMS Multi-wilayah ditemui dan wilayah di ARN kunci tidak cocok dengan wilayah klien yang digunakan. AWS KMS

Ketika Anda mengonfigurasi penyimpanan kunci untuk penemuan, Anda tidak dapat melakukan operasi administratif, seperti CreateKey danVersionKey. Anda hanya dapat melakukan operasi penggunaan yang mengaktifkan enkripsi, mendekripsi, menandatangani, dan memverifikasi operasi. Untuk informasi selengkapnya, lihat Menerapkan izin yang paling tidak memiliki hak istimewa.

Konfigurasikan tindakan penyimpanan kunci Anda

Sebelum Anda mengonfigurasi tindakan penyimpanan kunci Anda, pastikan prasyarat berikut terpenuhi.

  • Tentukan operasi apa yang perlu Anda lakukan. Untuk informasi selengkapnya, lihat Menerapkan izin yang paling tidak memiliki hak istimewa.

  • Pilih nama toko kunci logis

    Harus ada one-to-one pemetaan antara nama tabel DynamoDB dan nama toko kunci logis. Nama penyimpanan kunci logis terikat secara kriptografis ke semua data yang disimpan dalam tabel untuk menyederhanakan operasi pemulihan DynamoDB, tidak dapat diubah setelah awalnya ditentukan oleh pengguna pertama. Anda harus selalu menentukan nama penyimpanan kunci logis yang sama dalam tindakan penyimpanan kunci Anda. Untuk informasi selengkapnya, lihat logical key store name.

Contoh berikut secara statis mengkonfigurasi tindakan penyimpanan kunci. Anda harus menentukan nama tabel DynamoDB yang berfungsi sebagai penyimpanan kunci Anda, nama logis untuk penyimpanan kunci, dan ARN kunci KMS yang mengidentifikasi kunci KMS enkripsi simetris.

catatan

Pertimbangkan dengan cermat ARN kunci KMS yang Anda tentukan saat mengonfigurasi layanan penyimpanan kunci Anda secara statis. CreateKeyOperasi menambahkan ARN kunci KMS ke daftar izin toko kunci cabang Anda. Setelah kunci KMS ditambahkan ke toko kunci cabang, itu tidak dapat dihapus.

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) }

Contoh berikut mengonfigurasi tindakan penyimpanan kunci untuk penemuan. Anda harus menentukan nama tabel DynamoDB yang berfungsi sebagai toko kunci Anda dan nama toko kunci logis.

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) }