2015-12-09 79 views
17

我尝试通过AWS文件提出了一个简单的例子,使用策略JSON文件 http://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-service.html 创建一个角色,我得到的错误AWS创建角色 - 已禁止外地

A client error (MalformedPolicyDocument) occurred when calling the CreateRole operation: Has prohibited field Resource 

这里的命令,

>> aws iam create-role --role-name test-service-role --assume-role-policy-document file:///home/ec2-user/policy.json 
A client error (MalformedPolicyDocument) occurred when calling the CreateRole operation: Has prohibited field Resource 

政策是完全相同的,如本例中提到的一个

>> cat policy.json 
{ 
    "Version": "2012-10-17", 
    "Statement": { 
    "Effect": "Allow", 
    "Action": "s3:ListBucket", 
    "Resource": "arn:aws:s3:::example_bucket" 
    } 
} 

我的版本似乎是最新

>> aws --version 
aws-cli/1.9.9 Python/2.7.10 Linux/4.1.10-17.31.amzn1.x86_64 botocore/1.3.9 

回答

25

的政策文件应该是这样的:

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


。这被称作信任关系政策文件。这与政策文件不同。 您粘贴的任何内容都是附加到使用 attach role policy完成的角色的策略。
即使上面的角色文档在您粘贴的链接中给出。 这应该工作。我从事角色和政策方面的工作,我可以肯定地说。
即使在aws控制台中,对于角色,您也可以看到信任关系存在单独的选项卡。此外,您目前在权限标签中附加了策略。

+0

疑难杂症的内容,谢谢。而使用以下 – blueskin

+0

获得同样的错误 - { “版本”: “2012年10月17日”, “声明”:[{ “效果”: “允许”, “校长”:{ “服务“:” s3.amazonaws.com” }, “行动”: “STS:AssumeRole” } ] } 而且上述政策在AWS文档中给出。那么为什么我得到错误? –

+0

@NeerajRathod指定错误。永远不要说“有些错误”。 –

-1

的AWS消息, 发生错误(MalformedPolicyDocument)调用CREATEROLE操作时:该策略包含,如果你不使用全路径名无效的Json 出现。例如,使用

--assume-role-policy-document myfile.json 

甚至不存在的.file.json,导致该问题。

的解决方案是使用

--assume-role-policy-document file://myfile.json 

的这里是我的Kinesis流水输送料流

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

这似乎并不涉及原来的错误信息,这是关于*禁止的字段*。 – growse