Skip to content

Commit 355de62

Browse files
authored
feat: Add appsync arguments to support appsync security features (#61)
1 parent 85657bf commit 355de62

File tree

6 files changed

+34
-3
lines changed

6 files changed

+34
-3
lines changed

README.md

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,13 @@ $ terraform apply
133133
| Name | Version |
134134
|------|---------|
135135
| <a name="requirement_terraform"></a> [terraform](#requirement\_terraform) | >= 1.0 |
136-
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.1 |
136+
| <a name="requirement_aws"></a> [aws](#requirement\_aws) | >= 5.37.0 |
137137

138138
## Providers
139139

140140
| Name | Version |
141141
|------|---------|
142-
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.1 |
142+
| <a name="provider_aws"></a> [aws](#provider\_aws) | >= 5.37.0 |
143143

144144
## Modules
145145

@@ -194,6 +194,7 @@ No modules.
194194
| <a name="input_functions"></a> [functions](#input\_functions) | Map of functions to create | `any` | `{}` | no |
195195
| <a name="input_graphql_api_tags"></a> [graphql\_api\_tags](#input\_graphql\_api\_tags) | Map of tags to add to GraphQL API | `map(string)` | `{}` | no |
196196
| <a name="input_iam_permissions_boundary"></a> [iam\_permissions\_boundary](#input\_iam\_permissions\_boundary) | ARN for iam permissions boundary | `string` | `null` | no |
197+
| <a name="input_introspection_config"></a> [introspection\_config](#input\_introspection\_config) | Whether to enable or disable introspection of the GraphQL API. | `string` | `null` | no |
197198
| <a name="input_lambda_allowed_actions"></a> [lambda\_allowed\_actions](#input\_lambda\_allowed\_actions) | List of allowed IAM actions for datasources type AWS\_LAMBDA | `list(string)` | <pre>[<br> "lambda:invokeFunction"<br>]</pre> | no |
198199
| <a name="input_lambda_authorizer_config"></a> [lambda\_authorizer\_config](#input\_lambda\_authorizer\_config) | Nested argument containing Lambda authorizer configuration. | `map(string)` | `{}` | no |
199200
| <a name="input_log_cloudwatch_logs_role_arn"></a> [log\_cloudwatch\_logs\_role\_arn](#input\_log\_cloudwatch\_logs\_role\_arn) | Amazon Resource Name of the service role that AWS AppSync will assume to publish to Amazon CloudWatch logs in your account. | `string` | `null` | no |
@@ -205,8 +206,10 @@ No modules.
205206
| <a name="input_name"></a> [name](#input\_name) | Name of GraphQL API | `string` | `""` | no |
206207
| <a name="input_openid_connect_config"></a> [openid\_connect\_config](#input\_openid\_connect\_config) | Nested argument containing OpenID Connect configuration. | `map(string)` | `{}` | no |
207208
| <a name="input_opensearchservice_allowed_actions"></a> [opensearchservice\_allowed\_actions](#input\_opensearchservice\_allowed\_actions) | List of allowed IAM actions for datasources type AMAZON\_OPENSEARCH\_SERVICE | `list(string)` | <pre>[<br> "es:ESHttpDelete",<br> "es:ESHttpHead",<br> "es:ESHttpGet",<br> "es:ESHttpPost",<br> "es:ESHttpPut"<br>]</pre> | no |
209+
| <a name="input_query_depth_limit"></a> [query\_depth\_limit](#input\_query\_depth\_limit) | The maximum depth a query can have in a single request. | `number` | `null` | no |
208210
| <a name="input_relational_database_allowed_actions"></a> [relational\_database\_allowed\_actions](#input\_relational\_database\_allowed\_actions) | List of allowed IAM actions for datasources type RELATIONAL\_DATABASE | `list(string)` | <pre>[<br> "rds-data:BatchExecuteStatement",<br> "rds-data:BeginTransaction",<br> "rds-data:CommitTransaction",<br> "rds-data:ExecuteStatement",<br> "rds-data:RollbackTransaction"<br>]</pre> | no |
209211
| <a name="input_resolver_caching_ttl"></a> [resolver\_caching\_ttl](#input\_resolver\_caching\_ttl) | Default caching TTL for resolvers when caching is enabled | `number` | `60` | no |
212+
| <a name="input_resolver_count_limit"></a> [resolver\_count\_limit](#input\_resolver\_count\_limit) | The maximum number of resolvers that can be invoked in a single request. | `number` | `null` | no |
210213
| <a name="input_resolvers"></a> [resolvers](#input\_resolvers) | Map of resolvers to create | `any` | `{}` | no |
211214
| <a name="input_schema"></a> [schema](#input\_schema) | The schema definition, in GraphQL schema language format. Terraform cannot perform drift detection of this configuration. | `string` | `""` | no |
212215
| <a name="input_secrets_manager_allowed_actions"></a> [secrets\_manager\_allowed\_actions](#input\_secrets\_manager\_allowed\_actions) | List of allowed IAM actions for secrets manager datasources type RELATIONAL\_DATABASE | `list(string)` | <pre>[<br> "secretsmanager:GetSecretValue"<br>]</pre> | no |

examples/complete/main.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ module "appsync" {
9090
domain_name_association_enabled = true
9191
caching_enabled = true
9292

93+
introspection_config = "DISABLED"
94+
query_depth_limit = 10
95+
resolver_count_limit = 25
96+
9397
domain_name = "api.${local.domain}"
9498
domain_name_description = "My ${random_pet.this.id} AppSync Domain"
9599
certificate_arn = module.acm.acm_certificate_arn

main.tf

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,10 @@ resource "aws_appsync_graphql_api" "this" {
1515
xray_enabled = var.xray_enabled
1616
visibility = var.visibility
1717

18+
introspection_config = var.introspection_config
19+
query_depth_limit = var.query_depth_limit
20+
resolver_count_limit = var.resolver_count_limit
21+
1822
dynamic "log_config" {
1923
for_each = var.logging_enabled ? [true] : []
2024

variables.tf

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -321,3 +321,20 @@ variable "functions" {
321321
type = any
322322
default = {}
323323
}
324+
variable "introspection_config" {
325+
description = "Whether to enable or disable introspection of the GraphQL API."
326+
type = string
327+
default = null
328+
}
329+
330+
variable "query_depth_limit" {
331+
description = "The maximum depth a query can have in a single request."
332+
type = number
333+
default = null
334+
}
335+
336+
variable "resolver_count_limit" {
337+
description = "The maximum number of resolvers that can be invoked in a single request."
338+
type = number
339+
default = null
340+
}

versions.tf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ terraform {
44
required_providers {
55
aws = {
66
source = "hashicorp/aws"
7-
version = ">= 5.1"
7+
version = ">= 5.37.0"
88
}
99
}
1010
}

wrappers/main.tf

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ module "wrapper" {
5151
functions = try(each.value.functions, var.defaults.functions, {})
5252
graphql_api_tags = try(each.value.graphql_api_tags, var.defaults.graphql_api_tags, {})
5353
iam_permissions_boundary = try(each.value.iam_permissions_boundary, var.defaults.iam_permissions_boundary, null)
54+
introspection_config = try(each.value.introspection_config, var.defaults.introspection_config, null)
5455
lambda_allowed_actions = try(each.value.lambda_allowed_actions, var.defaults.lambda_allowed_actions, ["lambda:invokeFunction"])
5556
lambda_authorizer_config = try(each.value.lambda_authorizer_config, var.defaults.lambda_authorizer_config, {})
5657
log_cloudwatch_logs_role_arn = try(each.value.log_cloudwatch_logs_role_arn, var.defaults.log_cloudwatch_logs_role_arn, null)
@@ -62,8 +63,10 @@ module "wrapper" {
6263
name = try(each.value.name, var.defaults.name, "")
6364
openid_connect_config = try(each.value.openid_connect_config, var.defaults.openid_connect_config, {})
6465
opensearchservice_allowed_actions = try(each.value.opensearchservice_allowed_actions, var.defaults.opensearchservice_allowed_actions, ["es:ESHttpDelete", "es:ESHttpHead", "es:ESHttpGet", "es:ESHttpPost", "es:ESHttpPut"])
66+
query_depth_limit = try(each.value.query_depth_limit, var.defaults.query_depth_limit, null)
6567
relational_database_allowed_actions = try(each.value.relational_database_allowed_actions, var.defaults.relational_database_allowed_actions, ["rds-data:BatchExecuteStatement", "rds-data:BeginTransaction", "rds-data:CommitTransaction", "rds-data:ExecuteStatement", "rds-data:RollbackTransaction"])
6668
resolver_caching_ttl = try(each.value.resolver_caching_ttl, var.defaults.resolver_caching_ttl, 60)
69+
resolver_count_limit = try(each.value.resolver_count_limit, var.defaults.resolver_count_limit, null)
6770
resolvers = try(each.value.resolvers, var.defaults.resolvers, {})
6871
schema = try(each.value.schema, var.defaults.schema, "")
6972
secrets_manager_allowed_actions = try(each.value.secrets_manager_allowed_actions, var.defaults.secrets_manager_allowed_actions, ["secretsmanager:GetSecretValue"])

0 commit comments

Comments
 (0)