Amazon web services 如何以来宾用户身份访问AWS DynamoDB?

Amazon web services 如何以来宾用户身份访问AWS DynamoDB?,amazon-web-services,amazon-dynamodb,aws-amplify,Amazon Web Services,Amazon Dynamodb,Aws Amplify,我正在Angular JS/Typescript中使用aws amplify和aws sdk。 我可以作为经过身份验证的用户成功访问我的AWS DynamoDB 我还试图为Dynamo中的某个表添加来宾用户访问权限,但我很难理解如何在没有任何凭据的情况下获得对DynamoDB的引用 我的代码现在看起来像这样 getDocumentClient() { return Auth.currentCredentials() .then(credentials => new

我正在Angular JS/Typescript中使用aws amplify和aws sdk。 我可以作为经过身份验证的用户成功访问我的AWS DynamoDB

我还试图为Dynamo中的某个表添加来宾用户访问权限,但我很难理解如何在没有任何凭据的情况下获得对DynamoDB的引用

我的代码现在看起来像这样

   getDocumentClient() {
    return Auth.currentCredentials()
     .then(credentials => new AWS.DynamoDB.DocumentClient({ credentials: credentials }))
     .catch(err => logger.debug('error getting document client', err));
我如何做类似的事情,以未经身份验证的来宾用户身份访问DynamoDB

干杯

试试看

这里有一个S3的例子——我展示了这一点,因为我知道您可以作为未经验证的用户从AWS SDK向S3发出请求。我假设这也适用于DynamoDB,但尚未对其进行测试

var s3 = new AWS.S3();

var params = {
    Bucket: 'mybucket'
};

s3.makeUnauthenticatedRequest('listObjects', params, callback);

更具战略意义的方法是Amazon Cognito身份池,它支持未经验证的/客户身份。Cognito提供一个身份和AWS凭据,您可以配置一个IAM角色,允许对未经身份验证的身份类型进行DynamoDB读取访问。

我想您可以参考下面博客文章中提到的内容

基本思想是使用API网关作为DynamoDB API的代理。API网关通过执行角色被授予访问DynamoDB的权限,API网关被配置为向公众开放。在此过程中,流程如下所示:

Web Browser <----- HTTPS -----> API Gateway <----- AWS Service Proxy integration -----> DynamoDB
Web浏览器API网关DynamoDB

Hi jarred,谢谢你提供的信息。我尝试了与上面的s3示例类似的方法,但得到了以下错误。MissingAuthenticationTokenException:请求缺少身份验证令牌。也许我遗漏了其他一些东西,因为makeUnauthenticatedRequest不需要身份验证令牌。代码如下<代码>让con=new AWS.DynamoDB();var params={TableName:“tasks”};con.makeUnauthenticatedRequest(“descripbetable”、参数、函数(err、data){if(err){…})抱歉,我想得越多…我不认为有任何方法可以将“公共访问”策略应用于DynamoDB表。您可以使用S3 bucket策略对S3 bucket/对象执行此操作,但DynamoDB没有类似的功能。这意味着请求者需要IAM凭据,该凭据由IAM角色支持,该角色本身允许必要的DynamoDB在该表上的操作。请求者仍然可以未经验证,但未经验证的访问需要与适当的IAM角色相关联,我知道的唯一方法是通过Cognito。这比S3需要更多的工作,但可能不是很大。