Use uma política do RAM para limitar as chamadas da OpenAPI a IPs de origem confiáveis e reduzir o impacto de um AccessKey comprometido.
Riscos de segurança
Por padrão, qualquer entidade com um AccessKey válido pode chamar a OpenAPI de qualquer endereço IP. Um AccessKey vazado — seja por configuração incorreta, credenciais embutidas no código-fonte ou desligamento de funcionário — concede ao invasor controle direto sobre seus recursos na nuvem. Isso pode resultar em roubo de dados, exclusão maliciosa ou cobranças inesperadas.
Como funciona
Uma política do RAM com a condição acs:SourceIp restringe as chamadas de API a IPs confiáveis, como o IP de saída da sua empresa ou o IP de um Bastionhost. Mesmo se houver vazamento de um AccessKey, as chamadas só terão sucesso se partirem desses endereços.
Se acs:SourceIp listar vários IPs ou intervalos CIDR, a avaliação usará lógica OR: a chamada terá sucesso se o IP de origem corresponder a qualquer entrada.
Limitações
Apenas usuários RAM: As políticas de restrição de IP de origem aplicam-se exclusivamente a usuários RAM, não à conta Alibaba Cloud.
Apenas IPs públicos: A condição
acs:SourceIpavalia o IP público de saída do chamador ou o IP de saída do NAT Gateway, e não o IP privado dentro de uma VPC.
Pré-requisitos
Verifique se você tem:
Uma conta Alibaba Cloud com permissões de administrador do RAM.
O endereço IP de saída ou intervalo CIDR a permitir (por exemplo, o IP de saída da sua empresa ou o IP de um Bastionhost).
Restringir IPs de origem pelo console do RAM
Etapa 1: Crie um usuário RAM
As políticas de restrição de IP de origem vinculam-se a usuários RAM, e não à conta Alibaba Cloud.
Faça login no console do RAM com uma conta Alibaba Cloud ou como administrador do RAM.
No painel de navegação à esquerda, escolha Identities > Users.
Na página Users, clique em Create User, insira as informações do usuário, clique em OK e conclua a verificação de segurança.
Etapa 2: Crie uma política personalizada
No painel de navegação à esquerda, escolha Permissions > Policies.
Na página Access Policies, clique em Create Policy.
-
Na página Create Policy, clique na aba JSON e insira a seguinte política:
Campo
Descrição
Exemplo
ActionOperações a permitir. Use
ecs:*para todas as operações do ECS ou*para todos os serviços de nuvem."ecs:*"acs:SourceIpIPs ou intervalos CIDR permitidos. Múltiplas entradas usam lógica OR: a chamada tem sucesso se o IP de origem corresponder a qualquer entrada.
"200.1.1.0/24","213.1.2.3"{ "Version": "1", "Statement": [ { "Action": "ecs:*", "Resource": "*", "Effect": "Allow", "Condition": { "IpAddress": { "acs:SourceIp": [ "200.1.xxx.xxx/24", "213.1.xxx.xxx" ] } } } ] }Substitua os valores de espaço reservado antes de salve a política.
Insira um Policy Name (por exemplo,
RestrictIPAccess), adicione uma descrição opcional, clique em OK e conclua a verificação de segurança.
Etapa 3: Vincular a política ao usuário RAM
No painel de navegação à esquerda, escolha Identities > Users.
Na página Users, localize o usuário RAM desejado e clique em Add Permissions na coluna Actions.
No painel Grant Permission, selecione a política e clique em Grant Permissions.
Restringir IPs de origem pela API
Chame as seguintes operações da API do RAM em sequência:
-
Chame CreateUser para crie um usuário RAM:
UserName: O nome de login.DisplayName: O nome de exibição.
-
Chame CreatePolicy para crie a política:
PolicyName: O nome da política, comoRestrictIPAccess.PolicyDocument: O documento de política JSON com os IPs permitidos no campoacs:SourceIp.
-
Chame AttachPolicyToUser para vincular a política ao usuário RAM:
PolicyType:Custom.PolicyName: Por exemplo,RestrictIPAccess.UserName: Por exemplo,TestUser.
Conformidade
Use os scripts abaixo com a Alibaba Cloud CLI para auditar e corrigir restrições de IP de origem em todos os usuários RAM.
Verificação: encontrar usuários RAM sem restrição de IP de origem
Lista todos os usuários RAM sem a política especificada vinculada.
#!/bin/bash
# Replace with your policy name and ARN.
POLICY_NAME="RestrictIPAccess"
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')
for USER in $USER_LIST; do
POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyName')
if ! echo "$POLICIES" | grep -q "$POLICY_NAME"; then
echo "User $USER is not attached to policy $POLICY_ARN"
fi
done
Correção: vincular restrição de IP de origem a usuários RAM em massa
Vincula a política a todos os usuários RAM que ainda não a possuem.
#!/bin/bash
# Replace with your policy name and ARN.
POLICY_NAME="RestrictIPAccess"
POLICY_ARN="acs:ram::123456789012:policy/RestrictIPAccess"
USER_LIST=$(aliyun ram ListUsers | jq -r '.Users.User[].UserName')
for USER in $USER_LIST; do
POLICIES=$(aliyun ram ListPoliciesForUser --UserName $USER | jq -r '.Policies.Policy[].PolicyName')
if ! echo "$POLICIES" | grep -q "^${POLICY_NAME}$"; then
echo "Attaching policy $POLICY_ARN to user $USER ..."
aliyun ram AttachPolicyToUser \
--PolicyType Custom \
--PolicyName $POLICY_NAME \
--UserName $USER
if [ $? -eq 0 ]; then
echo "Policy attached to $USER."
else
echo "Failed to attach policy to $USER. Check your permissions or verify the policy exists."
fi
else
echo "User $USER already has the policy. Skipping."
fi
done