在运行Ansible脚本生成包含策略的IAM用户时,PutUserPolicy出现了MalformedPolicyDocument错误。

0

【以下的问题经过翻译处理】 我正在尝试运行一个ansible脚本,来生成一个附带有访问S3 bucket权限的IAM用户及策略。 我使用相同的策略文档在控制台上创建了一个策略,并确认了该文档是有效的json。然而,我仍然遇到如下错误。 策略本身看起来像这样。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SAImgBucket",
            "Effect": "Allow",
            "Action": [
                 "s3:*"
            ],
            "Resource": [
                 "arn:aws:s3:::<s3-bucket-name>"
            ]
        }
    ]
}

ansible任务如下。

- name: create sa IAM user permissions
      community.aws.iam_policy:
       iam_type: user
       iam_name: "{{ sa_app_username }}"
       policy_name: "{{ sa_app_username }}-policy"
       state: present
       policy_json: " {{ lookup( 'template', 'template/sa_iam_policy.json.j2') | to_json }} "

欢迎任何关于如何进一步调试或解决此问题的建议。

botocore.errorfactory.MalformedPolicyDocumentException: 调用PutUserPolicy操作时发生错误(MalformedPolicyDocument):策略中有语法错误。
[DEPRECATION WARNING]: skip_duplicates行为引起了混淆,并将在Ansible 2.14中默认禁用。此功能将在2022年06月01日之后的发布中从community.aws中删除。可以通过在ansible.cfg中设置deprecation_warnings=False来禁用过时警告。
fatal: [localhost]: FAILED! => changed=false
  boto3_version: 1.18.18
  botocore_version: 1.21.18
  error:
    code: MalformedPolicyDocument
    message: 策略中有语法错误。
    type: Sender
  invocation:
    module_args:
      aws_access_key: null
      aws_ca_bundle: null
profile picture
专家
已提问 5 个月前6 查看次数
1 回答
0

【以下的回答经过翻译处理】 虽然策略的内容看起来没问题,但是从你分享的错误日志中可以看出,你可能在JSON脚本之前和之后传递了额外的引号(如下所示)。

'"{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Sid": "yourSid",\n "Effect": "Allow",\n "Action": [\n "s3:*"\n ],\n "Resource": [\n "arn:aws:s3:::<s3-bucket-name>"\n ]\n }\n ]\n}\n"'

我这么说是因为,当我按预期传递JSON脚本时,CloudTrail记录了没有额外引号的JSON脚本,如下所示:

"{\n "Version": "2012-10-17",\n "Statement": [\n {\n "Sid": "yourSid",\n "Effect": "Allow",\n "Action": [\n "s3:*"\n ],\n "Resource": [\n "arn:aws:s3:::<s3-bucket-name>"\n ]\n }\n ]\n} "

请检查一下当你将策略作为sa_iam_policy.json.j2文档传递时,是否存在策略语法中的额外引号。

参考文献:

profile picture
专家
已回答 5 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则