Amazon web services AWS CDK安装程序appsync与dynamodb表格权限

Amazon web services AWS CDK安装程序appsync与dynamodb表格权限,amazon-web-services,amazon-dynamodb,aws-appsync,aws-cdk,Amazon Web Services,Amazon Dynamodb,Aws Appsync,Aws Cdk,我使用新的高级GraphqlAPI类而不是低级构造来创建Appsync api并将其连接到表 this.api = new GraphqlApi(...); 新的GraphqlApi实例允许您简单地添加数据源: this.api.addDynamoDbDataSource('name', tableRef); 如果查看上的示例代码,我注意到它们没有创建角色来授予Appsync访问表的权限: const itemsTableRole = new Role(this, 'ItemsDynamo

我使用新的高级GraphqlAPI类而不是低级构造来创建Appsync api并将其连接到表

this.api = new GraphqlApi(...);
新的GraphqlApi实例允许您简单地添加数据源:

this.api.addDynamoDbDataSource('name', tableRef);

如果查看上的示例代码,我注意到它们没有创建角色来授予Appsync访问表的权限:

const itemsTableRole = new Role(this, 'ItemsDynamoDBRole', {
      assumedBy: new ServicePrincipal('appsync.amazonaws.com')
});

我从这个例子中得到的这个片段:

在该示例中,他们仍然使用
CfnGraphQLApi
构造。 因此,他们正在添加角色,并且正在为具有执行特定操作权限的表向角色添加策略。这是有道理的

所以我的问题是,当使用
GrahpQl
类时,如果我不添加角色,我就无法执行查询。如果我不添加权限,如:

this.appSyncRole.addToPolicy(new PolicyStatement({
        actions: ['dynamodb:*'],
        resources: [`${table.tableArn}/index/*`],
        effect: Effect.ALLOW
      }));
然后我得到一个错误,比如:

"message":"User: arn:aws:sts::[ACCOUNT]:assumed-role/[ROLENAME]/APPSYNC_ASSUME_ROLE is not authorized to perform: dynamodb:Query on resource: arn:aws:dynamodb[REGION]:[ACCOUNT]:table/[TABLENAME]/index/byEmail 

那么,GrahQLQL的示例是否不完整,或者我是否遗漏了其他内容?

看起来GraphqlAPI支持4种类型的身份验证类型-。您的
GraphqlApi
构造代码没有显示您正在使用的内容-
this.api=newgraphqlapi(…)。链接到的示例使用的是
AWS IAM
。有关权限的更多信息,请参阅这些文档-@ultimoTG我不认为我使用的身份验证的形式是相关的(对于未经授权的路由,我使用Cognito和IAM进行记录)。我的查询是针对允许Appsync从DynamoDB写入或读取的角色。如果不添加该角色,则无法访问数据库。我最终使用了
新的DynamoDbDataSource()
,这允许我传递服务角色。但是当您使用
addDynamoDbDataSource
时,您不能提供此角色。我发现这有点令人困惑,因为我认为您需要我前面提到的IAM角色。如果您要导入表,则需要使用此处记录的解决方法。除此之外,我只是做了标准数据源的创建,它工作了。看起来GraphqlAPI支持4种身份验证类型-。您的
GraphqlApi
构造代码没有显示您正在使用的内容-
this.api=newgraphqlapi(…)。链接到的示例使用的是
AWS IAM
。有关权限的更多信息,请参阅这些文档-@ultimoTG我不认为我使用的身份验证的形式是相关的(对于未经授权的路由,我使用Cognito和IAM进行记录)。我的查询是针对允许Appsync从DynamoDB写入或读取的角色。如果不添加该角色,则无法访问数据库。我最终使用了
新的DynamoDbDataSource()
,这允许我传递服务角色。但是当您使用
addDynamoDbDataSource
时,您不能提供此角色。我发现这有点令人困惑,因为我认为您需要我前面提到的IAM角色。如果您要导入表,则需要使用此处记录的解决方法。除此之外,我只是做了标准数据源的创建,它工作了。