python - 由于 MalformedPolicyDocument 导致 Boto3 脚本中的遗留解析错误
问题描述
我正在尝试在 AWS 上创建一个 IAM 用户并将其附加到具有 IAM 策略的用户组,但我收到“调用 CreatePolicy 操作时发生错误(MalformedPolicyDocument):策略失败旧版解析”错误,我不是确定这意味着什么。我认为这与政策本身有关,但我不确定。
import boto3
import sys
import json
iam = boto3.client('iam')
sts = boto3.client('sts')
response = iam.create_user(
UserName='GoodUser'
)
IDK = sts.get_caller_identity()
print(IDK['UserId'])
response = iam.create_group(
GroupName='GoodGroup'
)
response = iam.add_user_to_group(
GroupName='GoodGroup',
UserName='GoodUser'
)
some_policy = {
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "ec2:RunInstances",
"Resource": [
"arn:aws:ec2:us-east-2:{}:instance/*".format(IDK),
"arn:aws:ec2:us-east-2:{}:security-group/*".format(IDK),
"arn:aws:ec2:us-east-2:{}:image/ami-0a91cd140a1fc148a".format(IDK)
],
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"ec2:TerminateInstances",
"ec2:StartInstances",
"ec2:StopInstances"
],
"Resource": "arn:aws:ec2:us-east-2:{}:instance/*".format(IDK),
"Condition": {
"ForAllValues:StringEquals": {
"ec2:InstanceType": "t2.micro"
}
}
}
]
}
response = iam.create_policy(
PolicyName='GoodPolicy',
PolicyDocument=json.dumps(some_policy)
)
print(response)
IDK1 = iam.attach_user_policy(
UserName='GoodUser',
PolicyArn='arn:aws:iam::{}:policy/some_policy'.format(IDK)
)
解决方案
错误可能与您的IDK
变量有关。
IDK = sts.get_caller_identity()
返回以下格式的字典:
{
'UserId': 'string',
'Account': 'string',
'Arn': 'string'
}
稍后您使用此对象来格式化资源字符串:"arn:aws:ec2:us-east-2:{}:instance/*".format(IDK)
这将产生无效的主体。我怀疑你可能打算做这样的事情:(f"arn:aws:ec2:us-east-2:{IDK['Account']}:instance/*"
使用 f-string 而不是str.format
,结果是一样的)。
推荐阅读
- firebase - 未处理的异常:NoSuchMethodError:在 null 上调用了方法“split”
- wolfram-mathematica - Mathematica 删除列不能通过 2 到 3 个错误占据位置
- python - python pandas中的条件填充逻辑
- node.js - 更改 aws kcl 的故障转移时间
- html - 我们如何避免输入标签自动完成时出现边框
- android - 静音手机上的流式推送通知
- php - 如何阻止 H1 填充整个 div
- ruby-on-rails - webpacker 编译但未在 dev 中保存文件
- c++ - 继承模板类的构造函数
- django - 是否可以删除 URL 路径:Django