限制 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
)
这似乎只是给我读取权限:
我正在尝试使用 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
)
这似乎只是给我读取权限: