【问题标题】:Secure AWS s3 uploads to premium users only?仅向高级用户安全上传 AWS s3?
【发布时间】:2016-08-27 08:35:38
【问题描述】:

我正在尝试构建一个具有“高级”功能以将文件上传到 s3 的应用程序。

现在用户使用 OAuth/Cognito 登录。有一个 dynamoDB 表,其中包含基于其 cognito id 的用户数据。该 dynamodb 用户数据指定该用户是否为高级用户。

我有一个与 lambda 函数绑定的 API 网关端点,该函数创建了预签名的 s3 上传 url。

在我返回预签名的 url 之前,如何确保调用 API 网关的个人已登录并且是高级用户?

【问题讨论】:

    标签: security amazon-web-services amazon-s3 amazon-cognito


    【解决方案1】:

    创建一个Lambda custom authorizer,在授权对 API 网关端点的请求之前验证用户是“高级”用户。此函数会在授权访问之前在 DynamoDB 中查找用户。

    【讨论】:

    • 我目前感到困惑的是:一旦使用 cognito 进行身份验证,会话令牌是否与您提供的 url 文档中描述的“授权令牌”相同?
    • 如果我使用自定义授权者,那么我将放松 AWS Cognito 身份验证强制执行(我必须自己构建它作为自定义授权者的一部分)。如果可能的话,我宁愿不必这样做。你能看到其他方法吗?
    【解决方案2】:

    您似乎正在使用 Cognito 联合身份,您可以从 API 网关后面的 Lambda 函数访问 Cognito 身份 ID,并在您的 dynamo 表中进行查找。

    要访问 Cognito 身份 ID,您必须在 API 的 API 网关“集成请求”页面上具有“使用调用方凭据调用”。

    一旦设置好,并且您使用来自 Cognito 的凭据调用 API,lambda 上下文将有一个新的“身份”结构,其中包含“cognitoIdentityId”和“cognitoIdentityPoolId”

    【讨论】:

    • 我认为在使用自定义授权方时无法启用“使用调用方凭据调用”。您是否建议我放弃自定义授权者并仅使用 AWS 的授权者,然后在每个 lambda 调用开始时进行“高级”查找? (这本质上就是自定义授权者所做的,只是它也缓存了结果)。
    猜你喜欢
    • 2018-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-27
    • 2018-07-12
    • 2018-01-07
    • 1970-01-01
    相关资源
    最近更新 更多