我正在寻找一种方法来列出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提供了一个策略生成器,它自己知道当前时间点上所有可能的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
我喜欢Trentium的答案,但它需要维护。
我想我将使用AWS策略生成器调用Policy.js文件
每个服务的可用操作都在这些服务的文档中,例如IAM操作列表在IAM文档中,EC2操作列表在EC2文档中。
遇到了同样的问题,只是在寻找与AWS Service IAM相关的操作。解决者:
- 为Javascript提取AWS SDK(请参阅https://sdk.amazonaws.com/builder/js/)
- 将生成的缩小后的javascript文件(aws-sdk-2.680.0.min.js)作为小型自定义HTML文档的一部分加载
- 编写一个javascript函数,该函数接受所需的服务,并在对象
AWS.apiLoader.services[ 'iam' ][ Version ].operations
中循环,提取Actions列表。(请注意,"版本"的格式为yyyy-mm-dd
,在缩小的javascript文件中,每个AWS服务只有一个条目。) - 正在导出结果
希望有人觉得这很有帮助,因为这是我能够通过编程获得与AWS服务相关的操作的全面列表的唯一方法。。。
IAM参考文档中提供了每个服务可用的所有操作列表:
https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_actions-resources-contextkeys.html
定义了行动、资源和适用条件。
如果您的机器上安装了节点,只需在终端中键入npx get-aws-actions
即可。无需安装任何东西。此npx命令从AWS策略生成器文件https://awspolicygen.s3.amazonaws.com/js/policies.js
中获取操作,并支持文本搜索以精确定位特定AWS服务的操作(例如,搜索s3:
以列出所有S3操作)。
我很恼火没有简单的方法可以做到这一点,所以我构建了一个python实用工具,它从https://awspolicygen.s3.amazonaws.com/js/policies.js
获取数据并将其翻译成python词典。它还处理本地文件的缓存,这样在运行一次命令后运行该命令就不会花费太长时间。
获取列表的简单方法:
pip install pyiamvortex
pyiamvortex get-aws-actions
参考:
- https://pypi.org/project/pyiamvortex/
- https://github.com/nbajoel/pyiamvortex
Fluggo的服务授权参考scraper是官方服务授权参考文档的机器可读版本。
GitHub回购历史记录显示了策略更改的审计跟踪。
下面是一个如何使用它的例子
保存身份验证引用。
curl
--silent
--show-error
--url 'https://raw.githubusercontent.com/fluggo/aws-service-auth-reference/master/service-auth.json'
> /tmp/auth.json
搜索以"结尾的IAM动作;角色";。
cat /tmp/auth.json
| jq --raw-output '
.[]
| {service: .servicePrefix} + (.actions[] | {action: .name})
| select(.service == "iam" and (.action | match("Role$")))
| "(.service):(.action)"
'
输出:
iam:CreateRole
iam:CreateServiceLinkedRole
iam:DeleteRole
iam:DeleteServiceLinkedRole
iam:GetRole
iam:ListInstanceProfilesForRole
iam:PassRole
iam:TagRole
iam:UntagRole
iam:UpdateRole
我发现,允许iam:*Role
并不是允许正常角色执行所有生命周期操作的好方法,因为它允许CreateServiceLinkedRole
和PassRole
之类的操作。