[英]Stop EC2 Instance
我有一個在 EC2 上運行的節點 js 應用程序。 在某個操作之后,我想停止 EC2。
我正在使用這個 function 來停止 EC2
const stopInstance = () => {
// set the region
AWS.config.update({
accessKeyId: "MY ACCESS KEY",
secretAccesskey: "SECRET KEY",
region: "us-east-1"
})
// create an ec2 object
const ec2 = new AWS.EC2();
// setup instance params
const params = {
InstanceIds: [
'i-XXXXXXXX'
]
};
ec2.stopInstances(params, function(err, data) {
if (err) {
console.log(err, err.stack); // an error occurred
} else {
console.log(data); // successful response
}
});
}
當我從 EC2 運行它時,它給出了錯誤
UnauthorizedOperation: You are not authorized to perform this operation.
但是,當我使用本地機器上的相同密鑰和密碼運行相同的代碼時,它運行良好。
這將取決於傳遞給腳本的 IAM 用戶的權限。
首先,此錯誤消息表明請求中成功使用了 IAM 用戶/角色,但未能獲得權限,因此可以排除。
假設密鑰和秘密成功(看起來像硬編碼),您將查看策略中的進一步限制(例如主體或。
如果密鑰和秘密不是硬編碼而是作為環境變量傳入,請對 output 字符串值執行一些調試並驗證這些值是否符合您的預期。 如果它們沒有被傳遞到 SDK 中,那么它可能會退回到附加的實例角色。
作為改進的一點,通常在從 AWS 內部(即在 EC2 實例上)與 AWS 開發工具包/CLI 交互時,您應該使用 IAM 角色而不是 IAM 用戶,因為這將導致更少的 API 憑證被管理/輪換。 IAM 角色將每隔幾個小時輪換一次臨時憑證。
如果相同的憑證在本地機器上工作,那么它可能不是權限問題,而只是為了進一步隔離問題,您可以嘗試運行 AWS-GetCallerIdentity 來檢查正在使用的憑證。
https://docs.aws.amazon.com/cli/latest/reference/sts/get-caller-identity.html
如果這沒有幫助,請創建一個新用戶並嘗試授予完全管理員訪問權限,然后使用憑據查看此問題是否已解決。 這將確認我們是否面臨許可問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.