获取STS代入角色用户标签

Get STS Assume Role User Tags

我正在尝试将元数据存储到 STS“担任角色”会话中,以便在会话用户调用我的服务时检索它。

为此,我在 STS assumeRole 创建期间设置了一个标签:

AWSSecurityTokenService service = ...
AssumeRoleRequest request = new AssumeRoleRequest();
request.setTags(ImmutableList.of(new Tag().withKey("metadataKey").withValue("metadataValue")));
...
service.assumeRole(request);

在我的后端服务中,我收到与临时会话对应的调用方的用户名和 ARN。但是,我无法查找 IAM 用户的详细信息(其中包含标签)。

AmazonIdentityManagement iamClient = ...
GetUserRequest request = new GetUserRequest();
request.setUsername(...);
// this next line fails because the temporary user has a colon in the username
iamClient.getUser(request);

如何检索临时 'Assume Role user' 的标签?

How would I retrieve the Tags of a temporary 'Assume Role user'?

这个问题是基于对标签用途的误解。标签用于进一步允许/拒绝 访问 资源。它们不用作存储元数据的 canvas。 AWS 文档对此提供了支持:

When you use the session credentials to make a subsequent request, the request context includes the aws:PrincipalTag context key. You can use the aws:PrincipalTag key in the Condition element of your policies to allow or deny access based on those tags. See more here

无法从 IAM ARN 中查找临时会话用户,因为 AWS 没有存储持久数据。

但是,有一个解决方法,您可以可以使用“会话名称”字段存储有限的元数据。 AWS 在 ARN 中使用会话名称,因此实际上可以存储值,只要它们不是敏感信息即可。

角色创建期间:

AWSSecurityTokenService service = ...
request.setRoleSessionName("metadata=test");
service.assumeRole(request);

最后,用户ARN是这种格式,可以被其他服务读取

[generatedId]:metadata=test[moreData]