限制 AWS CDK 中的 AppSync 权限

Restrict AppSync permissions in AWS CDK

我正在尝试使用 Python 中的 CDK 在 AWS 中构建连接到 DynamoDB table 的 AppSync API。我希望这是只读的 API,没有创建、删除和更新。在我的堆栈中,我添加了 AppSync API:

# AppSync API for data and data catalogue queries
    api = _appsync.GraphqlApi(self,
        'DataQueryAPI',
        name='dataqueryapi',
        log_config=_appsync.LogConfig(field_log_level=_appsync.FieldLogLevel.ALL),
        schema=_appsync.Schema.from_asset('graphql/schema.graphql')
    )

然后我将 DynamoDB table 添加为数据源,如下所示:

# Data Catalogue DynamoDB Table as AppSync Data Source
    data_catalogue_api_ds = api.add_dynamo_db_data_source(
        'DataCatalogueDS', 
        data_catalogue_dynamodb
        )

我后来添加了一些带有映射模板的解析器,但即使在上述之后,如果我 运行 cdk diff 我看到这将创建权限更改,在交互时似乎授予对 AppSync 的完全访问权限使用 DynamoDB table。

我只希望它是只读的 API,所以问题是如何限制权限,以便 AppSync API 只能从 table 中读取?

我尝试的是添加一个明确授予查询权限的角色,希望这会阻止创建更广泛的权限集,但它没有那种效果,我不太确定我要去哪里或者它是否在正确的轨道上:

role = _iam.Role(self,
        "Role",
        assumed_by=_iam.ServicePrincipal("appsync.amazonaws.com")
        )

api.grant_query(role, "getData")

根据对 this question 的评论,我将 add_dynamo_db_data_source 换成了 DynamoDbDataSource,因为它有一个 read_only_access 参数。所以我现在使用:

data_catalogue_api_ds = _appsync.DynamoDbDataSource(self,
        'DataCatalogueDS',
         table=data_catalogue_dynamodb,
         read_only_access=True,
         api=api
    )

这似乎只是给我读取权限: