【问题标题】:Is there a way to programmatically list all of the available actions for an AWS service?有没有办法以编程方式列出 AWS 服务的所有可用操作?
【发布时间】:2022-02-04 13:22:23
【问题描述】:

我正在寻找一种方法来列出可在 AWS IAM 策略中使用的所有操作。

这是一个使用 IAM 操作的示例策略:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1457442845000",
            "Effect": "Allow",
            "Action": [
                "iam:CreatePolicy",
                "iam:CreatePolicyVersion",
                "iam:GetGroupPolicy",
                "iam:CreateGroup",
                "iam:GetPolicy",
                "iam:GetPolicyVersion",
                "iam:GetRolePolicy",
                "iam:ListAttachedGroupPolicies"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

我想搜索文件中的操作,为此我想拥有所有可用的操作。我还没有找到获得该列表的方法。任何方向表示赞赏。

【问题讨论】:

    标签: amazon-web-services amazon-iam


    【解决方案1】:

    我喜欢 Trentium 的答案,但它需要维护。

    我想我会使用AWS Policy Generator 调用policies.js 文件

    【讨论】:

    • 关于需要维护,AWS 服务操作或 IAM 策略操作的任何时间点查询都需要持续维护。 AWS 不断增强他们的服务,因此一直在添加新的操作。我在多个场合都看到过这种情况,例如使用 Athena 和 QuickSight,在几周的时间里,新的服务操作变得可用。如果 IAM 或 Orgs 策略默认配置为 ALLOW 且异常配置为 DENY,则特别有必要密切关注这些更改。
    【解决方案2】:

    每个服务的可用操作在这些服务的文档中,例如 IAM 操作列表在 IAM documentation 中,EC2 操作列表在 EC2 documentation 中。

    【讨论】:

    • 也可以让他们进入 IAM 控制台并创建策略。这是了解它是“ListBucket”还是“ListBuckets”的好方法。 (答案:是的。两者都有。)
    • 并非所有策略都存在于 IAM 命名空间中。像 S3 或 ECR 这样在资源本身上定义策略的东西真的很难找到比一般允许一切策略示例更多的东西。
    • @btilford 很难找到资源级别策略的好例子,但可接受的字段都记录在该特定服务的文档下。我提供的 IAM 链接指向 IAM 特定操作。我没有说所有政策都可用,我说这是记录所有 IAM 服务操作的地方,您可以查看其他服务以查看其操作列表。
    • 在 IAM 参考页面中可以更轻松地找到对所有可用操作的引用:docs.aws.amazon.com/IAM/latest/UserGuide/…
    【解决方案3】:

    亚马逊提供了一个策略生成器,它自己知道当前时间点所有可能的 API 和操作。

    可以从 AWS 策略生成器policies.js 生成操作列表:

    curl --header 'Connection: keep-alive' \
         --header 'Pragma: no-cache' \
         --header 'Cache-Control: no-cache' \
         --header 'Accept: */*' \
         --header 'Referer: https://awspolicygen.s3.amazonaws.com/policygen.html' \
         --header 'Accept-Language: en-US,en;q=0.9' \
         --silent \
         --compressed \
         'https://awspolicygen.s3.amazonaws.com/js/policies.js' |
        cut -d= -f2 |
        jq -r '.serviceMap[] | .StringPrefix as $prefix | .Actions[] | "\($prefix):\(.)"' |
        sort |
        uniq
    

    【讨论】:

      【解决方案4】:

      遇到了同样的问题,除了寻找与 AWS 服务 IAM 相关的操作之外。解决者:

      • 为所有服务提取适用于 Javascript 的 AWS 开发工具包(请参阅 https://sdk.amazonaws.com/builder/js/)。
      • 将生成的缩小 javascript 文件 (aws-sdk-2.680.0.min.js) 作为小型自定义 HTML 文档的一部分加载。
      • 编写一个获取所需服务的 javascript 函数,并循环通过对象 AWS.apiLoader.services[ 'iam' ][ Version ].operations,拉取操作列表。 (请注意,“版本”的格式为yyyy-mm-dd,在缩小的 javascript 文件中,每个 AWS 服务只有一个条目。)
      • 导出结果。

      希望有人觉得这很有帮助,因为这是我能够以编程方式获取与 AWS 服务关联的操作的完整列表的唯一方法...

      【讨论】:

      • 我接受这一点,直到找到更好的方法。谢谢!
      • @Istvan,感谢您的支持,但自从我写下我的回复以来,我相信 Adam 最近对 policies.js 文件的回复更加准确和简单。事实上,早在 2020 年 8 月,在与 AWS 工程部门合作期间,他们就为我提供了 Adam 提到的 policies.js 链接,这是一个更简单的替代方案,其中包含所有可用的服务操作策略。 (顺便说一句,policies.js 文件与服务操作 API 略有不同,因为有一些 IAM 策略,例如 codecommit:GitPull,它们是 IAM 策略,但不是 API...)跨度>
      • 是的,我认为他的代码也很棒。谢谢@Trentium。
      • 有趣的讨论,在一位开发人员和 AWS 爱好者的帮助下,创建了 2 个 Lambda 函数来实现这一目标。 github.com/cloudframeworks/aws-api 1. getServiceNames 将返回所有有效的服务名称,排序。 2. getServiceActions 将返回对提供的服务名称进行排序的所有有效服务操作。我们更进一步,创建了一个 API Gateway HTTP API,将路由链接到这两个函数,现在只需快速调用 API 即可获取服务操作。有谁知道 AWS 是否会定期更新托管在其 S3 存储桶上的 policy.js 文件?
      • @NJITman,我们仍然使用 API 构建器来枚举 AWS 服务操作,但主要依靠 policy.js 文件来审查我们的自定义 IAM 角色策略。根据我上面的评论,是 AWS 工程将我们指向 policy.js 文件作为替代方案。随着 AWS 扩展其服务,我们不断在 policy.js 文件中发现新的服务操作和新的 IAM 权限操作。 (请注意,API 构建器不会包含 IAM 仅权限操作,例如 'iam:PassRole' 或 'codecommit:GitPull',因此 policy.js 文件更全面。)
      【解决方案5】:

      如果您的机器上安装了节点,只需在终端中输入npx get-aws-actions。无需安装任何东西。此 npx 命令从 AWS 策略生成器文件 https://awspolicygen.s3.amazonaws.com/js/policies.js 获取操作,并支持文本搜索以查明特定 AWS 服务的操作(例如,搜索 s3: 以列出所有 S3 操作)。

      【讨论】:

        【解决方案6】:

        可在此处的 IAM 参考文档中找到每个服务可用的所有操作的列表:

        https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_actions-resources-contextkeys.html

        定义了行动、资源和适用条件。

        【讨论】:

          猜你喜欢
          • 2016-07-31
          • 2020-05-13
          • 1970-01-01
          • 2011-11-22
          • 2021-08-28
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-02
          相关资源
          最近更新 更多