boto3获取每个服务可用操作

5
我希望能够以编程方式获取用户在AWS服务中允许执行的所有操作列表。 我尝试使用simulate_principal_policy,但该方法需要所有操作的列表,而我不想维护一个硬编码列表。
我也尝试使用例如iam:*等调用该方法,但得到了通用的“implicitDeny”响应,因此我知道用户不被允许执行所有操作,但我需要更高粒度的操作。
有什么想法可以动态获取操作列表吗? 谢谢!

1
你为什么想要获取这个列表? - John Rotenstein
1
@JohnRotenstein,这关你什么事?如果你没有知识可以分享,就不要留下毫无帮助的评论。 - Lewis Bushman
一个IAM用户可以拥有:1.内联策略,2.托管策略和3.IAM组附加到它。您需要调用一堆API来获取所有信息。其中一些API是:get_user_policylist_groups_for_user(列出附加到用户的组)和list_attached_user_policies(列出附加到用户的托管策略)。从这些中,您需要调用相应的API来获取附加到它们的权限。 - krishna_mee2004
1
@Idanski 我提出这个问题是因为很多人常常问如何完成某个特定任务以实现一个未明确说明的“终极目标”,而实现“终极目标”可能有其他(更好的)方法。了解终极目标意味着我们可以提供更合适的答案来帮助您实现目标。例如,有人可能会问如何使用CloudWatch来终止EC2实例,而他们真正应该使用的是自动缩放。了解他们的目标让我们能够推荐更好的行动方案。参见:5 Whys - John Rotenstein
我没有留下第二条评论。我想说的是,我的最终目标是获得给定服务的所有可用操作列表,而无需手动维护它,以防亚马逊引入新的操作。谢谢! - Idanski
2个回答

4
我很惊讶没有人正确回答这个问题。以下是使用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)

我在 IAM 的 operation_names 中没有看到 PassRole。 - Hasani Blackwell

0
首先,没有编程方法可以检索所有可能的操作(无论它们是否被允许使用)。在检查安全性之前,您需要构建可能操作的列表。例如,Python的boto3 SDK包含一个内部命令列表,用于在将命令发送到AWS之前验证命令。
一旦您有了特定的操作,您可以使用 访问策略模拟器API来验证给定用户是否被允许进行特定API调用。这比尝试解析与给定用户相关的各种允许和拒绝权限要容易得多。
但是,基于调用的特定参数,调用可能会被拒绝。例如,用户可能具有终止具有特定标记的任何Amazon EC2实例的权限,但不能终止所有实例。为了正确测试这一点,需要提供InstanceId来进行模拟。
此外,权限可能会受到IP地址甚至时间限制的限制。因此,虽然用户有权限调用某个操作,但他们在何处以及何时执行该操作将对该操作是否被允许产生影响。
底线是:AWS将在调用时验证权限。使用“策略模拟器”可获得类似的验证结果。

谢谢,我知道政策模拟器。 我感兴趣的是如何维护可能操作的列表。 - Idanski

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接