我可以针对特定操作搜索现有IAM策略吗?

时间:2016-07-08 15:40:13

标签: amazon-web-services amazon-iam

在AWS IAM中,有没有办法通过脚本或在Web控制台中查找哪些现有策略包含给定的操作?

例如,我希望允许角色myRole访问我所有EC2实例上的DescribeTags操作。我知道我可以使用适当的规则创建自己的策略,但是如果存在这样的事情,我希望使用现有的Amazon策略。

3 个答案:

答案 0 :(得分:1)

这是一篇旧帖子,但它可能对某些人有帮助......尽管别人说过,你可以这样做。它只需要一些脚本。

您可以使用AWS CLI执行以下操作。

  1. 获取策略的ARN并存储在policies_arn数组中。

    mapfile -t policies_arn < <(aws iam list-policies --query 'Policies[*].[Arn]' --output text)

  2. 获取policies_ver数组中每个策略和存储的VersionIds。

    mapfile -t policies_ver < <(aws iam list-policies --query 'Policies[*].[DefaultVersionId]' --output text)

  3. 使用for循环遍历每个策略并将策略文档存储在policies.txt

    for (( i=0; i<${#policies_arn[@]}; i++ )); do echo ${policies_arn[i]} >> policies.txt && aws iam get-policy-version --policy-arn ${policies_arn[i]} --version-id ${policies_ver[i]} --output json >> policies.txt; done

  4. 在文本编辑器中打开policies.txt并搜索您的操作。

  5. 注意:根据您的CLI配置,您可能需要--output text参数,也可能不需要.sh参数。但是,输出必须是文本(而不是JSON)才能使其正常工作。

    从那里,您可以轻松地将其转换为arn:aws:iam::123456789012:policy/DenyAllAccess { "PolicyVersion": { "CreateDate": "2016-12-06T18:40:51Z", "VersionId": "v1", "Document": { "Statement": [ { "Action": "*", "Effect": "Deny", "Resource": "*" } ], "Version": "2012-10-17" }, "IsDefaultVersion": true } } shell脚本。

    示例输出:

    UserDefaults.standard

    干杯!

答案 1 :(得分:0)

是的,您可以在Web控制台中搜索可用的策略,请查看下面的屏幕截图。

enter image description here

答案 2 :(得分:0)

要详细说明我对https://stackoverflow.com/a/43128660/447862的理解,重要的是要从每个策略的默认版本中获取JSON。由于我的计算机没有INSERT into X (str_to_date(REPLACE(date, 'UTC', ''), '%a %M %d %T %Y')) SELECT date FROM Y,因此我选择使用Python。

mapfile

将其保存为import boto3, json, sys iam = boto3.client('iam') policy_arn = sys.argv[1] policy_name = policy_arn.split('/')[-1] version = iam.get_policy(PolicyArn=policy_arn)['Policy']['DefaultVersionId'] policy_version = iam.get_policy_version(PolicyArn=policy_arn, VersionId=version) policy_document = policy_version['PolicyVersion']['Document'] with open(f"{policy_name}.json", 'w') as outfile: outfile.write(json.dumps(policy_document, indent=2)) outfile.write('\n') ,现在我可以将每个策略文档写入其自己的文件,并根据需要进行尽可能多的搜索。

aws-iam-policy-dump.py

通过使用Python完成所有操作,这可能会更快,但是这种混合方法对我来说已经足够了。