当前位置: 首页 > 知识库问答 >
问题:

使用者permissionsBoundary在使用Java SDK从AWS检索信息时返回NULL

严誉
2023-03-14

我正在使用AWS Java SDK v2列出使用AWS GitHub repo中定义的代码的用户。

 public static void listAllUsers(IamClient iam) {

    try {
        boolean done = false;
        String newMarker = null;

        while (!done) {
            ListUsersResponse response;

            ListUsersRequest request;
            if (newMarker == null) {
                request = ListUsersRequest.builder().build();
            } else {
                request = ListUsersRequest.builder()
                        .marker(newMarker).build();
            }

            response = iam.listUsers(request);

            for (User user : response.users()) {
                System.out.format("\n Retrieved user %s", user.userName());
                System.out.println("\nPermission Boundary: " + user.permissionsBoundary());
            }

            if (!response.isTruncated()) {
                done = true;
            } else {
                newMarker = response.marker();
            }
        }
    } catch (IamException e) {
        System.err.println(e);
        System.exit(1);
    }
}

它为用户返回NULL。permissionsBoundary()。下面是上面代码中print语句的输出。

 Retrieved user jamshaid
Permission Boundary: null

 Retrieved user luminadmin
Permission Boundary: null

 Retrieved user test
Permission Boundary: null

当我在AWS控制台上的AWS CloudShell中运行以下命令时,它将返回所定义用户的PermissionBoundary。

aws iam get-user --user-name test     

共有2个答案

秋和雅
2023-03-14

我已通过在AWS管理控制台中为IAM用户设置权限边界来确认此行为。我更改了ListUsers示例以包含以下代码:

 for(User user : response.users()) {
    System.out.format("\n Retrieved user %s", user.userName());
    AttachedPermissionsBoundary permissionsBoundary = user.permissionsBoundary();
    if (permissionsBoundary != null)
        System.out.format("\n Permissions boundary details %s", permissionsBoundary.permissionsBoundaryTypeAsString());
   }

...

permissionsBoundary()方法返回null即使设置了权限。这是一个错误。

我的建议是在这里记录Github问题:

https://github.com/aws/aws-sdk-java-v2

我还使用Kotlin SDK对此进行了测试。同样的结果。

suspend fun listAllUsers() {

        IamClient { region = "AWS_GLOBAL" }.use { iamClient ->
            val response = iamClient.listUsers(ListUsersRequest { })
            response.users?.forEach { user ->
                println("Retrieved user ${user.userName}")
                val permissionsBoundary = user.permissionsBoundary
                if (permissionsBoundary != null)
                    println("Permissions boundary details ${permissionsBoundary.permissionsBoundaryType.toString()}")

            }
        }
 }
西门经国
2023-03-14

我不认为这是一个问题,但程序化的行为。从API文档:

IAM资源列表操作返回资源可用属性的子集。例如,此操作不返回标记,即使它们是返回对象的属性。若要查看用户的所有信息,请参阅GetUser。

这在API javadocs中也有说明。

在控制台中,您使用的是获取用户,而不是列出用户,这就是为什么它会返回有关用户的所有信息,以及其中的权限边界。

请尝试使用:

aws iam list-users

并检查输出,它应该与JavaSDK获得的结果相匹配。

 类似资料:
  • 您好,这是代码,它确实检索用户信息,但当我将其转换为apk时,它不会检索任何用户信息。请帮忙: //ImageURL=new URL("https://graph.facebook.com/"userID"/图片?宽度="宽度"

  • 但是,在查看REST API文档时,会指出API在将选项卡发送给接收者时检索选项卡的原始值(originalValue)。 这正是我发现的行为。是否存在其他方法来检索签名者输入的数据?

  • 问题内容: 使用Python,如何以通用方式返回诸如CPU使用率,内存使用率(空闲,已使用等),进程计数等信息,以便可以在Linux,Windows,BSD等上运行相同的代码? 或者,如何仅在该操作系统确实是操作环境的情况下,在运行上述操作系统的代码的情况下,在上述所有系统上返回该信息? 问题答案: 关于跨平台:最好的选择是编写平台特定的代码,然后有条件地将其导入。例如 Anthony指出,对于特

  • null null 在简单的java应用程序中读取图像, 将图像转换为字节数组 将其存储到远程DB2数据库中(使用的技术不是imp,所以我现在使用的是纯jdbc) 从数据库回读它,并 将其转换回来,以确保图像作品的再创作。(我可以在任何图像查看器中打开重新创建的新图像) 问题 问题发生在步骤5。 null null null 我已经参考了以下链接进行验证1。在DB2中插入图像。这里的链接提供了洞察

  • 我一直在努力使用REST API响应处理Firebase响应。问题是我不想在Firebase中使用Android的libs,而是使用原始rest api。长话短说,Firebase的回应是: 改装接口: Gson Builder、改装Builder和RxJava: 执行此操作时,我会得到错误: 为了迭代来自服务器的对象列表,是否可以使用RxJava解决这个问题?从现在起,我期待一个数组,但fire

  • Q2 是否有任何其他健壮的方法,或者如果我可以使用页脚链接和我已经完成的方法来结束,如果一个页面肯定是一个联系我们的页面?