【问题标题】:How to run a Lambda function locally that accesses protected resources如何在本地运行访问受保护资源的 Lambda 函数
【发布时间】:2019-11-27 08:47:10
【问题描述】:

我仍在学习使用 AWS Lambda 函数。我使用 Amplify 框架生成了我的。我使用的 Lambda 函数需要访问 AppSync API。因此它有以下中间件:

const tapRoute = f => R.tap(route => route.use(f));

const hydrateClient = tapRoute(async function(req, res, next) {
  try {
    const url = process.env.API_SAYMAPPSYNCAPI_GRAPHQLAPIENDPOINTOUTPUT;
    const region = process.env.REGION;
    AWS.config.update({
      region,
      credentials: new AWS.Credentials(
        process.env.AWS_ACCESS_KEY_ID,
        process.env.AWS_SECRET_ACCESS_KEY,
        process.env.AWS_SESSION_TOKEN
      ),
    });
    const credentials = AWS.config.credentials;
    const appsyncClient = new AWSAppSyncClient(
      {
        url,
        region,
        auth: {
          type: 'AWS_IAM',
          credentials,
        },
        disableOffline: true,
      },
      {
        defaultOptions: {
          query: {
            fetchPolicy: 'network-only',
            errorPolicy: 'all',
          },
        },
      }
    );
    const client = await appsyncClient.hydrated();
    req.client = client;
    next();
  } catch (error) {
    console.log(error);
    next(error);
  }
});

如您所见,我需要访问环境变量AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEYAWS_SESSION_TOKEN。当我在云中运行该函数时,它会自动获取这些变量的值。我怎样才能在本地获得它们?我需要使用哪个访问密钥以及如何获取其秘密访问密钥和会话令牌?

【问题讨论】:

  • 就您需要的访问密钥和秘密而言 - 来自具有足够权限以访问您所需资源的用户,从您的代码来看,这似乎是应用同步。

标签: amazon-web-services aws-lambda aws-sdk amazon-iam aws-amplify


【解决方案1】:

如果您已经配置了~/.aws/credentials 文件,则不需要显式设置它们。

如果要配置此文件,最简单的方法是简单地安装aws-cli 并运行aws configure。系统将提示您输入一些值,包括 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY

如果你没有配置这个文件,那么你可以自己在环境变量中设置这些值。

您可以通过转到 AWS 控制台 -> IAM -> 用户 -> 选择您的用户 -> 安全凭证 -> 访问密钥来获取这些值。然后单击“创建访问密钥”并下载或写下这些值,因为 AWS_SECRET_ACCESS_KEY 仅在创建期间可见。另一方面,AWS_ACCESS_KEY_ID 总是可见的,但如果你没有秘密,它就毫无用处。

AWS_SESSION_TOKEN 仅在相关用户使用 MFA 时才需要。如果不是,这个值可以忽略。

如果您使用的是 MFA,则需要使用 aws-cli 来获取此值,如下所示:

aws sts get-session-token --serial-number arn:aws:iam::account-id-number:mfa/your-user --token-code MFAToken

然后,要设置临时凭据,请再次运行 aws configure,将 AWS_ACCESS_KEY_IDAWS_SECRET_ACCESS_KEY 的值替换为新的临时值。

最后,设置AWS_SESSION_TOKEN,运行aws configure set aws_session_token VALUE_RETURNED_FROM_GET_SESSION_TOKEN_COMMAND

MFAOnly >

请记住,在云中运行时,这些凭据不会像您所说的那样加载。而是使用 IAM 角色。

【讨论】:

    猜你喜欢
    • 2013-10-22
    • 1970-01-01
    • 2018-07-22
    • 2016-12-23
    • 2016-11-26
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2014-08-27
    相关资源
    最近更新 更多