Criptografia e descriptografia de dados por meio de DR entre regiões
Cenário
Se ocorrer uma falha durante a criptografia ou descriptografia em uma região, você poderá usar o KMS para implementar a criptografia e a descriptografia de DR entre regiões, garantindo a continuidade do serviço.
Solução
Se o KMS estiver defeituoso em uma ou várias regiões, a criptografia e a descriptografia podem ser concluídas, desde que uma chave no chaveiro esteja disponível.
Um chaveiro entre regiões pode usar as CMKs de várias regiões para criptografar uma parte dos dados e gerar texto cifrado de dados exclusivo. Para descriptografar os dados, basta usar um chaveiro que contenha uma ou mais CMKs disponíveis que foram usadas para criptografar os dados.
Para obter mais informações, consulte Detalhes.
Processo
Procedimento
- Obtenha o AK e a SK.
- ACCESS_KEY: chave de acesso da conta da Huawei. Para obter detalhes, consulte Como obter uma chave de acesso (AK/SK)?
- SECRET_ACCESS_KEY: chave de acesso de segredo da conta da Huawei. Para obter detalhes, consulte Como obter uma chave de acesso (AK/SK)?
- Haverá riscos de segurança se a AK/SK usada para autenticação for gravada diretamente no código. Criptografe a AK/SK no arquivo de configuração ou nas variáveis de ambiente para armazenamento.
- Neste exemplo, a AK/SK armazenada nas variáveis de ambiente é usada para autenticação de identidade. Configure as variáveis de ambiente HUAWEICLOUD_SDK_AK e HUAWEICLOUD_SDK_SK primeiro no ambiente local.
- Obtenha informações da região.
- Faça logon no console de gerenciamento.
- Passe o mouse sobre o nome de usuário no canto superior direito e escolha My Credentials na lista suspensa.
- Obtenha o Project ID e o Project Name.
Figura 1 Obtenção do ID e do nome do projeto
- Clique em . Escolha .
- Obtenha o ID da CMK (KEYID) a ser usado na região atual.
Figura 2 Obtenção do ID da CMK
- Use o chaveiro para criptografia e descriptografia.
public class KmsEncryptionExample { private static final String ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_AK"); private static final String SECRET_ACCESS_KEY = System.getenv("HUAWEICLOUD_SDK_SK"); private static final String PROJECT_ID_1 = "<projectId1>"; private static final String REGION_1 = "<region1>"; private static final String KEYID_1 = "<keyId1>"; public static final String PROJECT_ID_2 = "<projectId2>"; public static final String REGION_2 = "<region2>"; public static final String KEYID_2 = "<keyId2>"; // Data to be encrypted private static final String PLAIN_TEXT = "Hello World!"; public static void main(String[] args) { // CMK list List<KMSConfig> kmsConfigList = new ArrayList<>(); kmsConfigList.add(new KMSConfig(REGION_1, KEYID_1, PROJECT_ID_1)); kmsConfigList.add(new KMSConfig(REGION_2, KEYID_2, PROJECT_ID_2)); // Construct encryption-related information. HuaweiConfig multiConfig = HuaweiConfig.builder().buildSk(SECRET_ACCESS_KEY) .buildAk(ACCESS_KEY) .buildKmsConfig(kmsConfigList) .buildCryptoAlgorithm(CryptoAlgorithm.AES_256_GCM_NOPADDING) .build(); // Select a key ring. KMSKeyring keyring = new KmsKeyringFactory().getKeyring(KeyringTypeEnum.KMS_MULTI_REGION.getType()); HuaweiCrypto huaweiCrypto = new HuaweiCrypto(multiConfig).withKeyring(keyring); // Encryption context Map<String, String> encryptContextMap = new HashMap<>(); encryptContextMap.put("key", "value"); encryptContextMap.put("context", "encrypt"); // Encryption CryptoResult<byte[]> encryptResult = huaweiCrypto.encrypt(new EncryptRequest(encryptContextMap, PLAIN_TEXT.getBytes(StandardCharsets.UTF_8))); // Decryption CryptoResult<byte[]> decryptResult = huaweiCrypto.decrypt(encryptResult.getResult()); Assert.assertEquals(PLAIN_TEXT, new String(decryptResult.getResult())); } }