[英]AWS IAM authorization inside a lambda function in nodejs
我有一個受 IAM 授權保護的 API,這是一個允許 IAM 用戶 integ integ-user
調用 API 的資源策略。
現在我想寫一個 lambda function 來調用相同的 API。 鑒於我可以訪問 IAM 訪問密鑰和密鑰(通過環境變量或 AWS Secret Manager),我如何對用戶進行 IAM 授權,以便它可以成功調用 API?
用於調用相同 API 的示例代碼(未經 IAM 授權):
var https = require('https');
exports.handler = (event, context, callback) => {
const options = {
host: process.env.VPCE_DNS_NAME,
port: 443,
path: "/status",
method: 'GET',
headers: {
'Host':process.env.API_GW_ENDPOINT
}
};
https.request(options, (res) => {
let data = '';
res.on('data', (d) => {
data += d;
process.stdout.write(d);
});
res.on('end', () => {
callback(null, JSON.parse(data));
});
}).on('error', (e) => {
callback(null, e);
}).end();
};
我們需要使用三個附加參數構建常規 nodejs 請求選項
service: "execute-api"
region: "us-east-1"
AWS 區域。
body: postData
,通常我們傳遞 body req.write
,我們在 options 中也需要它,因為它是簽名所必需的。
最后將aws4.sign(...)
傳遞給request
。
.sign
方法所做的只是添加 4 個額外的標頭X-Amz-Content-Sha256
、 X-Amz-Security-Token
、 X-Amz-Date
和Authorization
var aws4 = require("aws4");
var https = require("https");
const requestBody = { name: "test" };
var postData = JSON.stringify(requestBody);
var options = {
method: "GET",
hostname: "abcdefgh.execute-api.us-east-1.amazonaws.com",
path: "/status",
headers: {
"Content-Type": "application/json",
},
service: "execute-api",
region: "us-east-1",
body: postData,
maxRedirects: 20,
};
const signedRequest = aws4.sign(options, {
secretAccessKey: "abcadefghijknlmnopstabcadefghijknlmnopst",
accessKeyId: "ABCDEFGHIJKLMNOPQRST",
sessionToken: "this is optional ==",
});
console.log(signedRequest);
var req = https.request(signedRequest, function (res) {
var chunks = [];
res.on("data", function (chunk) {
chunks.push(chunk);
});
res.on("end", function (chunk) {
var body = Buffer.concat(chunks);
console.log(body.toString());
});
res.on("error", function (error) {
console.error(error);
});
});
req.write(postData);
req.end();
由於此調用是從 lambda 整個 object 進行的,因此可以跳過鍵並簡單地調用aws4.sign(options)
,它應該從環境變量中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.