尝试使用Boto3创建IAM角色时始终收到MalformedPolicyDocument错误

时间:2016-06-21 11:04:38

标签: json python-2.7 amazon-web-services amazon-iam 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

但是它总是会返回一个MalformattedPolicyDocument错误,我不能为我的生活看到原因。

1 个答案:

答案 0 :(得分:5)

AssumeRolePolicyDocument参数需要一个JSON信任策略来描述谁可以担任此角色。您正在提供描述此角色可以访问的资源的策略。

有关信任策略的更多信息,请参阅this,但假设角色策略应如下所示:

{
  "Version": "2012-10-17",
  "Statement": {
    "Effect": "Allow",
    "Principal": {"Service": "ec2.amazonaws.com"},
    "Action": "sts:AssumeRole"
  }
}

这可能不是您想要的,但重点是信任策略描述了谁被允许承担此角色,而不是角色可以访问的角色。

然后,您可以创建另一个包含资源权限的策略,并将该策略附加到新角色。