【发布时间】:2021-12-06 18:09:54
【问题描述】:
目标:
您好,我是一个新手,我正在尝试编写代码以从 IAM 组中提取内联策略文档,然后打印 JSON 文档。
我发现了一些类似的帖子,但没有成功引用它们:
Boto3 文档:
我收到以下错误: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