gpt4 book ai didi

aws-lambda - Cognito、API Gateway 和 Lambda 假设 Cognito 用户的身份

转载 作者:行者123 更新时间:2023-12-04 11:15:32 25 4
gpt4 key购买 nike

我正在构建一个 React 应用程序,使用 API Gateway、lambda 和 cognito(基本上从 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 代表给定的认知用户执行 AWS 调用,从而遵守附加到该用户的 IAM 策略? (有点类似于 serverless-stack 教程如何与 S3 交互)

欢迎所有建议。

最佳答案

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

import { DocumentClient } from 'aws-sdk/clients/dynamodb';

const client = new DocumentClient({
credentials: ...
});

这些安全凭证是通过 STS 获得的。如何获取用户身份以获取凭据有多种方案,但通常您会 assumeRole ,如果你有一个角色的arn,或者 assumeRoleWithWebIdentity , 如果有一个实际用户做了一个 OpenID Connect 的流程:
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);

关于aws-lambda - Cognito、API Gateway 和 Lambda 假设 Cognito 用户的身份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49111340/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com