Цель: мы просто хотим, чтобы наши клиенты использовали нашу конечную точку HTTP, сначала сгенерировав ключ API, а затем передав его в параметре URI запроса для запуска лямбда-функции.
Что я пробовал: не уверен, как генерироватьapiKey программно.Решил протестировать мой apiKey, найденный в API Gateway, и написал следующий код в функции Lambda:
exports.handler = async (event, context, callback) => {
const apikey =
event.queryStringParameters.apikey || event.stageVariables.apikey;
const tmp = event.methodArn.split(":");
const apiGatewayArnTmp = tmp[5].split("/");
const awsAccountId = tmp[4];
const region = tmp[3];
const restApiId = apiGatewayArnTmp[0];
const stage = apiGatewayArnTmp[1];
callback(null, {
principalId: "principalId",
policyDocument: {
Version: "2012-10-17",
Statement: [
{
Action: "execute-api:Invoke",
Effect: "Allow",
Resource: `arn:aws:execute-api:${region}:${awsAccountId}:${restApiId}/${stage}/*/*`
}
]
},
usageIdentifierKey: apikey
});
return context.succeed('Success!');
};
В API Gateway я также добавил собственный авторизатор с строкой запроса request apikey
.
Когда я нажимаю test и передаю любое строковое значение для ключевой строки запроса apikey
, я получаю 200OK со следующим:
Response
Response Code: 200
Latency 2607
Policy
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "execute-api:Invoke",
"Effect": "Allow",
"Resource": "arn:aws:execute-api:us-west-2:2234235234:asdf3r3r/ESTestInvoke-stage/*/*"
}
]
}
Когда я открываю https://s9fs7h0.execute-api.us-west-2.amazonaws.com/default/executeWSL?apikey=myAPIkeygoeshere
Я все еще получаю {"message":"Forbidden"}
Где я ошибся?Я ожидал, что переход по этому URL вернет Success!