AWS Custom Authorizer超时

时间:2019-02-27 12:23:41

标签: amazon-web-services aws-api-gateway serverless lambda-authorizer

我有无服务器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插件在本地运行它,同样的事情也会起作用。

1 个答案:

答案 0 :(得分:0)

鉴于此问题,您很有可能正在使用无服务器部署,并且您的任何功能都在使用VPC执行角色,并且该规则也必须已应用于您的 Authorizer 功能。现在,如果您尚未为vpc设置出站规则/公共子网来获取http调用,则需要显式地执行上述任一操作

  1. 访问lambda函数。在VPC下,删除所有子网条目或选择 None
  2. 使用NAT /公共子网为vpc设置出站代理。如果您希望该功能在vpc下启动。教程链接如下。我会引用一些重要的行。

公共子网中的实例可以直接发送出站流量 到Internet,而专用子网中的实例则不能。 而是,专用子网中的实例可以访问Internet 通过使用驻留在其中的网络地址转换(NAT)网关 公共子网。数据库服务器可以连接到Internet 使用NAT网关进行软件更新,但Internet无法 建立与数据库服务器的连接。

关注此https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Scenario2.html