Amazon web services AWS CDK安装程序appsync与dynamodb表格权限
我使用新的高级GraphqlAPI类而不是低级构造来创建Appsync api并将其连接到表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
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角色。如果您要导入表,则需要使用此处记录的解决方法。除此之外,我只是做了标准数据源的创建,它工作了。