2016-02-29 51 views
0

我试图使用AWS SDK for Node JS使用以下代码生成IOT策略。AWS Node JS SDK - Amazon IOT - MalformedPolicyException:策略文档格式错误

var params = { 
    policyDocument: 'file:///tmp/mypolicy.json', 
    policyName: 'my_custom_policy' 
}; 
iot.createPolicy(params, function(err, data) { 
    if (err) console.log(err, err.stack); // an error occurred 
    else  console.log(data);   // successful response 
}); 

但是运行该脚本将返回以下异常。

[MalformedPolicyException:策略文档的格式不正确]

消息: '策略文档格式错误',

代码: 'MalformedPolicyException', 等

我试图/tmp/mypolicy.json./mypolicy.json(将json文件复制到脚本文件夹后)等等,但是异常继续存在。

json的内容如下所示(复制自Amazon官方文档)。

{ 
    "Version": "2012-10-17", 
    "Statement": [{ 
     "Effect": "Allow", 
     "Action":["iot:*"], 
     "Resource": ["*"] 
    }] 
} 

有关指定policyDocument并生成IOT策略的正确方法的任何想法?

回答

1

我在Golang SDK中遇到了同样的问题,因为它不支持“file://”路径,这是CLI特有的功能。要从磁盘加载策略,您应该使用打开的Go stdlib并以字符串形式读取内容。

file, err := os.Open("filename") 
if err != nil { 
// handle error 
} 

buf := &bytes.Buffer{} 
if err := io.Copy(buf, file); err != nil { 
// handle error 
} 

resp, err := svc.CreatePolicy(&iot.CreatePolicyInput{ 
PolicyDocument: aws.String(buf.String()), 
// ... 
}) 
if err != nil { 
// handle error 
}