Quando um fornecedor terceirizado gerencia recursos em várias contas de clientes, um invasor pode explorar essa configuração para acessar recursos sem autorização — um padrão conhecido como problema de confused deputy. Os external IDs permitem que os clientes vinculem um token exclusivo à política de confiança de uma função do RAM. Assim, o fornecedor terceirizado precisa provar que age em nome do cliente correto antes de assumir a função.
Como o ataque funciona
Considere um fornecedor terceirizado chamado Deputy que gerencia recursos de nuvem — como auditoria de logs, rastreamento de custos ou monitoramento de segurança — em diversas contas de clientes. Cada cliente cria uma função do RAM na própria conta, designa Deputy_Account como entidade confiável e concede as permissões necessárias à função.
Sem external IDs, a política de confiança apresenta a seguinte estrutura:
O Cliente A informa ao Deputy: "Assuma a função
acs:ram::CustomerA_AccountId:role/MonitorRolepara acessar minha conta."Um invasor, também cadastrado no serviço do Deputy, solicita: "Assuma a função
acs:ram::CustomerA_AccountId:role/MonitorRolepara acessar minha conta."
Como o Deputy não consegue verificar para qual conta age legitimamente, ele assume a função do Cliente A mediante solicitação do invasor e concede acesso aos recursos do Cliente A. Esse cenário caracteriza o problema de confused deputy: uma entidade confiável é enganada e executa operações não autorizadas em nome de uma parte maliciosa. O RAM fornece external IDs para evitar essa situação. Para obter mais informações, consulte AssumeRole.
Como funcionam os external IDs
O Deputy gera um external ID aleatório e exclusivo para cada cliente. Esse id não é secreto; seu valor de segurança deriva da singularidade e da vinculação a um cliente específico, não da confidencialidade. Qualquer pessoa com permissão para visualizar a função pode ver o external ID.
Cada cliente adiciona o external ID à política de confiança da função do RAM que o Deputy assumirá. A política exige que qualquer chamador apresente esse external ID ao assumir a função.
Ao chamar AssumeRole para assumir a função de um cliente, o Deputy transmite o external ID atribuído a esse cliente. Se o id estiver ausente ou não corresponder ao definido na política de confiança, a chamada falhará. Isso bloqueia a tentativa do invasor mesmo que ele forneça o ARN da função correto.
Configure external IDs
Neste exemplo, o fornecedor terceirizado é o Deputy com a conta Deputy_Account, a conta do cliente é Customer_Account e o external ID atribuído pelo Deputy a este cliente é abcd1234.
-
Em Customer_Account, crie uma função do RAM com Deputy_Account como entidade confiável e conceda as permissões necessárias à função.
Para obter mais informações, consulte Create a RAM role for a trusted Alibaba Cloud account e Grant permissions to a RAM user.
-
Edite a política de confiança da função do RAM para adicionar uma condição
ExternalId. Essa condição exige que qualquer chamador forneçaabcd1234como external ID.{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::<deputy-accountId>:root" ] }, "Condition": { "StringEquals": { "sts:ExternalId": "abcd1234" } } } ], "Version": "1" }Para obter mais informações, consulte Edit the trust policy of a RAM role.
-
Quando o Deputy assume a função para acessar os recursos de Customer_Account, ele fornece
abcd1234como external ID. Especificamente, define o parâmetroExternalIdcomoabcd1234na solicitação AssumeRole.Para obter mais informações, consulte AssumeRole.
O Deputy utiliza o token do Security Token Service (STS) retornado pelo AssumeRole para acessar os recursos em Customer_Account.
Verifique a configuração
Após adicionar a condição ExternalId, verifique se a proteção está ativa tentando chamar o AssumeRole sem um external ID. A chamada deve falhar com um erro de acesso negado. Caso tenha sucesso, a condição não foi aplicada corretamente. Revise a política de confiança e confirme se sts:ExternalId aparece no bloco Condition.
Notas de uso
Gere um external ID por conta de cliente. Use uma string aleatória para evitar previsibilidade.
Os external IDs não são confidenciais. Seu valor de segurança reside na singularidade e na vinculação, não no sigilo. Não dependa do sigilo do external ID como controle de segurança.
Referências
Use a RAM role to grant permissions across Alibaba Cloud accounts