本文为您介绍ExternalId的应用场景、使用流程和操作步骤。
应用场景
企业有时需要使用第三方供应商提供的服务来管理其云环境,例如:日志审计、成本管理、安全监控等场景。在这些场景下,企业会给予第三方供应商访问其云上资源的权限,这里就涉及到跨账号访问。阿里云RAM提供了角色扮演(AssumeRole)的能力,用于解决跨账号访问的问题。
由于第三方供应商可能需要同时访问多个客户的多个阿里云账号,如果处理不当容易被攻击者利用,骗过供应商伪装成其他客户,即发生混淆代理人问题。混淆代理人问题是一个安全问题,是指一个受信任的实体被恶意实体欺骗或误导,执行了未经授权的操作。这个恶意实体就是一个“混淆代理”,通过欺骗受信任的实体来实施自己的目的。阿里云RAM提供ExternalId防止混淆代理人问题。更多信息,请参见AssumeRole。
使用流程
第三方供应商应该为他的每个客户生成唯一的ExternalId,并确保ExternalId是一个随机字符串,即不容易被猜测出来。
客户获取到第三方供应商提供的ExternalId后,将该ExternalId加入到提供给该供应商使用的角色的信任策略中。
第三方供应商通过调用AssumeRole接口扮演角色的时候,需要提供颁发给这个客户的ExternalId,不提供或者提供错误都会失败。
操作步骤
本示例中,第三方供应商Deputy需要使用自己的阿里云账号Deputy_Account访问客户的阿里云账号Customer_Account的资源,为确保安全性,第三方供应商Deputy为客户提供唯一的ExternalId为abcd1234。
客户在阿里云账号Customer_Account中创建一个可信实体为阿里云账号Deputy_Account的RAM角色,并按需为RAM角色授予相应的权限策略。
具体操作,请参见创建可信实体为阿里云账号的RAM角色和为RAM角色授权。
修改RAM角色信任策略,指定扮演角色的可信实体必须满足
ExternalId
为abcd1234
这个条件。{ "Statement": [ { "Action": "sts:AssumeRole", "Effect": "Allow", "Principal": { "RAM": [ "acs:ram::<deputy-accountId>:root" ] }, "Condition": { "StringEquals": { "sts:ExternalId": "abcd1234" } } } ], "Version": "1" }
具体操作,请参见修改RAM角色的信任策略。
当第三方供应商需要扮演角色访问客户账号时,需要提供匹配的ExternalId。
本示例中,调用AssumeRole接口的请求参数中必须指定
ExternalId
为abcd1234
。第三方供应商Deputy通过生成的STS Token访问客户账号Customer_Account中的资源。