获取STS承担角色用户标签

问题描述

我试图将元数据存储到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);

我如何检索临时“承担角色用户”的标签?

解决方法

我将如何检索临时“承担角色用户”的标签?

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

使用会话凭据发出后续请求时,请求上下文包括aws:PrincipalTag上下文密钥。您可以使用策略的Condition元素中的aws:PrincipalTag键来基于这些标签允许或拒绝访问。 See more here

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

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

在角色创建期间:

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

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

[generatedId]:metadata=test[moreData]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...