【问题标题】:Print IAM group policy JSON document using Python / Boto3使用 Python / Boto3 打印 IAM 组策略 JSON 文档
【发布时间】:2021-12-06 18:09:54
【问题描述】:

目标:

您好,我是一个新手,我正在尝试编写代码以从 IAM 组中提取内联策略文档,然后打印 JSON 文档。


我发现了一些类似的帖子,但没有成功引用它们:


Boto3 文档:

https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam.html#IAM.Client.get_group_policy


我收到以下错误:TypeError: Object of type function is not JSON serializable


import boto3
import json

iam = boto3.client('iam')

def get_group_policy(group_name, policy_name):

# Define variable:
group_name = 'aws_iam_group_name'
policy_name = 'aws_policy_arn'

# Retrieves inline policy document embedded in IMA group.
# Returns: GroupName, PolicyName, and PolicyDocument
response = iam.get_group_policy(
    GroupName = group_name,
    PolicyName = policy_name
)

return (json.dumps(group_name, policy_name))

# Calls and prints function
var1 = get_group_policy
print(json.dumps(var1))

我根据您所说的对代码进行了一些更新。以下是更改:

import boto3
import json

iam = boto3.client('iam')

# Define variable:
group_name = 'aws_iam_group_name'
policy_name = 'aws_policy_arn'

def get_group_policy(group_name, policy_name):

# Retrieves inline policy document embedded in IMA group.
# Returns: GroupName, PolicyName, and PolicyDocument
response = iam.get_group_policy(
    GroupName = group_name,
    PolicyName = policy_name
)

return (json.dumps(response))

# Calls and prints function
var1 = get_group_policy(group_name, policy_name)
#print(json.dumps(var1))
print(var1)

我收到以下错误:

    WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
WARNING: You are using pip version 21.2.4; however, version 21.3 is available.
You should consider upgrading via the '/usr/local/bin/python -m pip install --upgrade pip' command.
Traceback (most recent call last):
  File "/sso-iam/sso-iam/create-permission-set.py", line 32, in <module>
    var1 = get_group_policy(group_name, policy_name)
  File "/sso-iam/sso-iam/create-permission-set.py", line 24, in get_group_policy
    response = iam.get_group_policy(
  File "/usr/local/lib/python3.10/site-packages/botocore/client.py", line 388, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/usr/local/lib/python3.10/site-packages/botocore/client.py", line 708, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.exceptions.ClientError: An error occurred (ValidationError) when calling the GetGroupPolicy operation: The specified value for policyName is invalid. It must contain only alphanumeric characters and/or the following: +=,.@_-

我不明白为什么它认为 PolicyName 不正确。我尝试直接从 AWS 复制 ARN,并且只使用 arn:aws:iam::#####:policy/itriedusingthispieceasPolicyName 之后的部分

【问题讨论】:

  • 您是否提供了策略名称(而不是 ARN)?另外,请修复您发布的代码的缩进。而且,一般来说,除非绝对必要,否则不要以 root 身份运行脚本。
  • 我提供了策略名称,因为如果我提供 ARN,它会给我一个错误,表明某些字符是不允许的,它们是 ARN 的一部分。在其他示例中,我看到还提供了策略名称。
  • 这里很难提供帮助,因为您的代码的当前状态和相关症状似乎无法反映当前的现实。例如,您的代码缩进错误,并且您建议您提供策略名称,但您的代码具有 policy_name = 'aws_policy_arn'(即建议使用 ARN 而不是名称)。
  • 进展如何?仍然不清楚发生了什么?

标签: python amazon-web-services boto3


【解决方案1】:

你没有调用你的函数。您的 var1 实际上是函数对象,而不是它的结果。

应该是

group_name = 'aws_iam_group_name'
policy_name = 'aws_policy_arn' 
var1 = get_group_policy(group_name, policy_name) 

你也不需要函数中的名字,因为它们是它的参数。

【讨论】:

  • 您好,感谢您的回复。我按照建议对代码进行了更改,但我也将打印更改为 print(var1),因为我认为我不必再次使用 json.dumps,因为它在返回时使用。我仍然收到错误消息。我已经编辑/更新了原始帖子。
  • @CalebNelsen 我建议用新错误提出新问题。
猜你喜欢
  • 2018-11-28
  • 1970-01-01
  • 2020-10-28
  • 1970-01-01
  • 2017-12-24
  • 2018-12-08
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多