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.
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())); } }