【问题标题】:Serverless Framework AWS Fine-Grained Access Control无服务器框架 AWS 细粒度访问控制
【发布时间】:2019-05-16 19:03:53
【问题描述】:

我正在尝试保护我的 AWS API,以便通过在我的无服务器框架配置 (serverless.yml) 中实施细粒度访问控制,DynamoDB 行只能由相应的经过身份验证的 Cognito 用户访问

查看我在 AWS Documentation 中尝试的示例

我尝试将 Cloudformation 语法转换为无服务器,但没有成功;当我在我的政策声明中尝试以下表达式时:

Condition:
  ForAllValues:StringEquals:
    dynamodb:LeadingKeys: ["${cognito-identity.amazonaws.com:sub}"]

然后我得到一个错误:

变量 cognito-identity.amazonaws.com:sub 的变量引用语法无效。您只能引用环境变量、选项和文件。您可以查看我们的文档以获取更多信息。

这在无服务器中是否可能?还是只有 Cloudformation 和 SAM?

【问题讨论】:

  • 我们能找到解决方案吗?我正在尝试做类似的事情。谢谢!
  • 找到解决方案了吗>

标签: amazon-web-services aws-lambda amazon-dynamodb amazon-cognito serverless-framework


【解决方案1】:

在无服务器中是可能的。如果我是你,我将使用 AWS Lambda 来验证发送给用户的 id_token。 在这种情况下,您应该首先使用 Api Gateway 或其他方法将密钥传输到 AWS Lambda 函数。然后关注this guide 验证令牌。代码可在:https://github.com/awslabs/aws-support-tools/tree/master/Cognito/decode-verify-jwt

验证后您可以在此处添加代码:

 ...... 
if claims['aud'] != app_client_id:
    print('Token was not issued for this audience')
    return False
# now we can use the claims

# add your code here #

print(claims)
return claims

【讨论】:

  • 谢谢,但这不是我想要实现的。我不需要验证 JWT 令牌 - 我的网关授权方会自动为我执行此操作。我想要做的是使用无服务器框架在 DynamoDb 中实现细粒度的访问控制。即让 AWS 自动确定是否允许经过身份验证的用户访问 DynamoDb 中的特定文档。