change198
change198

Reputation: 2065

AWS Boto3 Syntax errors in policy

I'm getting a malformed syntax error when running boto3 to create_policy command surprisingly I don't get the error in AWS console. I tried to debug this using the AWS Console's "Policy Editor" and click the "Validate" button and it creates the policy No error. Does anyone know what I'm doing wrong?

iam_client.create_policy(PolicyName='xxxxx-policy',
                                               PolicyDocument=json.dumps(dir_name + 'xxxxx-policy.json'))

This policy contains the following error: botocore.errorfactory.MalformedPolicyDocumentException: An error occurred (MalformedPolicyDocument) when calling the CreatePolicy operation: Syntax errors in policy.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:Describe*",
                "iam:ListRoles",
                "sts:AssumeRole"
            ],
            "Resource": "*"
        }
    ]
}

Upvotes: 0

Views: 521

Answers (2)

Marcin
Marcin

Reputation: 238131

You are reading your document from file:

 with open(dir_name + 'xxxxx-policy.json', 'r') as f: 
     policy_document = f.read() 

 iam_client.create_policy(
         PolicyName='xxxxx-policy',
         PolicyDocument=policy_document)

Upvotes: 2

jellycsc
jellycsc

Reputation: 12259

json.dumps will turn a Python dictionary into a JSON string. The input shouldn't be a file name. In fact, you don't need json package to do this.

import boto3

with open('xxx-policy.json', 'r') as fp:
    iam_client = boto3.client('iam')
    iam_client.create_policy(
        PolicyName='xxx-policy',
        PolicyDocument=fp.read()
    )

Upvotes: 2

Related Questions