簡體   English   中英

停止 EC2 實例

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM