Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
AWS KMS gantungan kunci
AWS KMS Keyring menggunakan enkripsi simetris AWS KMS keysuntuk menghasilkan, mengenkripsi, dan mendekripsi kunci data. AWS Key Management Service
(AWS KMS) melindungi KMS kunci Anda dan melakukan operasi kriptografi dalam FIPS batas. Kami menyarankan Anda menggunakan AWS KMS keyring, atau keyring dengan properti keamanan serupa, bila memungkinkan.
Anda dapat menggunakan kunci AWS KMS Multi-region di AWS KMS keyring atau penyedia kunci master yang dimulai pada versi 2.3. x dari AWS Encryption SDK dan versi 3.0. x dari AWS EnkripsiCLI. Untuk detail dan contoh penggunaan multi-Region-aware simbol baru, lihatMenggunakan Multi-region AWS KMS keys. Untuk informasi tentang kunci Multi-region, lihat Menggunakan kunci Multi-region di Panduan AWS Key Management Service Pengembang.
Versi 4. x dari AWS Encryption SDK untuk. NETdan versi 3. x AWS Encryption SDK for Java adalah satu-satunya implementasi bahasa pemrograman yang mendukung AWS KMS keyrings yang menggunakan asimetris. RSA AWS KMS keys
Jika Anda mencoba menyertakan KMS kunci asimetris dalam keyring enkripsi dalam implementasi bahasa lain, panggilan enkripsi gagal. Jika Anda memasukkannya ke dalam keyring dekripsi, itu diabaikan.
Semua penyebutan KMSgantungan kunci dalam AWS Encryption SDK mengacu pada gantungan kunci. AWS KMS
AWS KMS gantungan kunci dapat mencakup dua jenis kunci pembungkus:
-
Kunci generator: Menghasilkan kunci data teks biasa dan mengenkripsinya. Sebuah keyring yang mengenkripsi data harus memiliki satu kunci generator.
-
Kunci tambahan: Mengenkripsi kunci data teks biasa yang dihasilkan oleh kunci generator. AWS KMS keyrings dapat memiliki nol atau lebih tombol tambahan.
Saat mengenkripsi, AWS KMS keyring yang Anda gunakan harus memiliki kunci generator. Saat mendekripsi, kunci generator adalah opsional, dan perbedaan antara kunci generator dan kunci tambahan diabaikan.
Ketika keyring AWS KMS enkripsi hanya memiliki satu AWS KMS kunci, kunci itu digunakan untuk menghasilkan dan mengenkripsi kunci data.
Seperti semua gantungan kunci, AWS KMS gantungan kunci dapat digunakan secara independen atau dalam multi-keyring dengan gantungan kunci lain dari jenis yang sama atau berbeda.
Izin yang diperlukan untuk keyrings AWS KMS
AWS Encryption SDK Itu tidak memerlukan Akun AWS dan itu tidak tergantung pada apa pun Layanan AWS. Namun, untuk menggunakan AWS KMS keyring, Anda memerlukan izin minimum Akun AWS dan berikut pada keyring Anda. AWS KMS keys
-
Untuk mengenkripsi dengan AWS KMS keyring, Anda memerlukan GenerateDataKey izin kms: pada kunci generator. Anda memerlukan izin KMS: Encrypt pada semua kunci tambahan di keyring. AWS KMS
-
Untuk mendekripsi dengan AWS KMS keyring, Anda memerlukan izin KMS: Decrypt pada setidaknya satu kunci di keyring. AWS KMS
-
Untuk mengenkripsi dengan multi-keyring yang terdiri dari AWS KMS keyrings, Anda memerlukan GenerateDataKey izin kms: pada kunci generator di keyring generator. Anda memerlukan izin KMS: Encrypt pada semua kunci lain di semua keyrings lainnya. AWS KMS
Untuk informasi selengkapnya tentang izin AWS KMS keys, lihat Otentikasi dan kontrol akses di Panduan AWS Key Management Service Pengembang.
Mengidentifikasi AWS KMS keys dalam AWS KMS
keyring
AWS KMS Keyring dapat mencakup satu atau lebih AWS KMS keys. Untuk menentukan AWS KMS key dalam AWS KMS keyring, gunakan pengenal AWS KMS kunci yang didukung. Pengidentifikasi kunci yang dapat Anda gunakan untuk mengidentifikasi AWS KMS key dalam keyring bervariasi dengan operasi dan implementasi bahasa. Untuk detail tentang pengidentifikasi kunci AWS KMS key, lihat Pengidentifikasi Kunci di Panduan AWS Key Management Service Pengembang.
Sebagai praktik terbaik, gunakan pengenal kunci paling spesifik yang praktis untuk tugas Anda.
-
Dalam keyring enkripsi untuk AWS Encryption SDK for C, Anda dapat menggunakan kunci ARN atau alias ARN untuk mengidentifikasi KMS kunci. Dalam semua implementasi bahasa lainnya, Anda dapat menggunakan ID kunci, kunci, nama aliasARN, atau alias ARN untuk mengenkripsi data.
-
Dalam keyring dekripsi, Anda harus menggunakan kunci ARN untuk mengidentifikasi. AWS KMS keys Persyaratan ini berlaku untuk semua implementasi bahasa dari. AWS Encryption SDK Untuk detailnya, lihat Memilih tombol pembungkus.
-
Dalam keyring yang digunakan untuk enkripsi dan dekripsi, Anda harus menggunakan kunci ARN untuk mengidentifikasi. AWS KMS keys Persyaratan ini berlaku untuk semua implementasi bahasa dari. AWS Encryption SDK
Jika Anda menentukan nama alias atau alias ARN untuk KMS kunci dalam keyring enkripsi, operasi enkripsi menyimpan kunci yang ARN saat ini terkait dengan alias dalam metadata kunci data terenkripsi. Itu tidak menyimpan alias. Perubahan pada alias tidak memengaruhi kunci yang digunakan untuk mendekripsi KMS kunci data terenkripsi Anda.
Membuat AWS KMS keyring untuk enkripsi
Anda dapat mengonfigurasi setiap AWS KMS keyring dengan satu AWS KMS key atau beberapa AWS KMS keys yang sama atau berbeda Akun AWS dan Wilayah AWS. Kunci enkripsi AWS KMS keys harus simetris (SYMMETRIC_DEFAULT). Anda juga dapat menggunakan kunci multi-region KMS enkripsi simetris. Seperti halnya semua gantungan kunci, Anda dapat menggunakan satu atau lebih AWS KMS gantungan kunci dalam multi-keyring.
Saat Anda membuat AWS KMS keyring untuk mengenkripsi data, Anda harus menentukan kunci generator, AWS KMS key yang digunakan untuk menghasilkan kunci data plaintext dan mengenkripsinya. Kunci data secara matematis tidak terkait dengan kunci. KMS Kemudian, jika Anda memilih, Anda dapat menentukan tambahan AWS KMS keys yang mengenkripsi kunci data plaintext yang sama.
Untuk mendekripsi pesan terenkripsi yang dilindungi oleh keyring ini, keyring yang Anda gunakan harus menyertakan setidaknya satu dari yang AWS KMS keys ditentukan dalam keyring, atau tidak. AWS KMS keys( AWS KMS Gantungan kunci tanpa AWS KMS keys dikenal sebagai gantungan kunci AWS KMS penemuan.)
Dalam implementasi AWS Encryption SDK bahasa selain AWS Encryption SDK for C, semua kunci pembungkus dalam keyring enkripsi atau multi-keyring harus dapat mengenkripsi kunci data. Jika ada kunci pembungkus gagal untuk mengenkripsi, metode enkripsi gagal. Akibatnya, penelepon harus memiliki izin yang diperlukan untuk semua kunci di keyring. Jika Anda menggunakan keyring penemuan untuk mengenkripsi data, sendiri atau dalam multi-keyring, operasi enkripsi gagal. Pengecualiannya adalah AWS Encryption SDK for C, di mana operasi enkripsi mengabaikan keyring penemuan standar, tetapi gagal jika Anda menentukan keyring penemuan Multi-wilayah, sendiri atau dalam multi-keyring.
Contoh berikut membuat AWS KMS keyring dengan satu kunci generator dan satu kunci tambahan. Contoh-contoh ini menggunakan kunci ARNs untuk mengidentifikasi KMS kunci. Ini adalah praktik terbaik untuk AWS KMS gantungan kunci yang digunakan untuk enkripsi, dan persyaratan untuk AWS KMS gantungan kunci yang digunakan untuk dekripsi. Untuk detailnya, lihat Mengidentifikasi AWS KMS keys dalam AWS KMS
keyring.
- C
Untuk mengidentifikasi AWS KMS key dalam keyring enkripsi di AWS Encryption SDK for C, tentukan kunci ARN atau alias ARN. Dalam keyring dekripsi, Anda harus menggunakan kunci. ARN Untuk detailnya, lihat Mengidentifikasi AWS KMS keys dalam AWS KMS
keyring.
Untuk contoh lengkap, lihat string.cpp.
const char * generator_key = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
"
const char * additional_key = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321
"
struct aws_cryptosdk_keyring *kms_encrypt_keyring =
Aws::Cryptosdk::KmsKeyring::Builder().Build(generator_key,{additional_key});
- C# / .NET
-
Untuk membuat AWS KMS keyring dengan satu atau beberapa AWS KMS tombol di AWS Encryption SDK for. NET, buat multi-keyring. AWS Encryption SDK Untuk. NETtermasuk multi-keyring hanya untuk AWS KMS kunci.
Saat Anda menentukan AWS KMS key untuk keyring enkripsi di AWS Encryption SDK for. NET, Anda dapat menggunakan pengidentifikasi kunci yang valid: ID kunci, kunci, nama alias ARN, atau alias. ARN Untuk bantuan mengidentifikasi AWS KMS keys dalam AWS KMS gantungan kunci, lihatMengidentifikasi AWS KMS keys dalam AWS KMS
keyring.
Contoh berikut menggunakan versi 4. x dari AWS Encryption SDK untuk. NETuntuk membuat AWS KMS keyring dengan kunci generator dan kunci tambahan. Untuk contoh lengkapnya, lihat AwsKmsMultiKeyringExample.cs.
// Instantiate the AWS Encryption SDK and material provider
var mpl = new MaterialProviders(new MaterialProvidersConfig());
var esdk = new ESDK(new AwsEncryptionSdkConfig());
string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
";
List<string> additionalKey = new List<string> { "alias/exampleAlias
" };
// Instantiate the keyring input object
var kmsEncryptKeyringInput = new CreateAwsKmsMultiKeyringInput
{
Generator = generatorKey,
KmsKeyIds = additionalKey
};
var kmsEncryptKeyring = materialProviders.CreateAwsKmsMultiKeyring(kmsEncryptKeyringInput);
- JavaScript Browser
Saat Anda menentukan AWS KMS key untuk gantungan kunci enkripsi di AWS Encryption SDK for JavaScript, Anda dapat menggunakan pengenal kunci yang valid: ID kunci, kunci, nama aliasARN, atau alias. ARN Untuk bantuan mengidentifikasi AWS KMS keys dalam AWS KMS gantungan kunci, lihatMengidentifikasi AWS KMS keys dalam AWS KMS
keyring.
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
Untuk contoh lengkap, lihat kms_simple.ts di repositori di. AWS Encryption SDK for JavaScript GitHub
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const clientProvider = getClient(KMS, { credentials })
const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
'
const additionalKey = 'alias/exampleAlias
'
const keyring = new KmsKeyringBrowser({
clientProvider,
generatorKeyId,
keyIds: [additionalKey]
})
- JavaScript Node.js
Saat Anda menentukan AWS KMS key untuk gantungan kunci enkripsi di AWS Encryption SDK for JavaScript, Anda dapat menggunakan pengenal kunci yang valid: ID kunci, kunci, nama aliasARN, atau alias. ARN Untuk bantuan mengidentifikasi AWS KMS keys dalam AWS KMS gantungan kunci, lihatMengidentifikasi AWS KMS keys dalam AWS KMS
keyring.
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
Untuk contoh lengkap, lihat kms_simple.ts di repositori di. AWS Encryption SDK for JavaScript GitHub
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const generatorKeyId = 'arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
'
const additionalKey = 'alias/exampleAlias
'
const keyring = new KmsKeyringNode({
generatorKeyId,
keyIds: [additionalKey]
})
- Java
-
Untuk membuat AWS KMS keyring dengan satu atau beberapa AWS KMS tombol di AWS Encryption SDK for Java, buat multi-keyring. AWS Encryption SDK for Java
Termasuk multi-keyring hanya untuk AWS KMS kunci.
Saat Anda menentukan AWS KMS key untuk gantungan kunci enkripsi di AWS Encryption SDK for Java, Anda dapat menggunakan pengenal kunci yang valid: ID kunci, kunci, nama aliasARN, atau alias. ARN Untuk bantuan mengidentifikasi AWS KMS keys dalam AWS KMS gantungan kunci, lihatMengidentifikasi AWS KMS keys dalam AWS KMS
keyring.
Untuk contoh lengkap, lihat BasicEncryptionKeyringExample.java di AWS Encryption SDK for Java repositori di. GitHub
// Instantiate the AWS Encryption SDK and material providers
final AwsCrypto crypto = AwsCrypto.builder().build();
final MaterialProviders materialProviders = MaterialProviders.builder()
.MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
.build();
String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
";
List<String> additionalKey = Collections.singletonList("alias/exampleAlias
");
// Create the AWS KMS keyring
final CreateAwsKmsMultiKeyringInput keyringInput = CreateAwsKmsMultiKeyringInput.builder()
.generator(generatorKey)
.kmsKeyIds(additionalKey)
.build();
final IKeyring kmsKeyring = matProv.CreateAwsKmsMultiKeyring(keyringInput);
- Python
-
Untuk membuat AWS KMS keyring dengan satu atau beberapa AWS KMS tombol di AWS Encryption SDK for Python, buat multi-keyring. AWS Encryption SDK for Python Termasuk multi-keyring hanya untuk AWS KMS kunci. Sebagai contoh, lihat aws_kms_multi_keyring_example.py di AWS Encryption SDK for Python
repositori di. GitHub
Saat Anda menentukan AWS KMS key untuk gantungan kunci enkripsi di AWS Encryption SDK for Python, Anda dapat menggunakan pengenal kunci yang valid: ID kunci, kunci, nama aliasARN, atau alias. ARN Untuk bantuan mengidentifikasi AWS KMS keys dalam AWS KMS gantungan kunci, lihatMengidentifikasi AWS KMS keys dalam AWS KMS
keyring.
Contoh berikut membuat instance AWS Encryption SDK klien dengan kebijakan komitmen default,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Untuk contoh lengkap, lihat aws_kms_keyring_example.py di AWS Encryption SDK for Python
repositori di. GitHub
# 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(
generator=arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
,
kms_key_ids=additionalKey
)
kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring(
input=keyring_input
)
Membuat AWS KMS keyring untuk dekripsi
Anda juga menentukan AWS KMS keyring saat mendekripsi pesan terenkripsi yang dikembalikan. AWS Encryption SDK Jika keyring dekripsi menentukan AWS KMS keys, hanya AWS Encryption SDK akan menggunakan kunci pembungkus untuk mendekripsi kunci data terenkripsi dalam pesan terenkripsi. (Anda juga dapat menggunakan keyring AWS KMS penemuan, yang tidak menentukan apa pun AWS KMS keys.)
Saat mendekripsi, AWS Encryption SDK pencarian AWS KMS keyring untuk AWS KMS key yang dapat mendekripsi salah satu kunci data terenkripsi. Secara khusus, AWS Encryption SDK menggunakan pola berikut untuk setiap kunci data terenkripsi dalam pesan terenkripsi.
-
AWS Encryption SDK Mendapatkan kunci ARN AWS KMS key yang mengenkripsi kunci data dari metadata pesan terenkripsi.
-
AWS Encryption SDK Pencarian keyring dekripsi untuk kunci AWS KMS key
dengan kunci yang cocok. ARN
-
Jika menemukan kunci AWS KMS key yang cocok ARN di keyring, AWS Encryption SDK meminta AWS KMS untuk menggunakan kunci untuk mendekripsi KMS kunci data terenkripsi.
-
Jika tidak, ia melompat ke kunci data terenkripsi berikutnya, jika ada.
AWS Encryption SDK Tidak pernah mencoba untuk mendekripsi kunci data terenkripsi kecuali kunci yang dienkripsi kunci ARN data tersebut AWS KMS key disertakan dalam keyring dekripsi. Jika keyring dekripsi tidak menyertakan ARNs salah satu kunci data AWS KMS keys yang dienkripsi, panggilan dekripsi AWS Encryption SDK gagal tanpa pernah menelepon. AWS KMS
Dimulai pada versi 1.7. x, saat mendekripsi kunci data terenkripsi, AWS Encryption SDK selalu melewati kunci ARN AWS KMS key ke KeyId
parameter operasi Dekripsi. AWS KMS Mengidentifikasi AWS KMS key saat mendekripsi adalah praktik AWS KMS terbaik yang memastikan bahwa Anda mendekripsi kunci data terenkripsi dengan kunci pembungkus yang ingin Anda gunakan.
Panggilan dekripsi dengan AWS KMS keyring berhasil ketika setidaknya satu AWS KMS key
di keyring dekripsi dapat mendekripsi salah satu kunci data terenkripsi dalam pesan terenkripsi. Selain itu, penelepon harus memiliki kms:Decrypt
izin untuk itu AWS KMS key. Perilaku ini memungkinkan Anda mengenkripsi data AWS KMS keys dalam beberapa akun Wilayah AWS dan akun, tetapi memberikan keyring dekripsi yang lebih terbatas yang disesuaikan dengan akun, Wilayah, pengguna, grup, atau peran tertentu.
Ketika Anda menentukan AWS KMS key dalam keyring dekripsi, Anda harus menggunakan kuncinya. ARN Kalau tidak, AWS KMS key tidak dikenali. Untuk bantuan menemukan kunciARN, lihat Menemukan ID Kunci dan ARN di Panduan AWS Key Management Service Pengembang.
Jika Anda menggunakan kembali keyring enkripsi untuk mendekripsi, pastikan bahwa keyring di AWS KMS keys dalam diidentifikasi oleh kuncinya. ARNs
Misalnya, AWS KMS keyring berikut hanya mencakup kunci tambahan yang digunakan dalam keyring enkripsi. Namun, alih-alih merujuk ke kunci tambahan dengan aliasnyaalias/exampleAlias
, contoh menggunakan kunci kunci tambahan seperti yang dipersyaratkan oleh ARN panggilan dekripsi.
Anda dapat menggunakan keyring ini untuk mendekripsi pesan yang dienkripsi di bawah kunci generator dan kunci tambahan, asalkan Anda memiliki izin untuk menggunakan kunci tambahan untuk mendekripsi data.
- C
-
const char * additional_key = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321
"
struct aws_cryptosdk_keyring *kms_decrypt_keyring =
Aws::Cryptosdk::KmsKeyring::Builder().Build(additional_key);
- C# / .NET
-
Karena keyring dekripsi ini hanya mencakup satu AWS KMS kunci, contoh menggunakan CreateAwsKmsKeyring()
metode dengan instance objeknya. CreateAwsKmsKeyringInput
Untuk membuat AWS KMS keyring dengan satu AWS KMS tombol, Anda dapat menggunakan keyring satu tombol atau multi-tombol. Untuk detailnya, lihat Mengenkripsi data di for. AWS Encryption SDK NET. Contoh berikut menggunakan versi 4. x dari AWS Encryption SDK untuk. NETuntuk membuat AWS KMS keyring untuk dekripsi.
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
string additionalKey = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321
";
// Instantiate a KMS keyring for one AWS KMS key.
var kmsDecryptKeyringInput = new CreateAwsKmsKeyringInput
{
KmsClient = new AmazonKeyManagementServiceClient(),
KmsKeyId = additionalKey
};
var kmsDecryptKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
- JavaScript Browser
-
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const clientProvider = getClient(KMS, { credentials })
const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321
'
const keyring = new KmsKeyringBrowser({ clientProvider, keyIds: [additionalKey] })
- JavaScript Node.js
-
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const additionalKey = 'arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321
'
const keyring = new KmsKeyringNode({ keyIds: [additionalKey] })
- Java
-
Karena keyring dekripsi ini hanya mencakup satu AWS KMS kunci, contoh menggunakan CreateAwsKmsKeyring()
metode dengan instance objeknya. CreateAwsKmsKeyringInput
Untuk membuat AWS KMS keyring dengan satu AWS KMS tombol, Anda dapat menggunakan keyring satu tombol atau multi-tombol.
// Instantiate the AWS Encryption SDK and material providers
final AwsCrypto crypto = AwsCrypto.builder().build();
final MaterialProviders materialProviders = MaterialProviders.builder()
.MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
.build();
String additionalKey = "arn:aws:kms:us-west-2:111122223333:key/0987dcba-09fe-87dc-65ba-ab0987654321
";
// Create a AwsKmsKeyring
CreateAwsKmsKeyringInput kmsDecryptKeyringInput = CreateAwsKmsKeyringInput.builder()
.generator(additionalKey)
.kmsClient(KmsClient.create())
.build();
IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
- Python
-
Contoh berikut membuat instance AWS Encryption SDK klien dengan kebijakan komitmen default,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Untuk contoh lengkap, lihat aws_kms_keyring_example.py di AWS Encryption SDK for Python
repositori di. GitHub
# 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")
# Instantiate the material providers
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create the AWS KMS keyring
keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput(
generator=additionalKey
,
kms_client=kms_client
)
kms_keyring: IKeyring = mat_prov.create_aws_kms_keyring(
input=keyring_input
)
Anda juga dapat menggunakan AWS KMS keyring yang menentukan kunci generator untuk mendekripsi, seperti yang berikut. Saat mendekripsi, AWS Encryption SDK mengabaikan perbedaan antara kunci generator dan kunci tambahan. Hal ini dapat menggunakan salah satu yang ditentukan AWS KMS keys untuk mendekripsi kunci data terenkripsi. Panggilan untuk AWS KMS berhasil hanya ketika pemanggil memiliki izin untuk menggunakannya untuk mendekripsi AWS KMS key data.
- C
-
struct aws_cryptosdk_keyring *kms_decrypt_keyring =
Aws::Cryptosdk::KmsKeyring::Builder().Build(generator_key, {additional_key, other_key});
- C# / .NET
-
Contoh berikut menggunakan versi 4. x dari AWS Encryption SDK untuk. NET.
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
string generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
";
// Instantiate a KMS keyring for one AWS KMS key.
var kmsDecryptKeyringInput = new CreateAwsKmsKeyringInput
{
KmsClient = new AmazonKeyManagementServiceClient(),
KmsKeyId = generatorKey
};
var kmsDecryptKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
- JavaScript Browser
-
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const clientProvider = getClient(KMS, { credentials })
const keyring = new KmsKeyringBrowser({
clientProvider,
generatorKeyId,
keyIds: [additionalKey, otherKey]
})
- JavaScript Node.js
-
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const keyring = new KmsKeyringNode({
generatorKeyId,
keyIds: [additionalKey, otherKey]
})
- Java
-
// Instantiate the AWS Encryption SDK and material providers
final AwsCrypto crypto = AwsCrypto.builder().build();
final MaterialProviders materialProviders = MaterialProviders.builder()
.MaterialProvidersConfig(MaterialProvidersConfig.builder().build())
.build();
String generatorKey = "arn:aws:kms:us-west-2:111122223333:key/1234abcd-12ab-34cd-56ef-1234567890ab
";
// Create a AwsKmsKeyring
CreateAwsKmsKeyringInput kmsDecryptKeyringInput = CreateAwsKmsKeyringInput.builder()
.generator(generatorKey)
.kmsClient(KmsClient.create())
.build();
IKeyring kmsKeyring = materialProviders.CreateAwsKmsKeyring(kmsDecryptKeyringInput);
- Python
-
Contoh berikut membuat instance AWS Encryption SDK klien dengan kebijakan komitmen default,. REQUIRE_ENCRYPT_REQUIRE_DECRYPT
Untuk contoh lengkap, lihat aws_kms_keyring_example.py di AWS Encryption SDK for Python
repositori di. GitHub
# 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")
# Instantiate the material providers library
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create the AWS KMS keyring
keyring_input: CreateAwsKmsKeyringInput = CreateAwsKmsKeyringInput(
generator=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
)
Tidak seperti keyring enkripsi yang menggunakan semua yang ditentukan AWS KMS keys, Anda dapat mendekripsi pesan terenkripsi menggunakan keyring dekripsi yang menyertakan AWS KMS keys yang tidak terkait dengan pesan terenkripsi, dan pemanggil tidak memiliki izin untuk menggunakannya. AWS KMS keys
Jika panggilan dekripsi AWS KMS
gagal, seperti ketika pemanggil tidak memiliki izin yang diperlukan, AWS Encryption SDK hanya melompat ke kunci data terenkripsi berikutnya.
Menggunakan AWS KMS keyring penemuan
Saat mendekripsi, ini adalah praktik terbaik untuk menentukan kunci pembungkus yang dapat digunakan. AWS Encryption SDK Untuk mengikuti praktik terbaik ini, gunakan keyring AWS KMS dekripsi yang membatasi kunci AWS KMS pembungkus ke kunci yang Anda tentukan. Namun, Anda juga dapat membuat keyring AWS KMS penemuan, yaitu AWS KMS keyring yang tidak menentukan kunci pembungkus apa pun.
AWS Encryption SDK Ini menyediakan keyring AWS KMS penemuan standar dan keyring penemuan untuk kunci AWS KMS Multi-wilayah. Untuk informasi tentang menggunakan kunci Multi-wilayah dengan AWS Encryption SDK, lihatMenggunakan Multi-region AWS KMS keys.
Karena tidak menentukan kunci pembungkus apa pun, keyring penemuan tidak dapat mengenkripsi data. Jika Anda menggunakan keyring penemuan untuk mengenkripsi data, sendiri atau dalam multi-keyring, operasi enkripsi gagal. Pengecualiannya adalah AWS Encryption SDK for C, di mana operasi enkripsi mengabaikan keyring penemuan standar, tetapi gagal jika Anda menentukan keyring penemuan Multi-wilayah, sendiri atau dalam multi-keyring.
Saat mendekripsi, keyring penemuan memungkinkan AWS Encryption SDK untuk meminta AWS KMS untuk mendekripsi kunci data terenkripsi apa pun dengan menggunakan yang mengenkripsi itu, terlepas dari siapa AWS KMS key yang memiliki atau memiliki akses ke sana. AWS KMS key Panggilan hanya berhasil ketika penelepon memiliki kms:Decrypt
izin pada. AWS KMS key
Jika Anda menyertakan keyring AWS KMS penemuan dalam multi-keyring dekripsi, keyring penemuan akan mengesampingkan semua batasan KMS kunci yang ditentukan oleh keyring lain di multi-keyring. Multi-keyring berperilaku seperti keyring yang paling tidak membatasi. Keyring AWS KMS penemuan tidak berpengaruh pada enkripsi saat digunakan sendiri atau dalam multi-keyring.
AWS Encryption SDK Ini menyediakan keyring AWS KMS penemuan untuk kenyamanan. Namun, kami menyarankan Anda menggunakan keyring yang lebih terbatas bila memungkinkan karena alasan berikut.
-
Keaslian — Keyring AWS KMS
penemuan dapat menggunakan apa pun AWS KMS key yang digunakan untuk mengenkripsi kunci data dalam pesan terenkripsi, sehingga penelepon memiliki izin untuk menggunakannya untuk mendekripsi. AWS KMS key Ini mungkin bukan AWS KMS key
yang ingin digunakan penelepon. Misalnya, salah satu kunci data terenkripsi mungkin telah dienkripsi di bawah yang kurang aman AWS KMS key yang dapat digunakan siapa pun.
-
Latensi dan kinerja — Keyring AWS KMS penemuan mungkin terlihat lebih lambat daripada keyring lain karena AWS Encryption SDK mencoba mendekripsi semua kunci data terenkripsi, termasuk yang dienkripsi oleh AWS KMS keys di lain Akun AWS dan Wilayah, dan AWS KMS keys penelepon tidak memiliki izin untuk digunakan untuk dekripsi.
Jika Anda menggunakan keyring penemuan, kami sarankan Anda menggunakan filter penemuan untuk membatasi KMS kunci yang dapat digunakan untuk kunci yang ditentukan Akun AWS dan partisi. Filter penemuan didukung dalam versi 1.7. x dan kemudian AWS Encryption SDK. Untuk bantuan menemukan ID akun dan partisi Anda, lihat Akun AWS
Pengenal dan ARNformat Anda di. Referensi Umum AWS
Kode berikut membuat instance keyring penemuan dengan filter AWS KMS penemuan yang membatasi kunci yang AWS Encryption SDK dapat digunakan untuk yang ada di KMS aws
partisi dan akun contoh 111122223333.
Sebelum menggunakan kode ini, ganti contoh Akun AWS dan nilai partisi dengan nilai yang valid untuk Anda Akun AWS dan partisi. Jika KMS kunci Anda berada di Wilayah China, gunakan nilai aws-cn
partisi. Jika KMS kunci Anda masuk AWS GovCloud (US) Regions, gunakan nilai aws-us-gov
partisi. Untuk yang lainnya Wilayah AWS, gunakan nilai aws
partisi.
- C
-
Untuk contoh lengkap, lihat: kms_discovery.cpp.
std::shared_ptr<KmsKeyring::> discovery_filter(
KmsKeyring::DiscoveryFilter::Builder("aws
")
.AddAccount("111122223333
")
.Build());
struct aws_cryptosdk_keyring *kms_discovery_keyring = Aws::Cryptosdk::KmsKeyring::Builder()
.BuildDiscovery(discovery_filter));
- C# / .NET
-
Contoh berikut menggunakan versi 4. x dari AWS Encryption SDK untuk. NET.
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
List<string> account = new List<string> { "111122223333
" };
// In a discovery keyring, you specify an AWS KMS client and a discovery filter,
// but not a AWS KMS key
var kmsDiscoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput
{
KmsClient = new AmazonKeyManagementServiceClient(),
DiscoveryFilter = new DiscoveryFilter()
{
AccountIds = account,
Partition = "aws"
}
};
var kmsDiscoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(kmsDiscoveryKeyringInput);
- JavaScript Browser
-
Dalam JavaScript, Anda harus secara eksplisit menentukan properti penemuan.
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const clientProvider = getClient(KMS, { credentials })
const discovery = true
const keyring = new KmsKeyringBrowser(clientProvider, {
discovery,
discoveryFilter: { accountIDs: [111122223333
], partition: 'aws
' }
})
- JavaScript Node.js
-
Dalam JavaScript, Anda harus secara eksplisit menentukan properti penemuan.
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const discovery = true
const keyring = new KmsKeyringNode({
discovery,
discoveryFilter: { accountIDs: ['111122223333
'], partition: '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);
- Python
-
# Instantiate the AWS Encryption SDK
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=aws_region)
# 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
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create the AWS KMS discovery keyring
discovery_keyring_input: CreateAwsKmsDiscoveryKeyringInput = CreateAwsKmsDiscoveryKeyringInput(
kms_client=kms_client,
discovery_filter=DiscoveryFilter(
account_ids=[aws_account_id],
partition="aws"
)
)
discovery_keyring: IKeyring = mat_prov.create_aws_kms_discovery_keyring(
input=discovery_keyring_input
)
Menggunakan AWS KMS keyring penemuan regional
Keyring penemuan AWS KMS regional adalah keyring yang tidak menentukan kunciARNs. KMS Sebaliknya, ini memungkinkan AWS Encryption SDK untuk mendekripsi hanya menggunakan KMS kunci pada khususnya. Wilayah AWS
Saat mendekripsi dengan keyring penemuan AWS KMS regional, AWS Encryption SDK
mendekripsi kunci data terenkripsi apa pun yang dienkripsi di bawah yang ditentukan. AWS KMS key Wilayah AWS Agar berhasil, penelepon harus memiliki kms:Decrypt
izin setidaknya satu dari yang AWS KMS keys
ditentukan Wilayah AWS yang mengenkripsi kunci data.
Seperti keyrings penemuan lainnya, keyring penemuan regional tidak berpengaruh pada enkripsi. Ini hanya berfungsi saat mendekripsi pesan terenkripsi. Jika Anda menggunakan keyring penemuan regional dalam multi-keyring yang digunakan untuk mengenkripsi dan mendekripsi, ini hanya efektif saat mendekripsi. Jika Anda menggunakan keyring penemuan Multi-wilayah untuk mengenkripsi data, sendiri atau dalam multi-keyring, operasi enkripsi gagal.
Jika Anda menyertakan keyring penemuan AWS KMS regional dalam multi-keyring dekripsi, keyring penemuan regional mengesampingkan semua batasan kunci yang ditentukan oleh gantungan KMS kunci lain di multi-keyring. Multi-keyring berperilaku seperti keyring yang paling tidak membatasi. Keyring AWS KMS penemuan tidak berpengaruh pada enkripsi saat digunakan sendiri atau dalam multi-keyring.
Penemuan regional keyring dalam AWS Encryption SDK for C upaya untuk mendekripsi hanya dengan KMS kunci di Wilayah yang ditentukan. Saat Anda menggunakan keyring penemuan di AWS Encryption SDK for JavaScript dan AWS Encryption SDK untuk. NET, Anda mengkonfigurasi Wilayah pada AWS KMS klien. AWS Encryption SDK Implementasi ini tidak memfilter KMS kunci berdasarkan Wilayah, tetapi AWS KMS
akan gagal dalam permintaan dekripsi untuk KMS kunci di luar Wilayah yang ditentukan.
Jika Anda menggunakan keyring penemuan, sebaiknya gunakan filter penemuan untuk membatasi kunci yang digunakan dalam dekripsi ke KMS kunci yang ditentukan Akun AWS dan partisi. Filter penemuan didukung dalam versi 1.7. x dan kemudian AWS Encryption SDK.
Misalnya, kode berikut membuat keyring penemuan AWS KMS regional dengan filter penemuan. Gantungan kunci ini membatasi KMS kunci AWS Encryption SDK to di akun 111122223333 di Wilayah Barat AS (Oregon) (us-west-2).
- C
-
Untuk melihat keyring ini, dan create_kms_client
metodenya, dalam contoh kerja, lihat kms_discovery.cpp.
std::shared_ptr<KmsKeyring::DiscoveryFilter> discovery_filter(
KmsKeyring::DiscoveryFilter::Builder("aws
")
.AddAccount("111122223333
")
.Build());
struct aws_cryptosdk_keyring *kms_regional_keyring = Aws::Cryptosdk::KmsKeyring::Builder()
.WithKmsClient(create_kms_client(Aws::Region::US_WEST_2
)).BuildDiscovery(discovery_filter));
- C# / .NET
-
AWS Encryption SDK Untuk. NETtidak memiliki keyring penemuan regional khusus. Namun, Anda dapat menggunakan beberapa teknik untuk membatasi KMS kunci yang digunakan saat mendekripsi ke Wilayah tertentu.
Cara paling efisien untuk membatasi Wilayah dalam keyring penemuan adalah dengan menggunakan keyring multi-Region-aware penemuan, meskipun Anda mengenkripsi data hanya menggunakan kunci Wilayah tunggal. Saat menemukan tombol Single-region, multi-Region-aware keyring tidak menggunakan fitur Multi-region apa pun.
Gantungan kunci yang dikembalikan oleh CreateAwsKmsMrkDiscoveryKeyring()
metode memfilter KMS kunci menurut Wilayah sebelum memanggil AWS KMS. Ini mengirimkan permintaan dekripsi AWS KMS hanya ketika kunci data terenkripsi dienkripsi oleh kunci di Wilayah yang KMS ditentukan oleh parameter dalam objek. Region
CreateAwsKmsMrkDiscoveryKeyringInput
Contoh berikut menggunakan versi 4. x dari AWS Encryption SDK untuk. NET.
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
List<string> account = new List<string> { "111122223333
" };
// Create the discovery filter
var filter = DiscoveryFilter = new DiscoveryFilter
{
AccountIds = account,
Partition = "aws"
};
var regionalDiscoveryKeyringInput = new CreateAwsKmsMrkDiscoveryKeyringInput
{
KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2
),
Region = RegionEndpoint.USWest2
,
DiscoveryFilter = filter
};
var kmsRegionalDiscoveryKeyring = materialProviders.CreateAwsKmsMrkDiscoveryKeyring(regionalDiscoveryKeyringInput);
Anda juga dapat membatasi KMS kunci tertentu Wilayah AWS dengan menentukan Region dalam instance AWS KMS client (AmazonKeyManagementServiceClient) Anda. Namun, konfigurasi ini kurang efisien dan berpotensi lebih mahal daripada menggunakan keyring multi-Region-aware penemuan. Alih-alih memfilter KMS kunci berdasarkan Wilayah sebelum menelepon AWS KMS, AWS Encryption SDK untuk. NETmemanggil AWS KMS setiap kunci data terenkripsi (hingga mendekripsi satu) dan bergantung pada AWS KMS untuk membatasi KMS kunci yang digunakannya ke Wilayah yang ditentukan.
Contoh berikut menggunakan versi 4. x dari AWS Encryption SDK untuk. NET.
// Instantiate the AWS Encryption SDK and material providers
var esdk = new ESDK(new AwsEncryptionSdkConfig());
var mpl = new MaterialProviders(new MaterialProvidersConfig());
List<string> account = new List<string> { "111122223333
" };
// Create the discovery filter,
// but not a AWS KMS key
var createRegionalDiscoveryKeyringInput = new CreateAwsKmsDiscoveryKeyringInput
{
KmsClient = new AmazonKeyManagementServiceClient(RegionEndpoint.USWest2
),
DiscoveryFilter = new DiscoveryFilter()
{
AccountIds = account,
Partition = "aws"
}
};
var kmsRegionalDiscoveryKeyring = materialProviders.CreateAwsKmsDiscoveryKeyring(createRegionalDiscoveryKeyringInput);
- JavaScript Browser
-
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const clientProvider = getClient(KMS, { credentials })
const discovery = true
const clientProvider = limitRegions(['us-west-2
'], getKmsClient)
const keyring = new KmsKeyringBrowser(clientProvider, {
discovery,
discoveryFilter: { accountIDs: ['111122223333
'], partition: 'aws
' }
})
- JavaScript Node.js
-
Contoh berikut menggunakan buildClient
fungsi untuk menentukan kebijakan komitmen default,REQUIRE_ENCRYPT_REQUIRE_DECRYPT
. Anda juga dapat menggunakan buildClient
untuk membatasi jumlah kunci data terenkripsi dalam pesan terenkripsi. Untuk informasi selengkapnya, lihat Membatasi kunci data terenkripsi.
Untuk melihat keyring ini, dan limitRegions
fungsinya, dalam contoh kerja, lihat kms_regional_discovery.ts.
import {
KmsKeyringNode,
buildClient,
CommitmentPolicy,
} from '@aws-crypto/client-node'
const { encrypt, decrypt } = buildClient(
CommitmentPolicy.REQUIRE_ENCRYPT_REQUIRE_DECRYPT
)
const discovery = true
const clientProvider = limitRegions(['us-west-2
'], getKmsClient)
const keyring = new KmsKeyringNode({
clientProvider,
discovery,
discoveryFilter: { accountIDs: ['111122223333
'], partition: 'aws
' }
})
- 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);
- Python
-
# Instantiate the AWS Encryption SDK
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=aws_region)
# 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
mat_prov: AwsCryptographicMaterialProviders = AwsCryptographicMaterialProviders(
config=MaterialProvidersConfig()
)
# Create the AWS KMS regional discovery keyring
regional_discovery_keyring_input: CreateAwsKmsMrkDiscoveryKeyringInput = \
CreateAwsKmsMrkDiscoveryKeyringInput(
kms_client=kms_client,
region=mrk_replica_decrypt_region,
discovery_filter=DiscoveryFilter(
account_ids=[111122223333
],
partition="aws"
)
)
regional_discovery_keyring: IKeyring = mat_prov.create_aws_kms_mrk_discovery_keyring(
input=regional_discovery_keyring_input
)
AWS Encryption SDK for JavaScript Juga mengekspor excludeRegions
fungsi untuk Node.js dan browser. Fungsi ini menciptakan keyring penemuan AWS KMS regional yang menghilangkan AWS KMS keys di wilayah tertentu. Contoh berikut membuat keyring penemuan AWS KMS regional yang dapat digunakan AWS KMS keys di akun 111122223333 di setiap Wilayah AWS kecuali untuk US East (Virginia N.) (us-east-1).
AWS Encryption SDK for C Tidak memiliki metode analog, tetapi Anda dapat menerapkannya dengan membuat kustom. ClientSupplier
Contoh ini menunjukkan kode untuk Node.js.
const discovery = true
const clientProvider = excludeRegions(['us-east-1'], getKmsClient)
const keyring = new KmsKeyringNode({
clientProvider,
discovery,
discoveryFilter: { accountIDs: [111122223333
], partition: 'aws
' }
})