尝试使用 Boto3 创建 IAM 角色时总是出现 MalformedPolicyDocument 错误
Always getting MalformedPolicyDocument error while trying to create IAM role using Boto3
我正在使用来自默认 AWS 策略 AWSLambdaBasicExecutionRole:
的 json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
虽然这是我用来创建角色的代码:
def create_lambda_role():
205 try:
206 iam = boto3.client('iam')
207
208 lambda_permissions_json = ''
209 with open('lambda/lambda_permissions.json', 'r') as thefile:
210 lambda_permissions_json = thefile.read()
211
212 iam.create_role(
213 RoleName='lambda_basic_execution',
214 AssumeRolePolicyDocument=str(lambda_permissions_json)
215 )
216 except botocore.exceptions.ClientError as e:
217 print e.response['Error']['Code']
218 return False
219
220 return True
但它总是 returns MalformattedPolicyDocument 错误,我这辈子都看不出为什么。
AssumeRolePolicyDocument
参数需要 JSON 描述谁可以担任此角色的信任策略。您正在提供描述此角色将有权访问哪些资源的策略。
有关信任策略的更多信息,请参阅 this 但代入角色策略应如下所示:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
这可能不是您想要的,但重点是信任策略描述的是允许谁担任此角色,而不是该角色有权访问什么。
然后您可以创建另一个包含您的资源权限的策略并将该策略附加到您的新角色。
我正在使用来自默认 AWS 策略 AWSLambdaBasicExecutionRole:
的 json{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
}
]
}
虽然这是我用来创建角色的代码:
def create_lambda_role():
205 try:
206 iam = boto3.client('iam')
207
208 lambda_permissions_json = ''
209 with open('lambda/lambda_permissions.json', 'r') as thefile:
210 lambda_permissions_json = thefile.read()
211
212 iam.create_role(
213 RoleName='lambda_basic_execution',
214 AssumeRolePolicyDocument=str(lambda_permissions_json)
215 )
216 except botocore.exceptions.ClientError as e:
217 print e.response['Error']['Code']
218 return False
219
220 return True
但它总是 returns MalformattedPolicyDocument 错误,我这辈子都看不出为什么。
AssumeRolePolicyDocument
参数需要 JSON 描述谁可以担任此角色的信任策略。您正在提供描述此角色将有权访问哪些资源的策略。
有关信任策略的更多信息,请参阅 this 但代入角色策略应如下所示:
{
"Version": "2012-10-17",
"Statement": {
"Effect": "Allow",
"Principal": {"Service": "ec2.amazonaws.com"},
"Action": "sts:AssumeRole"
}
}
这可能不是您想要的,但重点是信任策略描述的是允许谁担任此角色,而不是该角色有权访问什么。
然后您可以创建另一个包含您的资源权限的策略并将该策略附加到您的新角色。