我试图将元数据存储到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);
我如何检索临时“承担角色用户”的标签?
答案 0 :(得分:1)
我将如何检索临时“承担角色用户”的标签?
这个问题是基于对标签用途的误解。标签用于进一步允许/拒绝访问资源。它们不用作存储元数据的画布。 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]