123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- /*
- ORIGINAL SOURCE: https://raw.githubusercontent.com/gravitational/teleport/master/examples/aws/terraform/starter-cluster/dynamo.tf
-
- DynamoDB is used to store cluster state, event
- metadata, and a simple locking mechanism for SSL
- cert generation and renewal.
- */
- // DynamoDB table for storing cluster state
- #checkov:skip=CKV2_AWS_16:Auto Scaling not needed at this time
- resource "aws_dynamodb_table" "teleport" {
- name = var.instance_name
- read_capacity = 10
- write_capacity = 10
- hash_key = "HashKey"
- range_key = "FullPath"
- billing_mode = "PROVISIONED"
- server_side_encryption {
- kms_key_arn = aws_kms_key.s3.arn
- enabled = true
- }
- lifecycle {
- ignore_changes = [
- read_capacity,
- write_capacity,
- ]
- }
- attribute {
- name = "HashKey"
- type = "S"
- }
- attribute {
- name = "FullPath"
- type = "S"
- }
- point_in_time_recovery {
- enabled = true
- }
- stream_enabled = "true"
- stream_view_type = "NEW_IMAGE"
- ttl {
- attribute_name = "Expires"
- enabled = true
- }
- tags = merge(local.standard_tags, var.tags, { Name = var.instance_name })
- }
- // DynamoDB table for storing cluster events
- #checkov:skip=CKV2_AWS_16:Auto Scaling not needed at this time
- resource "aws_dynamodb_table" "teleport_events" {
- name = "${var.instance_name}-events"
- read_capacity = 10
- write_capacity = 10
- hash_key = "SessionID"
- range_key = "EventIndex"
- billing_mode = "PROVISIONED"
- server_side_encryption {
- kms_key_arn = aws_kms_key.s3.arn
- enabled = true
- }
- global_secondary_index {
- name = "timesearchV2"
- hash_key = "CreatedAtDate"
- range_key = "CreatedAt"
- write_capacity = 10
- read_capacity = 10
- projection_type = "ALL"
- }
- lifecycle {
- ignore_changes = [
- read_capacity,
- write_capacity,
- ]
- }
- attribute {
- name = "SessionID"
- type = "S"
- }
- attribute {
- name = "EventIndex"
- type = "N"
- }
- attribute {
- name = "CreatedAtDate"
- type = "S"
- }
- attribute {
- name = "CreatedAt"
- type = "N"
- }
- point_in_time_recovery {
- enabled = true
- }
- ttl {
- attribute_name = "Expires"
- enabled = true
- }
- tags = merge(local.standard_tags, var.tags, { Name = var.instance_name })
- }
- // DynamoDB table for simple locking mechanism
- #checkov:skip=CKV2_AWS_16:Auto Scaling not needed at this time
- resource "aws_dynamodb_table" "locks" {
- name = "${var.instance_name}-locks"
- read_capacity = 5
- write_capacity = 5
- hash_key = "Lock"
- billing_mode = "PROVISIONED"
- #checkov:skip=CKV_AWS_119:Encrypted by AWS Owned key config'd via console
- #tfsec:ignore:aws-dynamodb-table-customer-key AWS Owned key config'd via console
- #tfsec:ignore:aws-dynamodb-enable-at-rest-encryption False positive
- server_side_encryption {
- enabled = false
- }
- lifecycle {
- ignore_changes = [
- read_capacity,
- write_capacity,
- ]
- }
- attribute {
- name = "Lock"
- type = "S"
- }
- #checkov:skip=CKV_AWS_28:No need for PiTR here
- point_in_time_recovery {
- enabled = false
- }
- ttl {
- attribute_name = "Expires"
- enabled = true
- }
- tags = merge(local.standard_tags, var.tags, { Name = var.instance_name })
- }
|