Todos os produtos
Search
Central de documentação

Resource Access Management:Prevent the confused deputy problem with external IDs

Última atualização: Jun 26, 2026

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/MonitorRole para acessar minha conta."

  • Um invasor, também cadastrado no serviço do Deputy, solicita: "Assuma a função acs:ram::CustomerA_AccountId:role/MonitorRole para 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

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

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

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

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

  2. 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ça abcd1234 como 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.

  3. Quando o Deputy assume a função para acessar os recursos de Customer_Account, ele fornece abcd1234 como external ID. Especificamente, define o parâmetro ExternalId como abcd1234 na solicitação AssumeRole.

    Para obter mais informações, consulte AssumeRole.

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