Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/348.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python boto3 iam客户端:按名称获取策略_Python_Amazon Web Services_Boto3 - Fatal编程技术网

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

Python boto3 iam客户端:按名称获取策略,python,amazon-web-services,boto3,Python,Amazon Web Services,Boto3,我正在尝试从boto3客户端获取策略,但没有使用策略名称的方法。通过将create_policy方法包装在try-except块中,我可以检查策略是否存在。除了列出所有策略并对其进行迭代之外,是否有其他方法可以使用boto3按名称获取策略arn。您需要对策略进行迭代才能获取策略名称。我不知道get策略类型api只使用策略名称策略ARN 您不想获取策略列表的原因是什么?除了不下载列表之外。应为ARN提供前缀(如有)和名称 原因只是不下载列表。当本地托管策略计数非常大时,可能需要几次迭代才能获得所有

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

您需要对策略进行迭代才能获取策略名称。我不知道get策略类型api只使用策略名称策略ARN


您不想获取策略列表的原因是什么?除了不下载列表之外。

应为ARN提供前缀(如有)和名称


原因只是不下载列表。当本地托管策略计数非常大时,可能需要几次迭代才能获得所有策略,这对我的用例来说是低效的。这不适用于AWS托管策略,因为它们在ARN中没有帐号。例如,备受喜爱的
AdministratorAccess
策略具有以下ARN:
ARN:aws:iam::aws:policy/AdministratorAccess
。但是,它确实适用于任何客户管理的策略,但如果使用,则应加以妥善保护。
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())