我有无服务器lambda函数(AWS),该函数使用serverless-http创建快速服务器。成功运行后,我用来认证请求的自定义授权器超时。以下是根据CloudWatch日志返回的策略:
2019-02-27T12:06:49.000Z 7b138c38-b316-4ae0-97ad-36242833cefa策略[{动作:'execute-api:Invoke', 效果:“允许”, 资源:“ arn:aws:execute-api:eu-west-1:xxxx:xxxx / dev / GET / data / age'}]
此后,我得到此日志:
2019-02-27T12:06:54.778Z 7b138c38-b316-4ae0-97ad-36242833cefa任务在6.01秒后超时
我的本应在auth之后执行的函数甚至没有被调用。我正在使用async / await来针对标头中的Authorization令牌进行业务。
这是我的授权者代码:
if (business) {
console.log(
"policy",
generatePolicy(business, "Allow", event.methodArn).policyDocument.Statement
);
callback(null, generatePolicy(business, "Allow", event.methodArn));
return;
} else {
callback(null, generatePolicy(null, "Deny", event.methodArn));
return;
}
generatePolicy
功能:
const generatePolicy = function(principalId, effect, resource) {
const authResponse = {};
authResponse.principalId = "Business";
if (effect && resource) {
const policyDocument = {};
policyDocument.Version = "2012-10-17";
policyDocument.Statement = [];
const statementOne = {};
statementOne.Action = "execute-api:Invoke";
statementOne.Effect = effect;
statementOne.Resource = resource;
policyDocument.Statement[0] = statementOne;
authResponse.policyDocument = policyDocument;
authResponse.context = {
business: principalId
};
}
return authResponse;
};
serverless.yml
:
myData:
handler: functions/myData.handler
events:
- http:
path: /data/{proxy+}
method: ANY
cors: true
authorizer: companyAuth
companyAuth:
handler: middleware/auth.company
cors: true
注意:如果我使用serverless-offline
插件在本地运行它,同样的事情也会起作用。
答案 0 :(得分:0)
鉴于此问题,您很有可能正在使用无服务器部署,并且您的任何功能都在使用VPC执行角色,并且该规则也必须已应用于您的 Authorizer 功能。现在,如果您尚未为vpc设置出站规则/公共子网来获取http调用,则需要显式地执行上述任一操作
公共子网中的实例可以直接发送出站流量 到Internet,而专用子网中的实例则不能。 而是,专用子网中的实例可以访问Internet 通过使用驻留在其中的网络地址转换(NAT)网关 公共子网。数据库服务器可以连接到Internet 使用NAT网关进行软件更新,但Internet无法 建立与数据库服务器的连接。
关注此https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html