使用ExternalId防止混淆代理人问题

本文为您介绍ExternalId的应用场景、使用流程和操作步骤。

应用场景

企业有时需要使用第三方供应商提供的服务来管理其云环境,例如:日志审计、成本管理、安全监控等场景。在这些场景下,企业会给予第三方供应商访问其云上资源的权限,这里就涉及到跨账号访问。阿里云RAM提供了角色扮演(AssumeRole)的能力,用于解决跨账号访问的问题。

由于第三方供应商可能需要同时访问多个客户的多个阿里云账号,如果处理不当容易被攻击者利用,骗过供应商伪装成其他客户,即发生混淆代理人问题。混淆代理人问题是一个安全问题,是指一个受信任的实体被恶意实体欺骗或误导,执行了未经授权的操作。这个恶意实体就是一个“混淆代理”,通过欺骗受信任的实体来实施自己的目的。阿里云RAM提供ExternalId防止混淆代理人问题。更多信息,请参见AssumeRole

使用流程

  1. 第三方供应商应该为他的每个客户生成唯一的ExternalId,并确保ExternalId是一个随机字符串,即不容易被猜测出来。

  2. 客户获取到第三方供应商提供的ExternalId后,将该ExternalId加入到提供给该供应商使用的角色的信任策略中。

  3. 第三方供应商通过调用AssumeRole接口扮演角色的时候,需要提供颁发给这个客户的ExternalId,不提供或者提供错误都会失败。

操作步骤

本示例中,第三方供应商Deputy需要使用自己的阿里云账号Deputy_Account访问客户的阿里云账号Customer_Account的资源,为确保安全性,第三方供应商Deputy为客户提供唯一的ExternalId为abcd1234。

  1. 客户在阿里云账号Customer_Account中创建一个可信实体为阿里云账号Deputy_Account的RAM角色,并按需为RAM角色授予相应的权限策略。

    具体操作,请参见创建可信实体为阿里云账号的RAM角色为RAM角色授权

  2. 修改RAM角色信任策略,指定扮演角色的可信实体必须满足ExternalIdabcd1234这个条件。

    {
      "Statement": [
        {
          "Action": "sts:AssumeRole",
          "Effect": "Allow",
          "Principal": {
            "RAM": [
              "acs:ram::<deputy-accountId>:root"
            ]
          },
          "Condition": {
            "StringEquals": {
              "sts:ExternalId": "abcd1234"
            }
          }
        }
      ],
      "Version": "1"
    }

    具体操作,请参见修改RAM角色的信任策略

  3. 当第三方供应商需要扮演角色访问客户账号时,需要提供匹配的ExternalId。

    本示例中,调用AssumeRole接口的请求参数中必须指定ExternalIdabcd1234

  4. 第三方供应商Deputy通过生成的STS Token访问客户账号Customer_Account中的资源。

相关文档

跨阿里云账号的资源授权