我想以编程方式获取允许用户跨AWS服务执行的所有操作。 我尝试摆弄Simulator_principal_policy,但似乎此方法需要所有操作的列表,并且我不想维护硬编码的列表。
例如,我还尝试使用iam:*进行调用,并得到了通用的“ implicitDeny”响应,因此我知道用户不允许执行所有操作,但是我需要更高的操作粒度。
关于如何动态获取操作列表的任何想法? 谢谢!
答案 0 :(得分:1)
首先,没有无法以编程方式检索所有可能的动作(无论是否允许使用动作)。
在检查安全性之前,您需要构造一个可能的操作列表。例如,用于Python的boto3
SDK包含一个内部命令列表,可用于在将命令发送到AWS之前对其进行验证。
一旦执行了特定的操作,就可以使用Access the Policy Simulator API来验证是否允许给定的用户进行特定的API调用。这比尝试解析与给定用户相关联的各种Allow
和Deny
权限要容易得多。
但是,根据呼叫的特定参数,呼叫可能会被拒绝。例如,用户可能具有终止任何具有特定标签的Amazon EC2实例的权限,但无法终止 all 实例。为了正确测试,需要向仿真提供InstanceId
。
此外,权限可能会受到IP地址甚至时间的限制。因此,尽管用户有权调用某个操作,但是在何时何地调用它会影响该操作是否被允许。
底线:这并不容易! AWS将在通话时验证权限。使用策略模拟器获得类似的验证结果。
答案 1 :(得分:0)
我很惊讶没有人正确回答这个问题。这是使用 boto3
直接解决 OP 问题的代码:
import boto3
session = boto3.Session('us-east-1')
for service in session.get_available_services ():
service_client = session.client (service)
print (service)
print (service_client.meta.service_model.operation_names)
但是,IAM 是一种特殊情况,因为它不会在上面的 get_available_services()
调用中列出:
IAM = session.client ('iam')
print ('iam')
print (IAM.meta.service_model.operation_names)