boto3 iam 客户端:按名称获取策略

Posted

技术标签:

【中文标题】boto3 iam 客户端:按名称获取策略【英文标题】:boto3 iam client: get policy by name 【发布时间】:2017-11-22 11:20:49 【问题描述】:

我正在尝试从 boto3 客户端获取策略,但没有使用策略名称的方法。通过将 create_policy 方法包装在 try-except 块中,我可以检查策略是否存在。除了列出所有策略并对其进行迭代之外,还有什么方法可以使用 boto3 按名称获取策略arn。

【问题讨论】:

【参考方案1】:

给定前缀(如果有的话,以及名称),ARN 应该是确定性的。

iam = session.client('iam')
sts = session.client('sts')

# Slow and costly if you have many pages
paginator = iam.get_paginator('list_policies')
all_policies = [policy for page in paginator.paginate() for policy in page['Policies']]
[policy_1] = [p for p in all_policies if p['PolicyName'] == policy_name]

# Fast and direct
account_id = sts.get_caller_identity()['Account']
policy_arn = f'arn:aws:iam::account_id:policy/policy_name'
policy_2 = iam.get_policy(PolicyArn=policy_arn)['Policy']

# They're equal except with the direct method you'll also get description field
all(policy_1[k] == policy_2[k] for k in policy_1.keys() & policy_2.keys())

【讨论】:

这不适用于 AWS 托管的策略,因为它们在 ARN 中没有帐号。例如,备受喜爱的 AdministratorAccess 策略具有以下 ARN:arn:aws:iam::aws:policy/AdministratorAccess。但是,它确实适用于任何客户管理的策略,但如果使用则应妥善保护。【参考方案2】:

您需要遍历策略以获取策略名称。我不知道仅使用策略名称的策略 ARN 的 get-policy 类型 api。

您是否有不想获得政策列表的原因?除了不下载列表。

【讨论】:

原因只是没有下载列表。当本地托管策略计数非常大时,可能需要多次迭代才能获得所有策略,这对我的用例来说效率低下。

以上是关于boto3 iam 客户端:按名称获取策略的主要内容,如果未能解决你的问题,请参考以下文章

如何重命名 AWS 客户 IAM 策略?

使用 Boto3 将 IAM 用户附加到 IAM 组

AWS ECS Docker 容器 Boto3 IAM 权限

AWS IAM 策略:按用户/角色限制存储桶/文件夹访问?

通过 boto3 担任 IAM 用户角色时访问被拒绝

使用 boto3 在 aws 中其 CPU 扩展策略低于特定阈值的所有自动扩展组的列表