# Copyright 2023 Amazon.com, Inc. or its affiliates. All Rights served. # SPDX-License-Identifier: MIT-0 # # Permission is hereby granted, free of charge, to any person taining a copy of this # software and associated documentation files (the oftware"), to deal in the Software # without restriction, including without limitation the rights use, copy, modify, # merge, publish, distribute, sublicense, and/or sell copies the Software, and to # permit persons to whom the Software is furnished to do so. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY ND, EXPRESS OR IMPLIED, # INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF RCHANTABILITY, FITNESS FOR A # PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL E AUTHORS OR COPYRIGHT # HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, ETHER IN AN ACTION # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN NNECTION WITH THE # SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. #################### # VPC data sources # #################### data "aws_availability_zones" "available" {} ########################### # VPC resources & modules # ########################### module "vpc" { source = "terraform-aws-modules/vpc/aws" name = "neptune-sample-vpc" cidr = "10.0.0.0/16" azs = data.aws_availability_zones.available.names private_subnets = ["10.0.1.0/24", "10.0.2.0/24", "10.0.3.0/24"] public_subnets = ["10.0.4.0/24", "10.0.5.0/24", "10.0.6.0/24"] enable_nat_gateway = true single_nat_gateway = true enable_dns_hostnames = true map_public_ip_on_launch = false enable_flow_log = true create_flow_log_cloudwatch_log_group = true flow_log_cloudwatch_iam_role_arn = aws_iam_role.vpc_flow_log_cloudwatch.arn flow_log_max_aggregation_interval = 60 public_subnet_tags = { "network" = "public" } private_subnet_tags = { "network" = "private" } } resource "aws_iam_role" "vpc_flow_log_cloudwatch" { name_prefix = "vpc-flow-log-role-" assume_role_policy = data.aws_iam_policy_document.flow_log_cloudwatch_assume_role.json } data "aws_iam_policy_document" "flow_log_cloudwatch_assume_role" { statement { sid = "AWSVPCFlowLogsAssumeRole" principals { type = "Service" identifiers = ["vpc-flow-logs.amazonaws.com"] } effect = "Allow" actions = ["sts:AssumeRole"] } } resource "aws_iam_role_policy_attachment" "vpc_flow_log_cloudwatch" { role = aws_iam_role.vpc_flow_log_cloudwatch.name policy_arn = aws_iam_policy.vpc_flow_log_cloudwatch.arn } resource "aws_iam_policy" "vpc_flow_log_cloudwatch" { name_prefix = "vpc-flow-log-to-cloudwatch-" policy = data.aws_iam_policy_document.vpc_flow_log_cloudwatch.json } data "aws_iam_policy_document" "vpc_flow_log_cloudwatch" { statement { sid = "AWSVPCFlowLogsPushToCloudWatch" effect = "Allow" actions = [ "logs:CreateLogStream", "logs:PutLogEvents", "logs:DescribeLogGroups", "logs:DescribeLogStreams", ] resources = [ "arn:aws:logs:*:*:log-group:*", "arn:aws:logs:*:*:log-group:*:log-stream:*" ] } }