无需为每个客户(帐户)创建单独的角色,但您应确保正确处理外部 ID。
对于您的每个客户,您应该创建仅在您和该特定客户之间共享的外部 ID,以防止混淆代理问题。
一旦您为所有客户设置了外部 ID,您就可以修改角色的信任政策,为您的每个客户添加单独的声明,您可以在其中检查它是否是受信任的委托人(帐户 ID)以及是否对应的外部 ID 已作为参数传递给 sts:assumeRole 调用。
假设您有一个可以由两个客户担任的角色。第一个帐户的 ID 是 1111,该客户的外部 ID 是 aaaa。第二个帐户的 ID 是 2222,该客户的外部 ID 是 bbbb。您的信任政策应如下所示。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::1111:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "aaaa"
}
}
},
{
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::2222:root"
},
"Action": "sts:AssumeRole",
"Condition": {
"StringEquals": {
"sts:ExternalId": "bbbb"
}
}
}
]
}
请注意,您可能希望对外部 ID 使用 GUID,而不是 aaaa 或 bbbb。