Este conteúdo foi traduzido por máquina para sua conveniência e a Huawei Cloud não pode garantir que o conteúdo foi traduzido com precisão. Para exibir o conteúdo original, use o link no canto superior direito para mudar para a página em inglês.
Central de ajuda/ Data Encryption Workshop/ Melhores práticas/ Serviço de gerenciamento de chaves/ Criptografia e descriptografia de dados por meio de DR entre regiões
Atualizado em 2024-09-14 GMT+08:00

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

  1. 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.

  2. Obtenha informações da região.

    1. Faça logon no console de gerenciamento.
    2. Passe o mouse sobre o nome de usuário no canto superior direito e escolha My Credentials na lista suspensa.
    3. Obtenha o Project ID e o Project Name.
      Figura 1 Obtenção do ID e do nome do projeto
    4. Clique em . Escolha Security & Compliance > Data Encryption Workshop.
    5. Obtenha o ID da CMK (KEYID) a ser usado na região atual.
      Figura 2 Obtenção do ID da CMK

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