无法使用 boto3 创建策略

Posted

技术标签:

【中文标题】无法使用 boto3 创建策略【英文标题】:Unable to create Policy using boto3 【发布时间】:2019-08-09 16:12:28 【问题描述】:

我正在尝试使用 boto3 创建 aws-dynamodb 策略。我每次都遇到同样的错误。请帮忙。我按照https://github.com/awsdocs/aws-doc-sdk-examples/blob/0edf8c7a52a77e405b71931bd9cee9c06f84368c/python/example_code/iam/create_policy.py 和https://boto3.amazonaws.com/v1/documentation/api/latest/guide/iam-example-policies.html 中提到的那样关注

我尝试使用命令提示符和 jupyter 都给我同样的错误。

    import json
    import boto3
    dev = boto3.session.Session(profile_name='xyz')
    iam = dev.client('iam')
    my_managed_policy = 
      "Version": "2019-08-08",
      "Statement": [
        
            "Sid":"myTableAllActions",
            "Effect":"Allow",
            "Action":"dynamodb:*",
            "Resource":"arn:aws:dynamodb:*:*:table/myTable"
        
     ]
    
    try:
      response = iam.create_policy(PolicyName='myTableDynamoDBPolicy',
                                PolicyDocument=json.dumps(my_managed_policy))
      print(response)
    except Exception as err:
      print(str(err))
      print("\n")
      print(traceback.format_exc())

“我希望创建策略(我拥有所有管理员权限)。我能够对表执行插入/更新操作。但是,在创建策略时,我收到此错误”

“调用 CreatePolicy 操作时发生错误(MalformedPolicyDocument):策略中的语法错误。

Traceback (most recent call last):
  File "<ipython-input-388-d2afcb29d5da>", line 21, in <module>
    PolicyDocument=json.dumps(my_managed_policy))
  File "/Users/dthomas/anaconda3/envs/pytf36/lib/python3.6/site-packages/botocore/client.py", line 357, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/Users/dthomas/anaconda3/envs/pytf36/lib/python3.6/site-packages/botocore/client.py", line 661, in _make_api_call
    raise error_class(parsed_response, operation_name)
botocore.errorfactory.MalformedPolicyDocumentException: An error occurred (MalformedPolicyDocument) when calling the CreatePolicy operation: Syntax errors in policy."

【问题讨论】:

【参考方案1】:

您的版本字符串"2019-08-08" 无效。有效值为“2008-10-17”和“2012-10-17”。

我对此进行调试的方式是尝试使用您的策略文档在 IAM 控制台中创建新的 IAM 策略。它立即告诉我问题出在哪里:

此政策包含以下错误:政策必须包含 有效的版本字符串。

有关 IAM 政策的更多信息 语法,请参阅 AWS IAM 策略。

【讨论】:

以上是关于无法使用 boto3 创建策略的主要内容,如果未能解决你的问题,请参考以下文章

如何在 boto3 中获取 iam 用户的内联策略文档?

使用 Boto3 将 IAM 用户附加到 IAM 组

boto3:Spot 实例创建

AWS SQS Boto3 手动将消息发送到死信

AWS:如何使用 Boto3 从实例创建公共 AMI?

无法使用Lambda Python 3.6 Boto3在现有DynamoDB表中放置新项目[关闭]