Todos os produtos
Search
Central de documentação

Database Autonomy Service:Melhores práticas para gerenciamento automatizado de regras de criptografia de colunas

Última atualização: Aug 25, 2026

O Database Autonomy Service (DAS) oferece uma cadeia de ferramentas para gerenciar regras de criptografia de colunas (mascaramento de dados). Use scripts Python para criar, consultar e gerenciar essas regras em massa. Este tópico descreve como usar a cadeia de ferramentas para automatizar o gerenciamento de regras de criptografia de colunas.

Visão geral da cadeia de ferramentas

Casos de uso

As práticas de segurança e conformidade de bancos de dados geralmente exigem as seguintes capacidades:

  • Criptografia em massa: Configure regras de criptografia de colunas para dados sensíveis, como números de telefone, documentos de identidade e endereços de e-mail, em várias instâncias, bancos de dados e tabelas.

  • Consulta e auditoria: Consulte colunas criptografadas, status de ativação de instâncias, uso de cotas, usuários autorizados e grupos de permissões.

  • Gerenciamento de políticas: Exclua ou atualize políticas de criptografia, modifique permissões de autorização em lote, altere algoritmos de criptografia e sincronize políticas manualmente.

  • Conformidade de segurança: Substitua operações manuais no console por fluxos de trabalho baseados em scripts que permitam auditoria, rastreamento e visualização prévia.

Arquitetura da cadeia de ferramentas

A cadeia de ferramentas inclui quatro scripts Python que chamam a OpenAPI do DAS pelo mecanismo CommonRequest do Alibaba Cloud Python SDK V1. Todos os scripts compartilham a mesma lógica de carregamento de credenciais e aceitam a flag --dry-run para execução em modo de simulação.

Script

Finalidade

Operação de escrita

create_data_masking_rule.py

Cria regras de criptografia de colunas (script principal com biblioteca reutilizável de credenciais e requisições)

Sim

fetch_schema.py

Conecta-se ao banco de dados, lê o schema e exporta uma lista de colunas

Não

describe_data_masking.py

Consultas somente leitura (usuários, algoritmos, colunas criptografadas, instâncias, status e estatísticas de cota)

Não

manage_data_masking.py

Operações de escrita (excluir ou atualizar políticas, modificar autorizações em lote, alterar algoritmos e sincronização manual)

Sim

Arquivos de configuração

A cadeia de ferramentas usa quatro tipos de arquivos de configuração. Cada tipo fornece um arquivo real e um modelo .example. Cada categoria tem uma finalidade distinta:

Categoria

Arquivo real

Modelo

Usado por

Credenciais da API cloud

.aliyun.env

.aliyun.env.example

create / describe / manage

Conexão com banco de dados

mysql.conf

mysql.example.conf

fetch_schema.py

Lista de colunas (CSV)

columns.csv

columns.example.csv

create

Política de criptografia (JSON)

rule.json

rule.example.json

create

Importante

Os arquivos de configuração reais contêm informações sensíveis. Não faça commit deles no controle de versão. Mantenha apenas os modelos *.example em seu repositório.

Escopo aplicável

Componente

Permissões e recursos necessários

Ambiente de execução

Python 3.8 ou superior. Recomenda-se o uso de um ambiente virtual venv.

Usuário RAM do Alibaba Cloud

O usuário RAM deve ter permissões para chamar as operações da API de criptografia de colunas do DAS.

Rede

O endereço IP de origem deve estar dentro do intervalo de rede permitido para operações de criptografia de colunas do DAS.

Instância de banco de dados

O service column encryption deve estar ativado e a cota de criptografia de colunas deve ter sido adquirida.

Importante

A criptografia de colunas é uma operação sensível. Mesmo que a política do RAM conceda as permissões necessárias, o controle de risco de segurança bloqueia requisições provenientes de endereços IP fora da lista de permissões. Confirme a lista de permissões de rede com sua equipe de segurança antes de prosseguir.

Procedimento

Etapa 1: Baixar e extrair a cadeia de ferramentas

Baixe o arquivo da cadeia de ferramentas dbse-skills.tgz e extraia-o localmente:

tar xzf dbsec-skills.tgz
cd dbsec-skills/skills/column-encryption-rule/scripts

Etapa 2: Instalar dependências do Python

Crie um ambiente virtual e instale as dependências:

python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt

Conteúdo do arquivo de dependências (requirements.txt):

aliyun-python-sdk-core>=2.16.0
PyMySQL>=1.1.0

Use o venv do projeto para todos os comandos subsequentes: .venv/bin/python.

Etapa 3: Configurar credenciais da API cloud

Copie o modelo e insira seu par de AccessKey:

cp .aliyun.env.example .aliyun.env

Exemplo de conteúdo do arquivo .aliyun.env:

ALIBABA_CLOUD_ACCESS_KEY_ID=your_access_key_id
ALIBABA_CLOUD_ACCESS_KEY_SECRET=your_access_key_secret
# Required only for STS temporary credentials. Delete or leave empty for standard AccessKey pairs.
ALIBABA_CLOUD_SECURITY_TOKEN=your_sts_token
Importante

Este arquivo contém credenciais reais. Armazene-o com segurança e nunca o compartilhe.

Etapa 4: Preparar o modelo de política de criptografia

Copie o modelo de regra:

cp rule.example.json rule.json

Mantenha o arquivo rule.json como modelo de política compartilhada e mova todas as informações específicas da instância para o arquivo columns.csv:

{
  "ProductId": 5,
  "EncAlgorithm": "AES_128_GCM",
  "EncryptionKeyMode": "client_key",
  "CooperationChannel": "DAS",
  "BackendRegionId": "cn-zhangjiakou",
  "UserList": [
    {
      "AccountId": "shared_user",
      "AuthRole": "fullAccess",
      "EngineType": "MySQL"
    },
    {
      "AccountId": "only_for_instanceB",
      "InstanceId": "rm-instanceB",
      "AuthRole": "restrictedAccess",
      "EngineType": "MySQL"
    }
  ],
  "ResourceGroupId": ""
}

Campos principais:

Campo

Descrição

ProductId

Tipo de product de banco de dados. O valor 5 representa RDS MySQL. Para uma política de product único, mantenha este campo no nível superior. Para uma política entre produtos, especifique-o por linha no arquivo columns.csv.

EncAlgorithm

Algoritmo de criptografia, como AES_128_GCM ou AES_256_GCM.

EncryptionKeyMode

Modo de chave de criptografia, como client_key.

CooperationChannel

Defina como DAS.

BackendRegionId

Região de processamento backend. Defina como cn-zhangjiakou.

UserList

Lista de usuários autorizados. Defina AccountId como o nome da conta do banco de dados (não a conta cloud). Se você omitir InstanceId, a conta será considerada um usuário compartilhado. Se especificar InstanceId, o usuário se aplicará apenas àquela instância.

Valores de AuthRole:

Valor

Descrição

fullAccess

Pode visualizar dados em texto simples

restrictedAccess

Pode visualizar apenas texto cifrado e descriptografar com uma chave de usuário

noneAccess

Pode visualizar apenas texto cifrado, sem capacidade de descriptografia

Nota

Não inclua InstanceId ou ServiceRegionId no nível superior. Especifique esses campos por linha no arquivo CSV.

Etapa 5: Preparar a lista de colunas

Prepare a lista de colunas de uma das seguintes maneiras:

Método 1: Criar columns.csv manualmente

Copie o modelo:

cp columns.example.csv columns.csv

Insira os dados com uma coluna por linha. Exemplo:

RegionId,InstanceId,DbName,TableName,Column,EngineType,ProductId
cn-hangzhou,rm-instanceA,your_database,your_table,email,MySQL,
cn-hangzhou,rm-instanceA,your_database,your_table,phone,MySQL,
cn-beijing,rm-instanceB,another_db,users,id_card,MySQL,

Para especificar várias colunas na mesma tabela, use o campo Columns com valores separados por vírgula entre aspas:

RegionId,InstanceId,DbName,TableName,Columns,EngineType
cn-hangzhou,rm-instanceA,your_database,your_table,"email,phone",MySQL

A coluna ProductId é opcional. Especifique-a para cenários entre produtos. Se deixada em branco, o valor de nível superior do arquivo rule.json será usado.

Método 2: Exportar automaticamente com fetch_schema.py

Copie o modelo e insira as informações de conexão do seu banco de dados:

cp mysql.example.conf mysql.conf

Exemplo de conteúdo do arquivo mysql.conf (formato chave:valor):

url:rm-xxxxxxxxxxxxxxxxx.rwlb.rds.aliyuncs.com
user:your_user
pass:your_password

Visualize o schema do banco de dados (formato texto):

.venv/bin/python fetch_schema.py --config mysql.conf --database your_database

Exporte um arquivo columns.csv compatível:

.venv/bin/python fetch_schema.py --config mysql.conf --database your_database \
  --format csv --region-id cn-beijing --instance-id rm-xxxxxxxxxxxxxxxxx > columns.csv
Nota

Os parâmetros --region-id e --instance-id são obrigatórios no modo CSV, pois são identificadores de recursos cloud que não podem ser obtidos pelo schema do banco de dados. Após a exportação, edite o arquivo columns.csv para manter apenas as colunas sensíveis que exigem criptografia.

Lista completa de parâmetros para fetch_schema.py:

--config          Database configuration file. Default: mysql.conf
--database        Query only the specified database. Repeatable. Omit to enumerate all business databases.
--include-system  Include system databases (information_schema, etc.)
--format          json | text | csv. Default: text
--region-id       Required for CSV: instance region, e.g. cn-beijing
--instance-id     Required for CSV: instance ID, e.g. rm-xxxx
--engine-type     EngineType for CSV. Default: MySQL

Etapa 6: Executar uma simulação (dry run)

Sempre execute uma simulação antes de enviar alterações para verificar o corpo da requisição e a divisão em lotes.

Simulação para uma criação única (sem CSV):

.venv/bin/python create_data_masking_rule.py \
  --env-file .aliyun.env --config rule.json --dry-run

Simulação para criação em lote (com CSV):

.venv/bin/python create_data_masking_rule.py \
  --env-file .aliyun.env --config rule.json --columns-csv columns.csv --dry-run

Exemplo de saída da simulação:

BatchCount: number of batches
TotalSubRuleCount: aggregated table rule count
TotalUniqueColumnCount: unique column count
Batches: InstanceId, ServiceRegionId, SubRuleCount, UniqueColumnCount per batch

Opcional: verificação prévia de cota local. Por exemplo, se a cota restante for de 50 colunas:

.venv/bin/python create_data_masking_rule.py \
  --env-file .aliyun.env --config rule.json --columns-csv columns.csv \
  --max-new-columns 50 --dry-run

Se a contagem de colunas exceder o limite definido por --max-new-columns, o script será interrompido localmente sem enviar requisições.

Etapa 7: Criar regras de criptografia de colunas

Após o sucesso da simulação, remova a flag --dry-run para executar a operação.

Criação única:

.venv/bin/python create_data_masking_rule.py \
  --env-file .aliyun.env --config rule.json

Criação em lote:

.venv/bin/python create_data_masking_rule.py \
  --env-file .aliyun.env --config rule.json --columns-csv columns.csv

Opcional: ajuste o número de SubRules por lote (máximo de 100):

.venv/bin/python create_data_masking_rule.py \
  --env-file .aliyun.env --config rule.json --columns-csv columns.csv --batch-size 50
Importante

O script agrupa automaticamente as regras por RegionId + InstanceId + ProductId e divide cada instância em requisições independentes, com até 100 entradas SubRuleList por lote. Não combine múltiplas instâncias em uma única requisição. Caso contrário, as regras podem ser criadas com êxito, mas a instância ainda poderá aparecer esmaecida no centro de ativos.

Etapa 8: Consultar e verificar

Use o script describe_data_masking.py para consultar o status da criptografia de colunas. Use --action para selecionar uma operação de API somente leitura. Todas as operações aceitam --dry-run.

Operação (--action)

Descrição

Parâmetros obrigatórios

DescribeDataMaskingUsers

Usuários autorizados e grupos de permissões

Nenhum

DescribeDataMaskingAlgorithms

Algoritmos de criptografia suportados pela instância

--product-id / --service-region-id / --instance-id

ListDataMaskingColumns

Lista de colunas criptografadas (suporta paginação e filtragem multidimensional)

Parâmetros de filtro opcionais

ListDataMaskingInstances

Lista de instâncias com criptografia de colunas (suporta paginação e filtragem multidimensional)

Parâmetros de filtro opcionais

CheckDataMaskingInstance

Status de ativação da criptografia de colunas para a instância

--product-id / --service-region-id / --instance-id

GetDataMaskingColumnCount

Contagem de colunas criptografadas e estatísticas de cota

--product-ids

GetDataMaskingAccountCount

Estatísticas de contagem de contas autorizadas

Nenhum

Exemplos:

# List authorized users
.venv/bin/python describe_data_masking.py --env-file .aliyun.env \
  --action DescribeDataMaskingUsers

# Query supported encryption algorithms for an instance
.venv/bin/python describe_data_masking.py --env-file .aliyun.env \
  --action DescribeDataMaskingAlgorithms \
  --product-id 5 --service-region-id cn-beijing --instance-id rm-xxxxxxxxxxxxxxxxx

# Query encrypted columns with pagination
.venv/bin/python describe_data_masking.py --env-file .aliyun.env \
  --action ListDataMaskingColumns \
  --product-ids 5 --db-name your_database --page-size 20 --current-page 1

# Get encrypted column quota statistics
.venv/bin/python describe_data_masking.py --env-file .aliyun.env \
  --action GetDataMaskingColumnCount --product-ids 5

Parâmetros de filtro e paginação para operações List: --masking-status, --template-id, --risk-level-id, --model-tag-id, --instance-id, --db-name, --table-name, --column-name, --current-page, --page-size, --product-id, --product-ids, --risk-level-ids, --template-rule-ids, --engine-type.

Etapa 9: Operações de gerenciamento

Use o script manage_data_masking.py com --action para selecionar uma operação de API de escrita. Todas as operações aceitam --dry-run para visualizar previamente o corpo da requisição. Os parâmetros de lista são fornecidos por meio de um arquivo JSON especificado por --config. Parâmetros escalares podem ser definidos no arquivo de configuração ou substituídos por opções da CLI (a CLI tem precedência).

Operação (--action)

Descrição

Observações

DeleteDataMaskingRule

Exclui uma política de criptografia

SubRuleList[].ProductId é um inteiro (int64)

ModifyDataMaskingRule

Atualiza uma política de criptografia

SubRuleList[].ProductId é uma string. RegionId/ProductId/InstanceId/DbName/TableName/ColumnsName são obrigatórios

BatchModifyDataMaskingUsers

Modifica grupos de permissões de autorização em lote

--auth-role é obrigatório. Forneça UserList no arquivo de configuração

ModifyDataMaskingEncryptionAlgorithm

Altera o algoritmo de criptografia de uma instância

Especifique --instance-id/--product-id/--service-region-id/--encryption-algorithm

ManualSyncMaskingRules

Sincroniza manualmente todas as políticas de criptografia

Sem parâmetros de negócio

Exemplos (execute primeiro com --dry-run para visualizar e, em seguida, remova --dry-run para executar):

# Delete a policy: provide SubRuleList in config. ProductId is an integer.
.venv/bin/python manage_data_masking.py --env-file .aliyun.env \
  --action DeleteDataMaskingRule --config delete_rule.json --rule-name rule-demo --dry-run

# Batch-modify authorization permission groups
.venv/bin/python manage_data_masking.py --env-file .aliyun.env \
  --action BatchModifyDataMaskingUsers --config batch_users.json \
  --auth-role fullAccess --dry-run

# Change the encryption algorithm for an instance
.venv/bin/python manage_data_masking.py --env-file .aliyun.env \
  --action ModifyDataMaskingEncryptionAlgorithm \
  --instance-id rm-xxx --product-id 5 --service-region-id cn-beijing \
  --encryption-algorithm AES_256_GCM --dry-run

# Manually synchronize all encryption policies (no business parameters)
.venv/bin/python manage_data_masking.py --env-file .aliyun.env \
  --action ManualSyncMaskingRules --dry-run

Referência rápida do fluxo de trabalho

O fluxo de trabalho completo consiste em seis etapas:

1. Prepare credentials    cp .aliyun.env.example .aliyun.env     # Enter AK/SK for DAS OpenAPI
2. Prepare rule template  cp rule.example.json rule.json         # Configure the shared encryption policy
3. Prepare column list    Write columns.csv manually, or use fetch_schema.py to export
4. Dry run                Add --dry-run to verify the request body and batches
5. Execute                Remove --dry-run to execute
6. Verify results         Use describe_data_masking.py to query and verify

Configuração padrão da API

Os scripts usam a seguinte configuração da API do DAS por padrão:

Domain:             das.cn-shanghai.aliyuncs.com
Version:             2020-01-16
Action:              CreateDataMaskingRule
Method:             POST / HTTPS
RegionId:            cn-shanghai (POP access region. Do not modify.)
CooperationChannel:  DAS
BackendRegionId:     cn-zhangjiakou
Importante

RegionId: cn-shanghai é a região de acesso usada pelo Python SDK e pelas requisições POP. Ela difere do ServiceRegionId de nível de negócio. Especifique a região da instância a ser criptografada por meio de ServiceRegionId e SubRuleList[].RegionId (por exemplo, cn-hangzhou para Hangzhou ou cn-beijing para Pequim).

Melhores práticas de segurança

  • Gerenciamento de credenciais: Os arquivos .aliyun.env, mysql.conf, rule.json e columns.csv contêm credenciais reais ou dados de negócios. Não faça commit deles no controle de versão. Mantenha apenas os modelos *.example em seu repositório.

  • Privilégio mínimo: Conceda ao usuário RAM apenas as permissões necessárias para as operações da API de criptografia de colunas do DAS. Use credenciais temporárias STS sempre que possível.

  • Controle de acesso à rede: A criptografia de colunas é uma operação sensível. Certifique-se de que o endereço IP de origem esteja dentro do intervalo de rede permitido para o DAS.

  • Simulação antes da execução: Todas as operações de escrita (criar e gerenciar) aceitam --dry-run. Sempre realize uma simulação antes de enviar alterações.

  • Verificação prévia de cota: Antes da execução em lote, verifique o valor de TotalUniqueColumnCount na saída da simulação. Use --max-new-columns para proteção local de cota quando necessário.

  • Auditoria de operações: Os scripts chamam o DAS via OpenAPI. Todas as operações podem ser auditadas pelo ActionTrail.

Perguntas frequentes

  • P: A simulação passa, mas a criação real retorna 401 Deny. O que devo fazer?

    R: A simulação valida apenas o corpo da requisição localmente, não garantindo a aceitação pelo servidor. Causas comuns de 401 Deny: o usuário RAM associado ao par de AccessKey não tem permissões para chamar as operações da API de criptografia de colunas do DAS; o endereço IP de origem não está na lista de permissões; o par de AccessKey está bloqueado por políticas de segurança. Solução de problemas: verifique se a política do RAM concede as permissões de Action necessárias; entre em contato com a equipe de segurança informando o RequestID, o par de AccessKey e o endereço IP de origem; ou tente novamente com um par de AccessKey que tenha as permissões necessárias e esteja dentro do intervalo de rede permitido.

  • P: Alguns lotes falham durante a criação em lote. O que devo fazer?

    R: Se a cota for excedida, a API retorna sale_instance_quota_exception. O script indica qual lote falhou. Lotes anteriores bem-sucedidos não são revertidos automaticamente. Antes da execução em lote, verifique o valor de TotalUniqueColumnCount na saída da simulação e use --max-new-columns para proteção local de cota quando necessário.

  • P: Devo incluir InstanceId no arquivo rule.json?

    R: Não inclua. Mantenha o arquivo rule.json como modelo de política compartilhada e forneça todas as informações específicas da instância no arquivo columns.csv. Dessa forma, um único arquivo rule.json pode ser reutilizado com arquivos CSV para qualquer instância. Para escalar para múltiplas instâncias, modifique apenas o arquivo CSV sem alterar o rule.json.

  • P: Como configuro autorizações diferentes para múltiplas instâncias na UserList?

    R: Use InstanceId para diferenciar: se InstanceId for omitido, o usuário será considerado compartilhado e aplicado a todas as instâncias com preenchimento automático das informações da instância; se InstanceId for especificado, o usuário se aplicará apenas aos lotes correspondentes àquela instância, e outros lotes filtrarão automaticamente esse usuário. Nenhuma estrutura aninhada é necessária.

  • P: Por que o CSV exportado pelo fetch_schema.py não inclui RegionId e InstanceId?

    R: RegionId, InstanceId e EngineType são identificadores de recursos cloud que não podem ser obtidos pelo schema do banco de dados. No modo CSV, --region-id e --instance-id são obrigatórios. Após a exportação, edite o arquivo columns.csv para manter apenas as colunas sensíveis que exigem criptografia.

  • P: Após o BatchModifyDataMaskingUsers alterar a autorização, a mesma conta aparece em dois grupos de permissões. Isso é normal?

    R: Após alterações de autorização, a operação DescribeDataMaskingUsers pode mostrar temporariamente a mesma conta em dois grupos com SyncStatus=1 (sincronizando). Após a conclusão da sincronização (SyncStatus=0), apenas o grupo de destino permanecerá. Trata-se de uma sincronização assíncrona esperada no lado do servidor, não exigindo tratamento pelo script. Consulte novamente após uma breve espera para verificar o estado final.

  • P: A operação ModifyDataMaskingRule retorna InvalidParameter para regras personalizadas de criptografia de colunas. O que devo fazer?

    R: A operação ModifyDataMaskingRule foi projetada para regras baseadas em modelos. Para regras personalizadas de criptografia de colunas criadas por CreateDataMaskingRule (RuleId=0), esta operação retorna InvalidParameter "InstanceId". Esta é uma restrição de negócio, não um defeito do script. Para atualizar regras personalizadas de criptografia de colunas, exclua-as primeiro e recrie-as em seguida.