2016-02-29 53 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 
}