As políticas de segurança oferecem proteção no lado do cliente para operações do Alibaba Cloud CLI. Quando ativadas, o CLI compara cada comando com as regras configuradas para permitir, negar ou exigir confirmação manual da operação.
Visão geral
As políticas de segurança definem um conjunto de regras. Cada regra consiste em um padrão (critério de correspondência) e uma ação (tipo de resposta):
allow(permitir): Permite explicitamente a operação e ignora a avaliação de regras subsequentes. Posicione uma regraallowantes de regras mais abrangentes dedenyouconfirmpara criar exceções para operações específicas.deny(bloquear): Bloqueia totalmente a operação. O CLI rejeita o comando e não envia a solicitação de API.confirm(exigir aprovação): Em um terminal interativo, o CLI solicita que você digiteyesantes de prosseguir. Em ambientes não interativos, o CLI retorna um erro com instruções para o chamador.
As políticas de segurança aplicam-se tanto a chamadas OpenAPI (RPC e RESTful) quanto a comandos de plugin. Elas complementam o controle de acesso no lado do servidor (RAM), mas não substituem as políticas de permissão do RAM.
Cenários
Barreiras de segurança para agentes de IA: Quando um agente de IA usa o CLI para gerenciar recursos de nuvem, uma política de segurança pode interceptar operações destrutivas (como exclusões) e exigir confirmação humana ou bloqueá-las completamente, fornecendo um mecanismo de humano no loop (HITL).
Salvaguardas operacionais: Configure regras padrão para ambientes de CLI da equipe a fim de evitar a execução acidental de operações destrutivas, como excluir recursos ou parar instâncias.
Pré-requisitos
-
Alibaba Cloud CLI v3.3.14 ou posterior instalado. Execute o comando a seguir para verificar sua versão atual:
aliyun version -
Credenciais do CLI configuradas. Caso ainda não tenha configurado as credenciais, execute o seguinte comando:
aliyun configure
Gerenciar políticas de segurança
Gerencie as políticas de segurança por meio da família de comandos aliyun configure safety-policy.
Visualizar a política atual
Execute o comando abaixo para visualizar a configuração da política de segurança no formato JSON:
aliyun configure safety-policy show
Exemplo de saída:
{
"enabled": false,
"rules": []
}
Ativar e desativar
# Enable safety policy
aliyun configure safety-policy enable
# Disable safety policy
aliyun configure safety-policy disable
Execute aliyun configure safety-policy show para verificar se o campo enabled está definido como true.
Adicionar regras
Sintaxe do comando:
aliyun configure safety-policy add --pattern <pattern> --action <deny|confirm>
Exemplo: Bloquear todas as operações de exclusão em todos os produtos:
aliyun configure safety-policy add --pattern '*:Delete*' --action deny
Exemplo: Exigir confirmação humana para operações de atualização do ECS:
aliyun configure safety-policy add --pattern 'ecs:Update*' --action confirm
Execute aliyun configure safety-policy list para confirmar que a regra foi adicionada.
Se você adicionar uma regra com um padrão já existente, o CLI atualiza a ação desse padrão em vez de criar uma entrada duplicada.
O subcomando add aceita apenas deny, confirm e forbid como valores de ação. Para configurar uma regra allow, defina a variável de ambiente ALIBABA_CLOUD_SAFETY_POLICY_RULES ou edite diretamente o arquivo de configuração.
Remover regras
Especifique o padrão exato para remover uma regra:
aliyun configure safety-policy remove --pattern '*:Delete*'
Listar regras
Use o comando a seguir para visualizar todas as regras em uma lista formatada:
aliyun configure safety-policy list
Exemplo de saída:
Safety policy: enabled
Config file: /home/user/.aliyun/safety-policy.json
Rules:
1. *:Delete* -> deny
2. ecs:Update* -> confirm
Sintaxe das regras
Formato do padrão
O parâmetro --pattern utiliza o formato {product}:{operation} e suporta o caractere curinga * para corresponder a qualquer sequência de caracteres. A correspondência de padrões não diferencia maiúsculas de minúsculas: *:Delete*, *:DELETE* e *:delete* correspondem às mesmas operações.
O CLI constrói identificadores de comando diferentes dependendo do estilo da API:
|
Estilo de API |
Formato do padrão |
Exemplo |
|
RPC |
|
|
|
RESTful |
|
|
|
Plugin |
|
|
Exemplos comuns de padrões:
|
Padrão |
Correspondências |
|
|
Todas as operações contendo "Delete" em todos os produtos (sem distinção entre maiúsculas e minúsculas) |
|
|
Apenas a operação delete-instance do ECS |
|
|
Todas as operações do ECS que começam com "Update" |
|
|
Todas as operações em todos os produtos |
Ao executar comandos em um shell, coloque os valores de padrão entre aspas simples (por exemplo, '*:Delete*') para impedir que o shell expanda o caractere curinga *.
Valores de ação
|
Ação |
Comportamento |
|
|
Permite explicitamente a operação. Em um sistema de regras onde a primeira correspondência prevalece, posicione uma regra |
|
|
Bloqueia a operação e retorna um erro. O CLI não envia a solicitação de API. |
|
|
Solicita confirmação em um terminal interativo. O usuário deve digitar |
forbid é um alias para confirm. Ambos produzem comportamento idêntico em tempo de execução.
Se nenhuma regra corresponder, a operação será permitida por padrão (permissão implícita). Regras explícitas de allow servem para criar exceções antes de regras mais amplas de deny ou confirm.
Ordem de avaliação das regras
As regras são avaliadas de cima para baixo na ordem configurada, usando uma estratégia de primeira correspondência: a primeira regra correspondente entra em vigor e as regras subsequentes não são verificadas. Se nenhuma regra corresponder, o padrão é permitir a execução.
Por exemplo, dadas as duas regras a seguir:
ecs:Delete*→ confirm*:Delete*→ deny
Ao executar aliyun ecs delete-instance, a primeira regra (ecs:Delete*) corresponde, e a ação confirm é aplicada — não o deny da segunda regra.
Uso de allow para criar exceções:
ecs:Describe*→ allowecs:*→ deny
A execução de aliyun ecs DescribeInstances corresponde à primeira regra allow e a operação prossegue normalmente. Já a execução de aliyun ecs DeleteInstance corresponde à segunda regra e é bloqueada.
A ordem das regras é importante. Ao adicionar regras, garanta que as mais específicas apareçam antes das mais gerais.
Modo não interativo e cenários com agentes de IA
A flag --yes
Quando você especifica a flag --yes (ou -y), as regras de confirm são automaticamente ignoradas (tratadas como aprovadas). As regras de deny não são afetadas e continuam bloqueando a execução.
# confirm rules are skipped, operation executes directly
aliyun ecs update-instance --InstanceId i-bp1xxxxx --yes
# deny rules are not affected, operation is still blocked
aliyun ecs delete-instance --InstanceId i-bp1xxxxx --yes
# Output: ERROR: operation blocked by safety policy: ecs delete-instance (rule: *:Delete*)
Também é possível definir a variável de ambiente ALIBABA_CLOUD_SAFETY_SKIP_CONFIRM como true para aprovar automaticamente todas as regras de confirm durante uma sessão inteira, o que equivale a passar --yes em cada comando:
export ALIBABA_CLOUD_SAFETY_SKIP_CONFIRM=true
Nem --yes nem ALIBABA_CLOUD_SAFETY_SKIP_CONFIRM conseguem contornar regras de deny. Operações que correspondem a uma regra de deny são sempre bloqueadas, independentemente de flags ou variáveis de ambiente.
Comportamento em terminais não interativos
O CLI detecta se a entrada padrão é um dispositivo de terminal para determinar o ambiente atual. Em ambientes não interativos (como scripts, pipelines de CI/CD e runtimes de agentes de IA), se uma operação corresponder a uma regra de confirm e a flag --yes não for especificada, o CLI retorna o seguinte erro:
Safety policy requires confirmation for: ecs update-instance
This operation cannot run in non-interactive mode without explicit approval. If you are an agent, ask the user whether this operation is allowed; after they confirm (e.g. reply yes), re-run the same command with --yes.
Fluxo de trabalho recomendado para agentes de IA
Quando um agente de IA gerencia recursos de nuvem por meio do CLI, siga estas etapas para configurar e usar políticas de segurança:
Configure as políticas de segurança: Defina
denypara operações que devem ser totalmente proibidas econfirmpara operações que exigem aprovação.Gerencie solicitações de confirmação: Quando o agente encontrar um bloco de
confirm, apresente os detalhes da operação ao usuário e solicite aprovação.Reexecute com aprovação: Após a confirmação do usuário, o agente executa novamente o comando com a flag
--yes.
Exemplo de configuração: Bloquear operações de exclusão e exigir confirmação humana para operações de atualização:
aliyun configure safety-policy enable
aliyun configure safety-policy add --pattern '*:Delete*' --action deny
aliyun configure safety-policy add --pattern '*:Update*' --action confirm
Variáveis de ambiente
Além da configuração por linha de comando, você pode controlar as políticas de segurança por meio de variáveis de ambiente. Essas variáveis têm precedência sobre o arquivo de configuração.
|
Variável de ambiente |
Descrição |
Exemplo |
|
|
Substitui o valor |
|
|
|
Substitui a lista de regras no arquivo de configuração. Use o formato |
|
|
|
Defina como |
|
Quando a variável de ambiente ALIBABA_CLOUD_SAFETY_POLICY_RULES está definida, as regras no arquivo de configuração são completamente substituídas, não mescladas.
Arquivo de configuração
A configuração da política de segurança é armazenada em ~/.aliyun/safety-policy.json. Se você especificar a opção --config-path, o arquivo safety-policy.json estará localizado nesse diretório personalizado.
Exemplo de formato de arquivo:
{
"enabled": true,
"rules": [
{
"pattern": "ecs:Describe*",
"action": "allow"
},
{
"pattern": "*:Delete*",
"action": "deny"
},
{
"pattern": "ecs:Update*",
"action": "confirm"
}
]
}
Se o arquivo de configuração não existir, a política de segurança estará desativada por padrão e a lista de regras ficará vazia. O arquivo é criado automaticamente quando você executa pela primeira vez o subcomando
enableouadd.
A política de segurança usa um design de falha aberta: se o arquivo de configuração não puder ser carregado (por exemplo, devido a corrupção), o CLI ignora as verificações de segurança e não bloqueia a execução do comando.