You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用变量中JSON信任策略创建AWS IAM角色失败的原因及解决

问题:通过JSON字符串创建AWS IAM角色失败,使用文件则成功

尝试通过JSON字符串(而非文件)提供信任策略创建AWS IAM角色时,使用aws iam create-role --assume-role-policy-document $IAM_ROLE_TRUST_POLICY命令报错,但用file://指定文件则正常执行。

错误信息

Unknown options: "2012-10-17",, "Statement":, [, {, "Effect":, "Allow",, "Principal":, {, "AWS":, "arn:aws:iam::111111111111:user/svc-tooling-user", },, "Action":, "sts:AssumeRole", }, ], }, "Version":

复现步骤

$ IAM_ROLE_TRUST_POLICY=$(cat <<-END
{
    \"Version\": \"2012-10-17\",
    \"Statement\": [
        {
            \"Effect\": \"Allow\",
            \"Principal\": {
                \"AWS\": \"arn:aws:iam::111111111111:user/svc-tooling-user\"
            },
            \"Action\": \"sts:AssumeRole\"
        }
    ]
}
END
)

$ aws iam create-role \
    --role-name  myTestRole\
    --assume-role-policy-document $IAM_ROLE_TRUST_POLICY

原因分析

问题核心是Shell的变量分词机制:

  • 直接使用$IAM_ROLE_TRUST_POLICY时,Shell会将JSON字符串按空格、换行符拆分成多个独立的参数,每个JSON元素(如"Version":、"2012-10-17")都会被当成单独的命令选项
  • AWS CLI无法识别这些拆分后的元素,因此抛出"Unknown options"错误
  • 另外,你在Here-doc里给双引号加了转义符\,导致JSON字符串里实际包含\"而非纯双引号,这也会影响CLI对JSON的解析

解决方法

方法1:用双引号包裹变量,修正JSON转义

# 修正变量赋值:Here-doc中无需转义双引号
IAM_ROLE_TRUST_POLICY=$(cat <<-END
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111111111111:user/svc-tooling-user"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
END
)

# 用双引号包裹变量,强制Shell将整个JSON作为单一参数传递
aws iam create-role \
    --role-name myTestRole \
    --assume-role-policy-document "$IAM_ROLE_TRUST_POLICY"

方法2:使用--cli-input-json参数(更稳妥)

直接将完整的请求JSON作为参数传递,避免变量分词问题:

aws iam create-role \
    --cli-input-json '{
        "RoleName": "myTestRole",
        "AssumeRolePolicyDocument": {
            "Version": "2012-10-17",
            "Statement": [
                {
                    "Effect": "Allow",
                    "Principal": {
                        "AWS": "arn:aws:iam::111111111111:user/svc-tooling-user"
                    },
                    "Action": "sts:AssumeRole"
                }
            ]
        }
    }'

内容的提问来源于stack exchange,提问作者Rafiq

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:39:14