使用AWS API:给IAM用户,获取当前有效的IAM策略文档

如何解决使用AWS API:给IAM用户,获取当前有效的IAM策略文档

我很难找到正确的API调用来回答这个问题:给定一个IAM用户,管理该用户的有效IAM政策文档是什么?

看来我可以结合几个API调用并在客户端中串联策略来完成上述操作:

  1. aws iam list-groups-for-user --user-name my-user
  2. 对于每个返回的组:aws iam list-attached-group-policies --group-name my-group
  3. aws iam list-attached-user-policies --user-name my-user
  4. 从步骤2和步骤3返回的串联策略。
  5. 对于每个策略:aws iam get-policy --policy-arn my-policy-arn
  6. 然后针对每个策略再次:​​aws iam get-policy-version --policy-arn my-policy-arn -version-id my-version

这至少是5个API调用,最多是无限数量的调用。我甚至都不愿写这个逻辑,因为用户属于几个组,而这些组包含数十个或数百个策略是很常见的。

我肯定在某个地方缺少一个API端点吗?

类似这样的内容:aws iam get-effective-user-policy --user-name my-user

解决方法

AWS并不真正支持此功能,因为IAM负责人可以执行的操作分布在整个AWS上。它们没有存储在任何地方。发出请求时会应用访问决策,因此您应该从发出请求的角度考虑IAM策略。

AWS API收到请求后,this is what kicks in at a high level以确定呼叫是否被授权:

  • 基于身份的策略(附加到用户,其组或角色的策略)
  • 基于资源的策略(用户请求的资源附带的策略;例如S3存储桶或EC2实例)
  • IAM权限限制
  • 服务控制策略(SCP)(通过AWS组织定义)
  • 会话策略(在通过临时凭据和AssumeRole创建会话时适用)

以上每种方法都需要Allow操作,以便授予用户访问权限。

因此,您看到,所授予的实际访问权限分布在相当多的地方。上面的列表也仅适用于单个帐户。跨帐户访问更加分散。

如果您仅对基于​​身份的策略感兴趣,那么您正在执行的API调用将涵盖该策略,但是其他任何一个都可能具有Deny效果,即使基于身份的策略也无法采取措施政策允许采取这种措施,因此您只会得到部分了解。

根据您使用它的目的,我会尝试不提前全面了解用户的访问情况,因为实际上您将要为每个用户查询每个AWS服务。安全审核是个例外,在这种情况下,会有slew of tools会尝试为您执行此操作,但是要注意:IAM是一个复杂的野兽,审核是一个棘手的问题。

,

如果您仅对某些AWS服务的权限感兴趣,则还可以考虑使用以下命令。但是,我认为您不会在一个API调用中找到“一站式服务”来获取所有权限。

aws iam list-policies-granting-service-access

,

我不了解您的用例,但是根据我的经验,大多数用例都可以还原。为了检查策略是否合规,请检查用户是否具有关键权限,...在您的情况下可能不适用,但我仍然喜欢共享它。

为了检查这些事情,可以使用AWS Config评估用户是否有权调用一组特定的操作。可以使用AWS IAM策略模拟器API来完成。

https://docs.aws.amazon.com/IAM/latest/APIReference/API_SimulatePrincipalPolicy.html

,

不一定要有一个有效的用户策略。实际上,所应用的策略是直接或通过组分配给该IAM用户的所有策略的总和。取决于您的实际用例,它可能是一个策略文件,也可能不是。

请记住,如果一个允许操作的规则与另一个拒绝操作的规则之间存在冲突,则拒绝规则将获胜。

您可以模拟用户是否能够在IAM控制台中执行某些操作。

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

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 <select id="xxx"> SELECT di.id, di.name, di.work_type, di.updated... <where> <if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 <property name="dynamic.classpath" value="tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams['font.sans-serif'] = ['SimHei'] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -> systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping("/hires") public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate<String
使用vite构建项目报错 C:\Users\ychen\work>npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-