【问题标题】:Cognito, API Gateway and Lambda assuming the identity of the cognito userCognito、API Gateway 和 Lambda 假设 cognito 用户的身份
【发布时间】:2018-08-13 03:50:42
【问题描述】:

我正在使用 API Gateway、lambda 和 cognito 构建一个 React 应用程序(基本上从 https://serverless-stack.com 教程开始)。我想为我的 DynamoDb 设置细粒度的访问控制(即通过基于登录用户限制对 DynamoDb 表的访问的 IAM 策略 - 例如https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_examples_dynamodb_rows.html

AFAIK,一个 lambda 函数承担一个服务角色,如 serverless.yml 文件中定义的那样,该角色本身与附加到登录 cognito 用户的 AIM 策略无关。我知道使用aim_authorizer,我可以获得登录用户的信息。

我的问题:是否可以让 lambda 代表给定的 cognito 用户调用 AWS,从而遵守附加到该用户的 IAM 策略? (有点类似于 serverless-stack 教程如何与 S3 交互)

欢迎所有建议。

【问题讨论】:

    标签: aws-lambda serverless


    【解决方案1】:

    您可以向任何 AWS 客户端库明确指定要使用哪些凭证来签署请求(默认情况下,它们取自运行时环境):

    import { DocumentClient } from 'aws-sdk/clients/dynamodb';
    
    const client = new DocumentClient({
        credentials: ...
    });
    
    

    这些安全凭证是通过 STS 获得的。有多种情况下如何获取用户的身份以获取凭据,但通常你会assumeRole,如果你有一个角色,或者assumeRoleWithWebIdentity,如果有一个实际的用户做一个流程OpenID 连接:

    import { Credentials, STS } from 'aws-sdk';
    
    const sts = new STS();
    const stsResponse = await sts.assumeRole({ RoleArn: 'can-be-cognito-group-arn' }).promise();
    // or
    // const stsResponse = await sts.assumeRoleWithWebIdentity({ WebIdentityToken: 'open-id-token' }).promise();
    
    const credentials = new Credentials(
        response.Credentials.AccessKeyId,
        response.Credentials.SecretAccessKey,
        response.Credentials.SessionToken);
    

    【讨论】:

      猜你喜欢
      • 2016-08-20
      • 2019-04-01
      • 2020-12-30
      • 2019-05-11
      • 2018-12-16
      • 1970-01-01
      • 2020-01-05
      • 2022-11-11
      • 1970-01-01
      相关资源
      最近更新 更多