如何解决获取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]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。