boto3获取每项服务的可用操作

时间:2018-08-20 11:47:51

标签: python amazon-web-services boto3

我想以编程方式获取允许用户跨AWS服务执行的所有操作。 我尝试摆弄Simulator_principal_policy,但似乎此方法需要所有操作的列表,并且我不想维护硬编码的列表。

例如,我还尝试使用iam:*进行调用,并得到了通用的“ implicitDeny”响应,因此我知道用户不允许执行所有操作,但是我需要更高的操作粒度。

关于如何动态获取操作列表的任何想法? 谢谢!

2 个答案:

答案 0 :(得分:1)

首先,没有无法以编程方式检索所有可能的动作(无论是否允许使用动作)。

在检查安全性之前,您需要构造一个可能的操作列表。例如,用于Python的boto3 SDK包含一个内部命令列表,可用于在将命令发送到AWS之前对其进行验证。

一旦执行了特定的操作,就可以使用Access the Policy Simulator API来验证是否允许给定的用户进行特定的API调用。这比尝试解析与给定用户相关联的各种AllowDeny权限要容易得多。

但是,根据呼叫的特定参数,呼叫可能会被拒绝。例如,用户可能具有终止任何具有特定标签的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)