HistoryPurge: Clearing out 238 old commits
This commit is contained in:
commit
a9c0c1e61e
17
.gitignore
vendored
Normal file
17
.gitignore
vendored
Normal file
@ -0,0 +1,17 @@
|
||||
*.tfstate.backup
|
||||
*.backup
|
||||
*.tfstate
|
||||
*.tfstate.lock
|
||||
**/*.tfstate
|
||||
**/*.backup
|
||||
.terraform/
|
||||
.DS_Store
|
||||
*.iml
|
||||
.idea
|
||||
.terraform.lock.hcl
|
||||
*.log
|
||||
examples/
|
||||
experimental/
|
||||
headdesk-aws/
|
||||
vsphere-yige/
|
||||
anz-sandbox/
|
3
.gitmodules
vendored
Normal file
3
.gitmodules
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
[submodule "modules/ApplicationIntegration/terraform-aws-apigateway-v2"]
|
||||
path = modules/ApplicationIntegration/terraform-aws-apigateway-v2
|
||||
url = https://github.com/terraform-aws-modules/terraform-aws-apigateway-v2.git
|
12
LICENSE
Normal file
12
LICENSE
Normal file
@ -0,0 +1,12 @@
|
||||
BSD Zero Clause License
|
||||
|
||||
Permission to use, copy, modify, and/or distribute this software for any
|
||||
purpose with or without fee is hereby granted.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||
PERFORMANCE OF THIS SOFTWARE.
|
6
README.md
Normal file
6
README.md
Normal file
@ -0,0 +1,6 @@
|
||||
# terraform.aws-baseline-infra
|
||||
|
||||
terraform modules for deploying baseline resources.
|
||||
|
||||
## Repo info
|
||||
URL: https://xpk.headdesk.me/git/xpk/terraform.aws-baseline-infra
|
20
examples/awsbackup/.terraform.lock.hcl
Normal file
20
examples/awsbackup/.terraform.lock.hcl
Normal file
@ -0,0 +1,20 @@
|
||||
# This file is maintained automatically by "tofu init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.opentofu.org/hashicorp/aws" {
|
||||
version = "5.47.0"
|
||||
constraints = "~> 5.0"
|
||||
hashes = [
|
||||
"h1:oBap1Z3sKRRzRqKjkILpql/fa0gssLL/iqjDu62105I=",
|
||||
"zh:0a22081994a733ef564fefdf9660e172af97ea2d2e34bcdaa4868300436248e8",
|
||||
"zh:4a1be5a820a33baeaf81dc33d37e46a0f813f5395247f6449646fae7c9608a53",
|
||||
"zh:8e156edfe38e2aed76c02e835eb6ba1fa4444feacdb824500cfdbad76abd0582",
|
||||
"zh:9062035afc3d592dbbbd7f7cb41d4ce077e06584251aac50d116c04b4e3b4d3b",
|
||||
"zh:a3abedd6b5640bf20d0d39ecaa938e382cbfe54dfb129c3fc291d9d695d9dffc",
|
||||
"zh:b8ee3c37f497410a307e102638f8ce1cc1c77099498ff5438e506ce604cdf8dd",
|
||||
"zh:c64d812bfdff6e7a6729bc035f6f8c86e69a01e9409fe1db551a233e320dc9e5",
|
||||
"zh:c8df7f2993fdfc1bd15ab48eb280f4d11c5526c632c3beb62f014c0079715160",
|
||||
"zh:cf413154640dcd5ee7286b43e395495f8f44d72f717cf2a20234c240cba528fa",
|
||||
"zh:f5186377a986b96150611d891700d49125367b4ad3ab534b429305e8fdaa8dcc",
|
||||
]
|
||||
}
|
40
examples/awsbackup/main.tf
Normal file
40
examples/awsbackup/main.tf
Normal file
@ -0,0 +1,40 @@
|
||||
module "aws-backup" {
|
||||
source = "../../modules/storage/aws-backup"
|
||||
|
||||
daily-backup-cron = var.daily-backup-cron
|
||||
monthly-backup-cron = var.monthly-backup-cron
|
||||
daily-backup-retention = var.daily-backup-retention
|
||||
monthly-backup-retention = var.monthly-backup-retention
|
||||
service-opt-in = {
|
||||
"Aurora" : {
|
||||
enabled = false
|
||||
}
|
||||
"DynamoDB" : {
|
||||
enabled = true
|
||||
}
|
||||
"EBS" : {
|
||||
enabled = false
|
||||
}
|
||||
"EC2" : {
|
||||
enabled = true
|
||||
}
|
||||
"EFS" : {
|
||||
enabled = true
|
||||
}
|
||||
"FSx" : {
|
||||
enabled = false
|
||||
}
|
||||
"Redshift" : {
|
||||
enabled = true
|
||||
}
|
||||
"RDS" : {
|
||||
enabled = true
|
||||
}
|
||||
"VirtualMachine" : {
|
||||
enabled = false
|
||||
}
|
||||
"S3" : {
|
||||
enabled = false
|
||||
}
|
||||
}
|
||||
}
|
23
examples/awsbackup/provider.tf
Normal file
23
examples/awsbackup/provider.tf
Normal file
@ -0,0 +1,23 @@
|
||||
provider "aws" {
|
||||
region = var.aws-region
|
||||
default_tags {
|
||||
tags = {
|
||||
ServiceProvider = "RackspaceTechnology"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
Owner = var.owner
|
||||
TerraformDir = "${reverse(split("/", path.cwd))[1]}/${reverse(split("/", path.cwd))[0]}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
terraform {
|
||||
required_version = ">= 1.3.9"
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = "~> 5.0"
|
||||
}
|
||||
}
|
||||
}
|
11
examples/awsbackup/terraform.tfvars
Normal file
11
examples/awsbackup/terraform.tfvars
Normal file
@ -0,0 +1,11 @@
|
||||
aws-region = "ap-east-1"
|
||||
customer-name = "ken2026"
|
||||
environment = "dev"
|
||||
project = "iac"
|
||||
application = "backup"
|
||||
owner = "ken2026"
|
||||
daily-backup-retention = 31
|
||||
daily-backup-cron = "cron(0 20 * * ? *)"
|
||||
monthly-backup-retention = 365
|
||||
monthly-backup-cron = "cron(0 20 1 * ? *)"
|
||||
# cron(Minutes Hours Day-of-month Month Day-of-week Year)
|
11
examples/awsbackup/variables.tf
Normal file
11
examples/awsbackup/variables.tf
Normal file
@ -0,0 +1,11 @@
|
||||
variable "aws-region" {}
|
||||
variable "customer-name" {}
|
||||
variable "environment" {}
|
||||
variable "project" {}
|
||||
variable "application" {}
|
||||
variable "owner" {}
|
||||
|
||||
variable "daily-backup-retention" {}
|
||||
variable "daily-backup-cron" {}
|
||||
variable "monthly-backup-retention" {}
|
||||
variable "monthly-backup-cron" {}
|
BIN
examples/backup.tar
Normal file
BIN
examples/backup.tar
Normal file
Binary file not shown.
12
examples/baseline-resources/README.md
Normal file
12
examples/baseline-resources/README.md
Normal file
@ -0,0 +1,12 @@
|
||||
# Root module for creating baseline resources including:
|
||||
- iam password policy
|
||||
- delete default VPCs in all region
|
||||
- create cloudtrail
|
||||
- enable aws config in all region
|
||||
- enable guardduty
|
||||
- enable securityhub
|
||||
- disable s3 public access
|
||||
- require EBS encryption
|
||||
|
||||
## If AWS organisation is in use
|
||||
If you are using AWS organisation, setup delegated admin for guardduty and securityhub. This allows centralised management.
|
51
examples/baseline-resources/main.tf
Normal file
51
examples/baseline-resources/main.tf
Normal file
@ -0,0 +1,51 @@
|
||||
module "iam-baseline" {
|
||||
# iam password policy, baseline roles, access analyzer, cloudhealth role
|
||||
source = "../../modules/security_identity_compliance/roles_iam_resources"
|
||||
|
||||
customer-name = var.customer-name
|
||||
default-tags = local.default-tags
|
||||
create-cloudhealth-resources = false
|
||||
}
|
||||
|
||||
module "cloudtrail" {
|
||||
# Create cloudtrail
|
||||
source = "../../modules/security_identity_compliance/cloudtrail_cwlogs"
|
||||
resource-prefix = local.resource-prefix
|
||||
default-tags = local.default-tags
|
||||
}
|
||||
|
||||
module "delete-default-vpcs" {
|
||||
# delete default VPCs in all regions
|
||||
source = "../../modules/networking/delete-default-vpcs"
|
||||
}
|
||||
|
||||
module "enable-aws-config" {
|
||||
# enable aws config in all regions and setup aggregation
|
||||
source = "../../modules/security_identity_compliance/aws_config"
|
||||
resource-prefix = local.resource-prefix
|
||||
default-tags = local.default-tags
|
||||
}
|
||||
|
||||
module "enable-guardduty" {
|
||||
/* enable guardduty
|
||||
If you are using AWS organisation, GD delegated admin should be configured
|
||||
on the landing zone security account. This allows centralised management.
|
||||
See https://docs.aws.amazon.com/guardduty/latest/ug/guardduty_settingup.html
|
||||
*/
|
||||
source = "../../modules/security_identity_compliance/guardduty"
|
||||
default-tags = local.default-tags
|
||||
}
|
||||
|
||||
module "enable-securityhub" {
|
||||
/* enable security hub
|
||||
If you are using AWS organisation, SH deleted admin should be configured
|
||||
on the landing zone security account. This allows centralised management.
|
||||
https://docs.aws.amazon.com/securityhub/latest/userguide/designate-orgs-admin-account.html
|
||||
*/
|
||||
source = "../../modules/security_identity_compliance/security_hub"
|
||||
}
|
||||
|
||||
module "default-account-settings" {
|
||||
# other default account settings
|
||||
source = "../../modules/security_identity_compliance/other-default-settings"
|
||||
}
|
13
examples/baseline-resources/provider.tf
Normal file
13
examples/baseline-resources/provider.tf
Normal file
@ -0,0 +1,13 @@
|
||||
provider "aws" {
|
||||
region = var.aws-region
|
||||
}
|
||||
|
||||
terraform {
|
||||
required_version = "~> 1.2.5"
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = "~> 3.75.2"
|
||||
}
|
||||
}
|
||||
}
|
5
examples/baseline-resources/terraform.tfvars
Normal file
5
examples/baseline-resources/terraform.tfvars
Normal file
@ -0,0 +1,5 @@
|
||||
aws-region = "ap-southeast-1"
|
||||
customer-name = "ken2026"
|
||||
environment = "lab"
|
||||
project = "terraform-dev"
|
||||
application = "infra"
|
19
examples/baseline-resources/variables.tf
Normal file
19
examples/baseline-resources/variables.tf
Normal file
@ -0,0 +1,19 @@
|
||||
variable "aws-region" {}
|
||||
variable "customer-name" {}
|
||||
variable "environment" {}
|
||||
variable "project" {}
|
||||
variable "application" {}
|
||||
|
||||
locals {
|
||||
default-tags = {
|
||||
ServiceProvider = "RackspaceTechnology"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
TerraformMode = "managed"
|
||||
TerraformDir = trimprefix(path.cwd, "/my/work/xpk-git/")
|
||||
BuildDate = formatdate("YYYYMMDD", timestamp())
|
||||
}
|
||||
resource-prefix = "${var.environment}-substr(${var.aws-region},0,2)-${var.customer-name}-${var.project}"
|
||||
}
|
||||
|
32
examples/bea-adc/.terraform.lock.hcl
Normal file
32
examples/bea-adc/.terraform.lock.hcl
Normal file
@ -0,0 +1,32 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/aws" {
|
||||
version = "4.46.0"
|
||||
constraints = ">= 3.25.0, >= 3.75.2"
|
||||
hashes = [
|
||||
"h1:EZB4OgvytV38JpWyye9zoMQ0bfT9yB9xSXM5NY3Lrws=",
|
||||
"zh:1678e6a4bdb3d81a6713adc62ca0fdb8250c584e10c10d1daca72316e9db8df2",
|
||||
"zh:329903acf86ef6072502736dff4c43c2b50f762a958f76aa924e2d74c7fca1e3",
|
||||
"zh:33db8131fe0ec7e1d9f30bc9f65c2440e9c1f708d681b6062757a351f1df7ce6",
|
||||
"zh:3a3b010bc393784c16f4b6cdce7f76db93d5efa323fce4920bfea9e9ba6abe44",
|
||||
"zh:979e2713a5759a7483a065e149e3cb69db9225326fc0457fa3fc3a48aed0c63f",
|
||||
"zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
|
||||
"zh:9efcf0067e16ad53da7504178a05eb2118770b4ae00c193c10ecad4cbfce308e",
|
||||
"zh:a10655bf1b6376ab7f3e55efadf54dc70f7bd07ca11369557c312095076f9d62",
|
||||
"zh:b0394dd42cbd2a718a7dd7ae0283f04769aaf8b3d52664e141da59c0171a11ab",
|
||||
"zh:b958e614c2cf6d9c05a6ad5e94dc5c04b97ebfb84415da068be5a081b5ebbe24",
|
||||
"zh:ba5069e624210c63ad9e633a8eb0108b21f2322bc4967ba2b82d09168c466888",
|
||||
"zh:d7dfa597a17186e7f4d741dd7111849f1c0dd6f7ebc983043d8262d2fb37b408",
|
||||
"zh:e8a641ca2c99f96d64fa2725875e797273984981d3e54772a2823541c44e3cd3",
|
||||
"zh:f89898b7067c4246293a8007f59f5cfcac7b8dd251d39886c7a53ba596251466",
|
||||
"zh:fb1e1df1d5cc208e08a850f8e84423bce080f01f5e901791c79df369d3ed52f2",
|
||||
]
|
||||
}
|
||||
|
||||
provider "registry.terraform.io/hashicorp/random" {
|
||||
version = "3.4.3"
|
||||
hashes = [
|
||||
"h1:xZGZf18JjMS06pFa4NErzANI98qi59SEcBsOcS2P2yQ=",
|
||||
]
|
||||
}
|
1
examples/bea-adc/.terraform/modules/modules.json
Normal file
1
examples/bea-adc/.terraform/modules/modules.json
Normal file
@ -0,0 +1 @@
|
||||
{"Modules":[{"Key":"vpc-subnets.vpc-ep","Source":"../vpc-endpoints","Dir":"../../modules/networking/vpc-endpoints"},{"Key":"","Source":"","Dir":"."},{"Key":"adconnector","Source":"../../modules/security_identity_compliance/ds-adconnector","Dir":"../../modules/security_identity_compliance/ds-adconnector"},{"Key":"vpc-subnets","Source":"../../modules/networking/vpc_subnets","Dir":"../../modules/networking/vpc_subnets"}]}
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/aws/4.46.0/linux_amd64
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/random/3.4.3/linux_amd64
|
7
examples/bea-adc/README.md
Normal file
7
examples/bea-adc/README.md
Normal file
@ -0,0 +1,7 @@
|
||||
# bea-adc
|
||||
Module to deploy network resources and ad connector for use with AWS SSO
|
||||
|
||||
## Input variables
|
||||
The variable adc-service-account-password needs to be supplied via environment variable. This prevents terraform
|
||||
from saving the password in tfstate or in the source code.
|
||||
|
15
examples/bea-adc/locals.tf
Normal file
15
examples/bea-adc/locals.tf
Normal file
@ -0,0 +1,15 @@
|
||||
data "aws_caller_identity" "this" {}
|
||||
|
||||
locals {
|
||||
default-tags = merge({
|
||||
ServiceProvider = "None"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
TerraformMode = "managed"
|
||||
TerraformDir = trimprefix(path.cwd, "/my/work/xpk-git/")
|
||||
CreatedBy = data.aws_caller_identity.this.arn
|
||||
BuildDate = formatdate("YYYYMMDD", timestamp())
|
||||
})
|
||||
resource-prefix = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}"
|
||||
}
|
48
examples/bea-adc/main.tf
Normal file
48
examples/bea-adc/main.tf
Normal file
@ -0,0 +1,48 @@
|
||||
module "vpc-subnets" {
|
||||
source = "../../modules/networking/vpc_subnets"
|
||||
|
||||
application = var.application
|
||||
aws-region = var.aws-region
|
||||
customer-name = var.customer-name
|
||||
default-tags = local.default-tags
|
||||
environment = var.environment
|
||||
project = var.project
|
||||
vpc-cidr = var.vpc-cidr
|
||||
number-of-private-subnets-per-az = var.number-of-private-subnets-per-az
|
||||
number-of-public-subnets-per-az = var.number-of-public-subnets-per-az
|
||||
create-nat-gateway = false
|
||||
enable-flow-log = true
|
||||
vpcflowlog-retain-days = 90
|
||||
vpcflowlog-cwl-loggroup-key-arn = ""
|
||||
create-free-vpc-endpoints = false
|
||||
}
|
||||
|
||||
# S3 flow log needs to be created separately. it's not supported by vpc_subnets module
|
||||
resource "aws_flow_log" "vpc-log-s3" {
|
||||
log_destination = var.vpc-flowlog-bucket-arn
|
||||
log_destination_type = "s3"
|
||||
traffic_type = "ALL"
|
||||
vpc_id = module.vpc-subnets.vpc_id
|
||||
}
|
||||
|
||||
/*
|
||||
After adc is deployed by terraform, the following tasks need to be performed manually.
|
||||
They cannot be managed by terraform
|
||||
1. Edit security group created for adconnector. SG name is d-???_controllers
|
||||
2. Enable client LDAPS communication
|
||||
3. Setup maintenance notification through SNS
|
||||
4. Enable SSO application. Setting enable_sso in member account results in error. alias is deliberately not set
|
||||
*/
|
||||
|
||||
module "adconnector" {
|
||||
source = "../../modules/security_identity_compliance/ds-adconnector"
|
||||
|
||||
adc-dns-ips = var.adc-dns-ips
|
||||
adc-domainname = var.adc-domainname
|
||||
adc-service-account-password = var.adc-service-account-password
|
||||
adc-service-account-username = var.adc-service-account-username
|
||||
adc-size = var.adc-size
|
||||
adc-subnet-ids = module.vpc-subnets.private-subnet-ids
|
||||
adc-vpc-id = module.vpc-subnets.vpc_id
|
||||
default-tags = local.default-tags
|
||||
}
|
11
examples/bea-adc/outputs.tf
Normal file
11
examples/bea-adc/outputs.tf
Normal file
@ -0,0 +1,11 @@
|
||||
output "directory-id" {
|
||||
value = module.adconnector.directory-id
|
||||
}
|
||||
|
||||
output "security-group-id" {
|
||||
value = module.adconnector.security-group-id
|
||||
}
|
||||
|
||||
output "customer-dns-ip" {
|
||||
value = module.adconnector.customer-dns-ip
|
||||
}
|
13
examples/bea-adc/provider.tf
Normal file
13
examples/bea-adc/provider.tf
Normal file
@ -0,0 +1,13 @@
|
||||
provider "aws" {
|
||||
region = var.aws-region
|
||||
}
|
||||
|
||||
terraform {
|
||||
required_version = ">= 1.0"
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = ">= 3.25"
|
||||
}
|
||||
}
|
||||
}
|
784
examples/bea-adc/terraform.tfstate
Normal file
784
examples/bea-adc/terraform.tfstate
Normal file
@ -0,0 +1,784 @@
|
||||
{
|
||||
"version": 4,
|
||||
"terraform_version": "1.3.5",
|
||||
"serial": 108,
|
||||
"lineage": "5eba630b-18b8-6c2f-5853-88d98c7ecb23",
|
||||
"outputs": {
|
||||
"customer-dns-ip": {
|
||||
"value": [
|
||||
"10.37.54.214"
|
||||
],
|
||||
"type": [
|
||||
"tuple",
|
||||
[
|
||||
"string"
|
||||
]
|
||||
]
|
||||
},
|
||||
"directory-id": {
|
||||
"value": "d-c46722ff8d",
|
||||
"type": "string"
|
||||
},
|
||||
"security-group-id": {
|
||||
"value": "sg-0afbb1f6e8efde66b",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"mode": "data",
|
||||
"type": "aws_caller_identity",
|
||||
"name": "this",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"account_id": "040216112220",
|
||||
"arn": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"id": "040216112220",
|
||||
"user_id": "AIDAQSXIRFROOXYISSIEQ"
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": "data",
|
||||
"type": "aws_secretsmanager_secret",
|
||||
"name": "secretmanager",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5",
|
||||
"description": "",
|
||||
"id": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5",
|
||||
"kms_key_id": "",
|
||||
"name": "adc-service-account-password",
|
||||
"policy": "",
|
||||
"rotation_enabled": false,
|
||||
"rotation_lambda_arn": "",
|
||||
"rotation_rules": [],
|
||||
"tags": {}
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": "data",
|
||||
"type": "aws_secretsmanager_secret_version",
|
||||
"name": "adc-service-account-password",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5",
|
||||
"id": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5|AWSCURRENT",
|
||||
"secret_binary": "",
|
||||
"secret_id": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5",
|
||||
"secret_string": "{\"password\":\"CyyeooA.MwWVYzmIbtVG\u003cuyLOg\"}",
|
||||
"version_id": "0ef037d0-d0b3-441e-8931-8d12a8326940",
|
||||
"version_stage": "AWSCURRENT",
|
||||
"version_stages": [
|
||||
"AWSCURRENT"
|
||||
]
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.adconnector",
|
||||
"mode": "managed",
|
||||
"type": "aws_directory_service_directory",
|
||||
"name": "connector",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"access_url": "d-c46722ff8d.awsapps.com",
|
||||
"alias": "d-c46722ff8d",
|
||||
"connect_settings": [
|
||||
{
|
||||
"availability_zones": [
|
||||
"ap-east-1a",
|
||||
"ap-east-1b"
|
||||
],
|
||||
"connect_ips": [
|
||||
"10.37.54.15",
|
||||
"10.37.54.218"
|
||||
],
|
||||
"customer_dns_ips": [
|
||||
"10.37.54.214"
|
||||
],
|
||||
"customer_username": "svc-awssso-adconnector",
|
||||
"subnet_ids": [
|
||||
"subnet-0bb56e6f48ead7ab8",
|
||||
"subnet-0ce4d8183d810dcc2"
|
||||
],
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
}
|
||||
],
|
||||
"description": "ADConnector",
|
||||
"desired_number_of_domain_controllers": 0,
|
||||
"dns_ip_addresses": [
|
||||
"10.37.54.15",
|
||||
"10.37.54.218"
|
||||
],
|
||||
"edition": "",
|
||||
"enable_sso": false,
|
||||
"id": "d-c46722ff8d",
|
||||
"name": "acme.local",
|
||||
"password": "CyyeooA.MwWVYzmIbtVG\u003cuyLOg",
|
||||
"security_group_id": "sg-0afbb1f6e8efde66b",
|
||||
"short_name": "acme",
|
||||
"size": "Small",
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"timeouts": null,
|
||||
"type": "ADConnector",
|
||||
"vpc_settings": []
|
||||
},
|
||||
"sensitive_attributes": [
|
||||
[
|
||||
{
|
||||
"type": "get_attr",
|
||||
"value": "password"
|
||||
}
|
||||
]
|
||||
],
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInVwZGF0ZSI6MzYwMDAwMDAwMDAwMH19",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"data.aws_secretsmanager_secret.secretmanager",
|
||||
"data.aws_secretsmanager_secret_version.adc-service-account-password",
|
||||
"module.vpc-subnets.aws_subnet.private-subnets",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "data",
|
||||
"type": "aws_availability_zones",
|
||||
"name": "available-az",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"all_availability_zones": null,
|
||||
"exclude_names": null,
|
||||
"exclude_zone_ids": null,
|
||||
"filter": null,
|
||||
"group_names": [
|
||||
"ap-east-1"
|
||||
],
|
||||
"id": "ap-east-1",
|
||||
"names": [
|
||||
"ap-east-1a",
|
||||
"ap-east-1b",
|
||||
"ap-east-1c"
|
||||
],
|
||||
"state": "available",
|
||||
"timeouts": null,
|
||||
"zone_ids": [
|
||||
"ape1-az1",
|
||||
"ape1-az2",
|
||||
"ape1-az3"
|
||||
]
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "data",
|
||||
"type": "aws_caller_identity",
|
||||
"name": "this",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"account_id": "040216112220",
|
||||
"arn": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"id": "040216112220",
|
||||
"user_id": "AIDAQSXIRFROOXYISSIEQ"
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_cloudwatch_log_group",
|
||||
"name": "vpcflowlog-loggroup",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:logs:ap-east-1:040216112220:log-group:vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"id": "vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"kms_key_id": "",
|
||||
"name": "vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"name_prefix": "vpcflowlog/vpc-0d81f835ba4c7c987/",
|
||||
"retention_in_days": 90,
|
||||
"skip_destroy": false,
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
}
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_default_security_group",
|
||||
"name": "default-sg",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 1,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:security-group/sg-09101f3abd257889b",
|
||||
"description": "default VPC security group",
|
||||
"egress": [
|
||||
{
|
||||
"cidr_blocks": [],
|
||||
"description": "Allow traffic going to this SG",
|
||||
"from_port": 0,
|
||||
"ipv6_cidr_blocks": [],
|
||||
"prefix_list_ids": [],
|
||||
"protocol": "-1",
|
||||
"security_groups": [],
|
||||
"self": true,
|
||||
"to_port": 0
|
||||
}
|
||||
],
|
||||
"id": "sg-09101f3abd257889b",
|
||||
"ingress": [
|
||||
{
|
||||
"cidr_blocks": [],
|
||||
"description": "Allow traffic coming from this SG",
|
||||
"from_port": 0,
|
||||
"ipv6_cidr_blocks": [],
|
||||
"prefix_list_ids": [],
|
||||
"protocol": "-1",
|
||||
"security_groups": [],
|
||||
"self": true,
|
||||
"to_port": 0
|
||||
}
|
||||
],
|
||||
"name": "default",
|
||||
"name_prefix": "",
|
||||
"owner_id": "040216112220",
|
||||
"revoke_rules_on_delete": false,
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-defaultsg",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-defaultsg",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_flow_log",
|
||||
"name": "vpc-flowlog",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:vpc-flow-log/fl-02f430d7b36edca16",
|
||||
"destination_options": [],
|
||||
"eni_id": null,
|
||||
"iam_role_arn": "arn:aws:iam::040216112220:role/service/preview-ap-bea-sso-vpcflowlog",
|
||||
"id": "fl-02f430d7b36edca16",
|
||||
"log_destination": "arn:aws:logs:ap-east-1:040216112220:log-group:vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"log_destination_type": "cloud-watch-logs",
|
||||
"log_format": "${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status}",
|
||||
"log_group_name": "vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"max_aggregation_interval": 600,
|
||||
"subnet_id": null,
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"traffic_type": "ALL",
|
||||
"transit_gateway_attachment_id": null,
|
||||
"transit_gateway_id": null,
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_cloudwatch_log_group.vpcflowlog-loggroup",
|
||||
"module.vpc-subnets.aws_iam_role.vpcflowlog-role",
|
||||
"module.vpc-subnets.aws_vpc.vpc"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_iam_role",
|
||||
"name": "vpcflowlog-role",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:iam::040216112220:role/service/preview-ap-bea-sso-vpcflowlog",
|
||||
"assume_role_policy": "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"vpc-flow-logs.amazonaws.com\"},\"Sid\":\"\"}],\"Version\":\"2012-10-17\"}",
|
||||
"create_date": "2022-12-12T06:34:48Z",
|
||||
"description": "",
|
||||
"force_detach_policies": false,
|
||||
"id": "preview-ap-bea-sso-vpcflowlog",
|
||||
"inline_policy": [
|
||||
{
|
||||
"name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n"
|
||||
}
|
||||
],
|
||||
"managed_policy_arns": [],
|
||||
"max_session_duration": 3600,
|
||||
"name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"name_prefix": "",
|
||||
"path": "/service/",
|
||||
"permissions_boundary": null,
|
||||
"tags": {},
|
||||
"tags_all": {},
|
||||
"unique_id": "AROAQSXIRFROBSK2XWEUN"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA=="
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_iam_role_policy",
|
||||
"name": "vpcflowlog-role-policy",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"id": "preview-ap-bea-sso-vpcflowlog:preview-ap-bea-sso-vpcflowlog",
|
||||
"name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"name_prefix": null,
|
||||
"policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n",
|
||||
"role": "preview-ap-bea-sso-vpcflowlog"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"module.vpc-subnets.aws_iam_role.vpcflowlog-role"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_route_table",
|
||||
"name": "private-route-table",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:route-table/rtb-0bdeffdac8e3215f4",
|
||||
"id": "rtb-0bdeffdac8e3215f4",
|
||||
"owner_id": "040216112220",
|
||||
"propagating_vgws": [],
|
||||
"route": [
|
||||
{
|
||||
"carrier_gateway_id": "",
|
||||
"cidr_block": "0.0.0.0/0",
|
||||
"core_network_arn": "",
|
||||
"destination_prefix_list_id": "",
|
||||
"egress_only_gateway_id": "",
|
||||
"gateway_id": "igw-060da6481bbc4cedd",
|
||||
"instance_id": "",
|
||||
"ipv6_cidr_block": "",
|
||||
"local_gateway_id": "",
|
||||
"nat_gateway_id": "",
|
||||
"network_interface_id": "",
|
||||
"transit_gateway_id": "",
|
||||
"vpc_endpoint_id": "",
|
||||
"vpc_peering_connection_id": ""
|
||||
}
|
||||
],
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-privateroutetable",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-privateroutetable",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"timeouts": null,
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDAsImRlbGV0ZSI6MzAwMDAwMDAwMDAwLCJ1cGRhdGUiOjEyMDAwMDAwMDAwMH19",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_route_table_association",
|
||||
"name": "private_route_association",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"gateway_id": "",
|
||||
"id": "rtbassoc-067b22e8a44ffa92b",
|
||||
"route_table_id": "rtb-0bdeffdac8e3215f4",
|
||||
"subnet_id": "subnet-0bb56e6f48ead7ab8"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_route_table.private-route-table",
|
||||
"module.vpc-subnets.aws_subnet.private-subnets",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
},
|
||||
{
|
||||
"index_key": 1,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"gateway_id": "",
|
||||
"id": "rtbassoc-08e5c1bfc024792a9",
|
||||
"route_table_id": "rtb-0bdeffdac8e3215f4",
|
||||
"subnet_id": "subnet-0ce4d8183d810dcc2"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_route_table.private-route-table",
|
||||
"module.vpc-subnets.aws_subnet.private-subnets",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_subnet",
|
||||
"name": "private-subnets",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 1,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:subnet/subnet-0bb56e6f48ead7ab8",
|
||||
"assign_ipv6_address_on_creation": false,
|
||||
"availability_zone": "ap-east-1a",
|
||||
"availability_zone_id": "ape1-az1",
|
||||
"cidr_block": "10.37.54.0/25",
|
||||
"customer_owned_ipv4_pool": "",
|
||||
"enable_dns64": false,
|
||||
"enable_resource_name_dns_a_record_on_launch": false,
|
||||
"enable_resource_name_dns_aaaa_record_on_launch": false,
|
||||
"id": "subnet-0bb56e6f48ead7ab8",
|
||||
"ipv6_cidr_block": "",
|
||||
"ipv6_cidr_block_association_id": "",
|
||||
"ipv6_native": false,
|
||||
"map_customer_owned_ip_on_launch": false,
|
||||
"map_public_ip_on_launch": false,
|
||||
"outpost_arn": "",
|
||||
"owner_id": "040216112220",
|
||||
"private_dns_hostname_type_on_launch": "ip-name",
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-private-1a-1",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-private-1a-1",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"timeouts": null,
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
},
|
||||
{
|
||||
"index_key": 1,
|
||||
"schema_version": 1,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:subnet/subnet-0ce4d8183d810dcc2",
|
||||
"assign_ipv6_address_on_creation": false,
|
||||
"availability_zone": "ap-east-1b",
|
||||
"availability_zone_id": "ape1-az2",
|
||||
"cidr_block": "10.37.54.128/25",
|
||||
"customer_owned_ipv4_pool": "",
|
||||
"enable_dns64": false,
|
||||
"enable_resource_name_dns_a_record_on_launch": false,
|
||||
"enable_resource_name_dns_aaaa_record_on_launch": false,
|
||||
"id": "subnet-0ce4d8183d810dcc2",
|
||||
"ipv6_cidr_block": "",
|
||||
"ipv6_cidr_block_association_id": "",
|
||||
"ipv6_native": false,
|
||||
"map_customer_owned_ip_on_launch": false,
|
||||
"map_public_ip_on_launch": false,
|
||||
"outpost_arn": "",
|
||||
"owner_id": "040216112220",
|
||||
"private_dns_hostname_type_on_launch": "ip-name",
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-private-1b-2",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-private-1b-2",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"timeouts": null,
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_vpc",
|
||||
"name": "vpc",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 1,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:vpc/vpc-0d81f835ba4c7c987",
|
||||
"assign_generated_ipv6_cidr_block": false,
|
||||
"cidr_block": "10.37.54.0/24",
|
||||
"default_network_acl_id": "acl-0de827d3ddc477c49",
|
||||
"default_route_table_id": "rtb-0424596d3c3a61221",
|
||||
"default_security_group_id": "sg-09101f3abd257889b",
|
||||
"dhcp_options_id": "dopt-005007bcb610d7cdc",
|
||||
"enable_classiclink": false,
|
||||
"enable_classiclink_dns_support": false,
|
||||
"enable_dns_hostnames": true,
|
||||
"enable_dns_support": true,
|
||||
"enable_network_address_usage_metrics": false,
|
||||
"id": "vpc-0d81f835ba4c7c987",
|
||||
"instance_tenancy": "default",
|
||||
"ipv4_ipam_pool_id": null,
|
||||
"ipv4_netmask_length": null,
|
||||
"ipv6_association_id": "",
|
||||
"ipv6_cidr_block": "",
|
||||
"ipv6_cidr_block_network_border_group": "",
|
||||
"ipv6_ipam_pool_id": "",
|
||||
"ipv6_netmask_length": 0,
|
||||
"main_route_table_id": "rtb-0424596d3c3a61221",
|
||||
"owner_id": "040216112220",
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-vpc",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-vpc",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
}
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this"
|
||||
],
|
||||
"create_before_destroy": true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"check_results": null
|
||||
}
|
790
examples/bea-adc/terraform.tfstate.backup
Normal file
790
examples/bea-adc/terraform.tfstate.backup
Normal file
@ -0,0 +1,790 @@
|
||||
{
|
||||
"version": 4,
|
||||
"terraform_version": "1.3.5",
|
||||
"serial": 107,
|
||||
"lineage": "5eba630b-18b8-6c2f-5853-88d98c7ecb23",
|
||||
"outputs": {
|
||||
"customer-dns-ip": {
|
||||
"value": [
|
||||
"10.37.54.214"
|
||||
],
|
||||
"type": [
|
||||
"tuple",
|
||||
[
|
||||
"string"
|
||||
]
|
||||
]
|
||||
},
|
||||
"directory-id": {
|
||||
"value": "d-c46722ff8d",
|
||||
"type": "string"
|
||||
},
|
||||
"security-group-id": {
|
||||
"value": "sg-0afbb1f6e8efde66b",
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"resources": [
|
||||
{
|
||||
"mode": "data",
|
||||
"type": "aws_caller_identity",
|
||||
"name": "this",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"account_id": "040216112220",
|
||||
"arn": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"id": "040216112220",
|
||||
"user_id": "AIDAQSXIRFROOXYISSIEQ"
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": "data",
|
||||
"type": "aws_secretsmanager_secret",
|
||||
"name": "secretmanager",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5",
|
||||
"description": "",
|
||||
"id": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5",
|
||||
"kms_key_id": "",
|
||||
"name": "adc-service-account-password",
|
||||
"policy": "",
|
||||
"rotation_enabled": false,
|
||||
"rotation_lambda_arn": "",
|
||||
"rotation_rules": [],
|
||||
"tags": {}
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": "data",
|
||||
"type": "aws_secretsmanager_secret_version",
|
||||
"name": "adc-service-account-password",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5",
|
||||
"id": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5|AWSCURRENT",
|
||||
"secret_binary": "",
|
||||
"secret_id": "arn:aws:secretsmanager:ap-east-1:040216112220:secret:adc-service-account-password-bYmPI5",
|
||||
"secret_string": "{\"password\":\"CyyeooA.MwWVYzmIbtVG\u003cuyLOg\"}",
|
||||
"version_id": "0ef037d0-d0b3-441e-8931-8d12a8326940",
|
||||
"version_stage": "AWSCURRENT",
|
||||
"version_stages": [
|
||||
"AWSCURRENT"
|
||||
]
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.adconnector",
|
||||
"mode": "managed",
|
||||
"type": "aws_directory_service_directory",
|
||||
"name": "connector",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"access_url": "d-c46722ff8d.awsapps.com",
|
||||
"alias": "d-c46722ff8d",
|
||||
"connect_settings": [
|
||||
{
|
||||
"availability_zones": [
|
||||
"ap-east-1a",
|
||||
"ap-east-1b"
|
||||
],
|
||||
"connect_ips": [
|
||||
"10.37.54.15",
|
||||
"10.37.54.218"
|
||||
],
|
||||
"customer_dns_ips": [
|
||||
"10.37.54.214"
|
||||
],
|
||||
"customer_username": "svc-awssso-adconnector",
|
||||
"subnet_ids": [
|
||||
"subnet-0bb56e6f48ead7ab8",
|
||||
"subnet-0ce4d8183d810dcc2"
|
||||
],
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
}
|
||||
],
|
||||
"description": "ADConnector",
|
||||
"desired_number_of_domain_controllers": 0,
|
||||
"dns_ip_addresses": [
|
||||
"10.37.54.15",
|
||||
"10.37.54.218"
|
||||
],
|
||||
"edition": "",
|
||||
"enable_sso": false,
|
||||
"id": "d-c46722ff8d",
|
||||
"name": "acme.local",
|
||||
"password": "CyyeooA.MwWVYzmIbtVG\u003cuyLOg",
|
||||
"security_group_id": "sg-0afbb1f6e8efde66b",
|
||||
"short_name": "acme",
|
||||
"size": "Small",
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"timeouts": null,
|
||||
"type": "ADConnector",
|
||||
"vpc_settings": []
|
||||
},
|
||||
"sensitive_attributes": [
|
||||
[
|
||||
{
|
||||
"type": "get_attr",
|
||||
"value": "password"
|
||||
}
|
||||
]
|
||||
],
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozNjAwMDAwMDAwMDAwLCJkZWxldGUiOjM2MDAwMDAwMDAwMDAsInVwZGF0ZSI6MzYwMDAwMDAwMDAwMH19",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"data.aws_secretsmanager_secret_version.adc-service-account-password",
|
||||
"module.vpc-subnets.aws_subnet.private-subnets",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "data",
|
||||
"type": "aws_availability_zones",
|
||||
"name": "available-az",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"all_availability_zones": null,
|
||||
"exclude_names": null,
|
||||
"exclude_zone_ids": null,
|
||||
"filter": null,
|
||||
"group_names": [
|
||||
"ap-east-1"
|
||||
],
|
||||
"id": "ap-east-1",
|
||||
"names": [
|
||||
"ap-east-1a",
|
||||
"ap-east-1b",
|
||||
"ap-east-1c"
|
||||
],
|
||||
"state": "available",
|
||||
"timeouts": null,
|
||||
"zone_ids": [
|
||||
"ape1-az1",
|
||||
"ape1-az2",
|
||||
"ape1-az3"
|
||||
]
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "data",
|
||||
"type": "aws_caller_identity",
|
||||
"name": "this",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"account_id": "040216112220",
|
||||
"arn": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"id": "040216112220",
|
||||
"user_id": "AIDAQSXIRFROOXYISSIEQ"
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_cloudwatch_log_group",
|
||||
"name": "vpcflowlog-loggroup",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:logs:ap-east-1:040216112220:log-group:vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"id": "vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"kms_key_id": "",
|
||||
"name": "vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"name_prefix": "vpcflowlog/vpc-0d81f835ba4c7c987/",
|
||||
"retention_in_days": 90,
|
||||
"skip_destroy": false,
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
}
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_default_security_group",
|
||||
"name": "default-sg",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 1,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:security-group/sg-09101f3abd257889b",
|
||||
"description": "default VPC security group",
|
||||
"egress": [
|
||||
{
|
||||
"cidr_blocks": [],
|
||||
"description": "Allow traffic going to this SG",
|
||||
"from_port": 0,
|
||||
"ipv6_cidr_blocks": [],
|
||||
"prefix_list_ids": [],
|
||||
"protocol": "-1",
|
||||
"security_groups": [],
|
||||
"self": true,
|
||||
"to_port": 0
|
||||
}
|
||||
],
|
||||
"id": "sg-09101f3abd257889b",
|
||||
"ingress": [
|
||||
{
|
||||
"cidr_blocks": [],
|
||||
"description": "Allow traffic coming from this SG",
|
||||
"from_port": 0,
|
||||
"ipv6_cidr_blocks": [],
|
||||
"prefix_list_ids": [],
|
||||
"protocol": "-1",
|
||||
"security_groups": [],
|
||||
"self": true,
|
||||
"to_port": 0
|
||||
}
|
||||
],
|
||||
"name": "default",
|
||||
"name_prefix": "",
|
||||
"owner_id": "040216112220",
|
||||
"revoke_rules_on_delete": false,
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-defaultsg",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-defaultsg",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_flow_log",
|
||||
"name": "vpc-flowlog",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:vpc-flow-log/fl-02f430d7b36edca16",
|
||||
"destination_options": [],
|
||||
"eni_id": null,
|
||||
"iam_role_arn": "arn:aws:iam::040216112220:role/service/preview-ap-bea-sso-vpcflowlog",
|
||||
"id": "fl-02f430d7b36edca16",
|
||||
"log_destination": "arn:aws:logs:ap-east-1:040216112220:log-group:vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"log_destination_type": "cloud-watch-logs",
|
||||
"log_format": "${version} ${account-id} ${interface-id} ${srcaddr} ${dstaddr} ${srcport} ${dstport} ${protocol} ${packets} ${bytes} ${start} ${end} ${action} ${log-status}",
|
||||
"log_group_name": "vpcflowlog/vpc-0d81f835ba4c7c987/20221212063458987800000001",
|
||||
"max_aggregation_interval": 600,
|
||||
"subnet_id": null,
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"traffic_type": "ALL",
|
||||
"transit_gateway_attachment_id": null,
|
||||
"transit_gateway_id": null,
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_cloudwatch_log_group.vpcflowlog-loggroup",
|
||||
"module.vpc-subnets.aws_iam_role.vpcflowlog-role",
|
||||
"module.vpc-subnets.aws_vpc.vpc"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_iam_role",
|
||||
"name": "vpcflowlog-role",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:iam::040216112220:role/service/preview-ap-bea-sso-vpcflowlog",
|
||||
"assume_role_policy": "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"vpc-flow-logs.amazonaws.com\"},\"Sid\":\"\"}],\"Version\":\"2012-10-17\"}",
|
||||
"create_date": "2022-12-12T06:34:48Z",
|
||||
"description": "",
|
||||
"force_detach_policies": false,
|
||||
"id": "preview-ap-bea-sso-vpcflowlog",
|
||||
"inline_policy": [
|
||||
{
|
||||
"name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n"
|
||||
}
|
||||
],
|
||||
"managed_policy_arns": [],
|
||||
"max_session_duration": 3600,
|
||||
"name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"name_prefix": "",
|
||||
"path": "/service/",
|
||||
"permissions_boundary": null,
|
||||
"tags": {},
|
||||
"tags_all": {},
|
||||
"unique_id": "AROAQSXIRFROBSK2XWEUN"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA=="
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_iam_role_policy",
|
||||
"name": "vpcflowlog-role-policy",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"id": "preview-ap-bea-sso-vpcflowlog:preview-ap-bea-sso-vpcflowlog",
|
||||
"name": "preview-ap-bea-sso-vpcflowlog",
|
||||
"name_prefix": null,
|
||||
"policy": "{\n \"Version\": \"2012-10-17\",\n \"Statement\": [\n {\n \"Action\": [\n \"logs:CreateLogGroup\",\n \"logs:CreateLogStream\",\n \"logs:PutLogEvents\",\n \"logs:DescribeLogGroups\",\n \"logs:DescribeLogStreams\"\n ],\n \"Effect\": \"Allow\",\n \"Resource\": \"*\"\n }\n ]\n}\n",
|
||||
"role": "preview-ap-bea-sso-vpcflowlog"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"module.vpc-subnets.aws_iam_role.vpcflowlog-role"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_route_table",
|
||||
"name": "private-route-table",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:route-table/rtb-0bdeffdac8e3215f4",
|
||||
"id": "rtb-0bdeffdac8e3215f4",
|
||||
"owner_id": "040216112220",
|
||||
"propagating_vgws": [],
|
||||
"route": [
|
||||
{
|
||||
"carrier_gateway_id": "",
|
||||
"cidr_block": "0.0.0.0/0",
|
||||
"core_network_arn": "",
|
||||
"destination_prefix_list_id": "",
|
||||
"egress_only_gateway_id": "",
|
||||
"gateway_id": "igw-060da6481bbc4cedd",
|
||||
"instance_id": "",
|
||||
"ipv6_cidr_block": "",
|
||||
"local_gateway_id": "",
|
||||
"nat_gateway_id": "",
|
||||
"network_interface_id": "",
|
||||
"transit_gateway_id": "",
|
||||
"vpc_endpoint_id": "",
|
||||
"vpc_peering_connection_id": ""
|
||||
}
|
||||
],
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-privateroutetable",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-privateroutetable",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"timeouts": null,
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjozMDAwMDAwMDAwMDAsImRlbGV0ZSI6MzAwMDAwMDAwMDAwLCJ1cGRhdGUiOjEyMDAwMDAwMDAwMH19",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_route_table_association",
|
||||
"name": "private_route_association",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"gateway_id": "",
|
||||
"id": "rtbassoc-067b22e8a44ffa92b",
|
||||
"route_table_id": "rtb-0bdeffdac8e3215f4",
|
||||
"subnet_id": "subnet-0bb56e6f48ead7ab8"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_route_table.private-route-table",
|
||||
"module.vpc-subnets.aws_subnet.private-subnets",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
},
|
||||
{
|
||||
"index_key": 1,
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"gateway_id": "",
|
||||
"id": "rtbassoc-08e5c1bfc024792a9",
|
||||
"route_table_id": "rtb-0bdeffdac8e3215f4",
|
||||
"subnet_id": "subnet-0ce4d8183d810dcc2"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "bnVsbA==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_route_table.private-route-table",
|
||||
"module.vpc-subnets.aws_subnet.private-subnets",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_subnet",
|
||||
"name": "private-subnets",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"index_key": 0,
|
||||
"schema_version": 1,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:subnet/subnet-0bb56e6f48ead7ab8",
|
||||
"assign_ipv6_address_on_creation": false,
|
||||
"availability_zone": "ap-east-1a",
|
||||
"availability_zone_id": "ape1-az1",
|
||||
"cidr_block": "10.37.54.0/25",
|
||||
"customer_owned_ipv4_pool": "",
|
||||
"enable_dns64": false,
|
||||
"enable_resource_name_dns_a_record_on_launch": false,
|
||||
"enable_resource_name_dns_aaaa_record_on_launch": false,
|
||||
"id": "subnet-0bb56e6f48ead7ab8",
|
||||
"ipv6_cidr_block": "",
|
||||
"ipv6_cidr_block_association_id": "",
|
||||
"ipv6_native": false,
|
||||
"map_customer_owned_ip_on_launch": false,
|
||||
"map_public_ip_on_launch": false,
|
||||
"outpost_arn": "",
|
||||
"owner_id": "040216112220",
|
||||
"private_dns_hostname_type_on_launch": "ip-name",
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-private-1a-1",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-private-1a-1",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"timeouts": null,
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
},
|
||||
{
|
||||
"index_key": 1,
|
||||
"schema_version": 1,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:subnet/subnet-0ce4d8183d810dcc2",
|
||||
"assign_ipv6_address_on_creation": false,
|
||||
"availability_zone": "ap-east-1b",
|
||||
"availability_zone_id": "ape1-az2",
|
||||
"cidr_block": "10.37.54.128/25",
|
||||
"customer_owned_ipv4_pool": "",
|
||||
"enable_dns64": false,
|
||||
"enable_resource_name_dns_a_record_on_launch": false,
|
||||
"enable_resource_name_dns_aaaa_record_on_launch": false,
|
||||
"id": "subnet-0ce4d8183d810dcc2",
|
||||
"ipv6_cidr_block": "",
|
||||
"ipv6_cidr_block_association_id": "",
|
||||
"ipv6_native": false,
|
||||
"map_customer_owned_ip_on_launch": false,
|
||||
"map_public_ip_on_launch": false,
|
||||
"outpost_arn": "",
|
||||
"owner_id": "040216112220",
|
||||
"private_dns_hostname_type_on_launch": "ip-name",
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-private-1b-2",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-private-1b-2",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"timeouts": null,
|
||||
"vpc_id": "vpc-0d81f835ba4c7c987"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6MTIwMDAwMDAwMDAwMH0sInNjaGVtYV92ZXJzaW9uIjoiMSJ9",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc",
|
||||
"module.vpc-subnets.data.aws_availability_zones.available-az"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_vpc",
|
||||
"name": "vpc",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 1,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-east-1:040216112220:vpc/vpc-0d81f835ba4c7c987",
|
||||
"assign_generated_ipv6_cidr_block": false,
|
||||
"cidr_block": "10.37.54.0/24",
|
||||
"default_network_acl_id": "acl-0de827d3ddc477c49",
|
||||
"default_route_table_id": "rtb-0424596d3c3a61221",
|
||||
"default_security_group_id": "sg-09101f3abd257889b",
|
||||
"dhcp_options_id": "dopt-005007bcb610d7cdc",
|
||||
"enable_classiclink": false,
|
||||
"enable_classiclink_dns_support": false,
|
||||
"enable_dns_hostnames": true,
|
||||
"enable_dns_support": true,
|
||||
"enable_network_address_usage_metrics": false,
|
||||
"id": "vpc-0d81f835ba4c7c987",
|
||||
"instance_tenancy": "default",
|
||||
"ipv4_ipam_pool_id": null,
|
||||
"ipv4_netmask_length": null,
|
||||
"ipv6_association_id": "",
|
||||
"ipv6_cidr_block": "",
|
||||
"ipv6_cidr_block_network_border_group": "",
|
||||
"ipv6_ipam_pool_id": "",
|
||||
"ipv6_netmask_length": 0,
|
||||
"main_route_table_id": "rtb-0424596d3c3a61221",
|
||||
"owner_id": "040216112220",
|
||||
"tags": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-vpc",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "sso",
|
||||
"BuildDate": "20221212",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "preview",
|
||||
"Name": "preview-ap-bea-sso-vpc",
|
||||
"Project": "sso",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "terraform.aws-baseline-infra/examples/bea-adc",
|
||||
"TerraformMode": "managed"
|
||||
}
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this"
|
||||
],
|
||||
"create_before_destroy": true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"check_results": [
|
||||
{
|
||||
"object_kind": "resource",
|
||||
"config_addr": "module.vpc-subnets.module.vpc-ep.data.aws_vpc.this-vpc",
|
||||
"status": "pass",
|
||||
"objects": null
|
||||
}
|
||||
]
|
||||
}
|
15
examples/bea-adc/terraform.tfvars
Normal file
15
examples/bea-adc/terraform.tfvars
Normal file
@ -0,0 +1,15 @@
|
||||
aws-region = "ap-east-1"
|
||||
aws-region-short = "ape1"
|
||||
customer-name = "bea"
|
||||
environment = "preview"
|
||||
project = "sso"
|
||||
application = "sso"
|
||||
vpc-cidr = "10.37.54.0/24"
|
||||
number-of-public-subnets-per-az = 0
|
||||
number-of-private-subnets-per-az = 1
|
||||
vpc-flowlog-bucket-arn = "arn:aws:s3:::prd-vpc-flow-logs-894849410890"
|
||||
adc-domainname = "hkbea.com"
|
||||
adc-size = "Large"
|
||||
adc-dns-ips = ["10.135.72.66", "10.135.72.67"]
|
||||
adc-service-account-username = "AWSSSOPRD"
|
||||
adc-enable-sso = true
|
22
examples/bea-adc/variables.tf
Normal file
22
examples/bea-adc/variables.tf
Normal file
@ -0,0 +1,22 @@
|
||||
variable "aws-region" {}
|
||||
variable "aws-region-short" {}
|
||||
variable "customer-name" {}
|
||||
variable "environment" {}
|
||||
variable "project" {}
|
||||
variable "application" {}
|
||||
variable "vpc-cidr" {}
|
||||
variable "number-of-private-subnets-per-az" {}
|
||||
variable "number-of-public-subnets-per-az" {}
|
||||
variable vpc-flowlog-bucket-arn {}
|
||||
variable "adc-domainname" {}
|
||||
variable "adc-size" {}
|
||||
variable "adc-dns-ips" {}
|
||||
variable "adc-service-account-username" {}
|
||||
variable "adc-service-account-password" {
|
||||
type = string
|
||||
sensitive = true
|
||||
description = "Please supply ad svc account with environment variable (i.e. export TG_VAR_adc-service-account-password=xxx"
|
||||
default = ""
|
||||
}
|
||||
variable "adc-enable-sso" {}
|
||||
|
25
examples/bea-sso-preview/.terraform.lock.hcl
Normal file
25
examples/bea-sso-preview/.terraform.lock.hcl
Normal file
@ -0,0 +1,25 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/aws" {
|
||||
version = "4.45.0"
|
||||
constraints = ">= 3.25.0"
|
||||
hashes = [
|
||||
"h1:J/XjRsEJIpxi+mczXQfnH3nvfACv3LRDtrthQJCIibY=",
|
||||
"zh:22da03786f25658a000d1bcc28c780816a97e7e8a1f59fff6eee7d452830e95e",
|
||||
"zh:2543be56eee0491eb0c79ca1c901dcbf71da26625961fe719f088263fef062f4",
|
||||
"zh:31a1da1e3beedfd88c3c152ab505bdcf330427f26b75835885526f7bb75c4857",
|
||||
"zh:4409afe50f225659d5f378fe9303a45052953a1219f7f1acc82b69d07528b7ba",
|
||||
"zh:4dadec3b783f10d2f8eef3dab5e817baae9c932a7967d45fe3d77fcbcbdaa438",
|
||||
"zh:55be80d6e24828dcb0db7a0226fb275415c1c0ad63dd2f33b76f3ac0cd64e6a6",
|
||||
"zh:560bba29efb7dbe0bfcc937369d88817aa31a8d18aa25395b1afe2576cb04495",
|
||||
"zh:6caacc202e83438ff63d5d96733e283f44e349668d96c6b1c5c7df463ebf85cc",
|
||||
"zh:6cabab83a61d5b4ac801c5a5d57556a0e76ec8dc879d28cf777509db5f6a657e",
|
||||
"zh:96c4528bf9c16edb8841b68479ec51c499ed7fa680462fa28caeab3fc168bb43",
|
||||
"zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
|
||||
"zh:cdc0b47ff840d708fbf75abfe86d23dc7f1dffdd233a771822a17b5c637f4769",
|
||||
"zh:d9a9583e82776d1ebb6cf6c3d47acc2b302f8778f470ceffe7579dc794eb1feb",
|
||||
"zh:e9367ca9f6f6418a23cdf8d01f29dd0c4f614e78499f52a767a422e4c334b915",
|
||||
"zh:f6d355a2fb3bcebb597f68bbca4fa2aaa364efd29240236c582375e219d77656",
|
||||
]
|
||||
}
|
1
examples/bea-sso-preview/.terraform/modules/modules.json
Normal file
1
examples/bea-sso-preview/.terraform/modules/modules.json
Normal file
@ -0,0 +1 @@
|
||||
{"Modules":[{"Key":"","Source":"","Dir":"."},{"Key":"sso","Source":"../../modules/security_identity_compliance/sso-permissionsets","Dir":"../../modules/security_identity_compliance/sso-permissionsets"}]}
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/aws/4.45.0/linux_amd64
|
15
examples/bea-sso-preview/locals.tf
Normal file
15
examples/bea-sso-preview/locals.tf
Normal file
@ -0,0 +1,15 @@
|
||||
data "aws_caller_identity" "this" {}
|
||||
|
||||
locals {
|
||||
default-tags = merge({
|
||||
ServiceProvider = "None"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
TerraformMode = "managed"
|
||||
TerraformDir = trimprefix(path.cwd, "/my/work/xpk-git/")
|
||||
CreatedBy = data.aws_caller_identity.this.arn
|
||||
BuildDate = formatdate("YYYYMMDD", timestamp())
|
||||
})
|
||||
resource-prefix = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}"
|
||||
}
|
28
examples/bea-sso-preview/main.tf
Normal file
28
examples/bea-sso-preview/main.tf
Normal file
@ -0,0 +1,28 @@
|
||||
module sso {
|
||||
source = "../../modules/security_identity_compliance/sso-permissionsets"
|
||||
|
||||
for_each = { for item in local.items : item.name => item }
|
||||
|
||||
default-tags = local.default-tags
|
||||
pset-name = each.value.name
|
||||
pset-desc = each.value.desc
|
||||
pset-managed-policy-arn = each.value.mpolicy
|
||||
pset-session-duration = each.value.session
|
||||
|
||||
}
|
||||
|
||||
locals {
|
||||
csv_data = <<-CSV
|
||||
name,desc,mpolicy,session
|
||||
ViewOnly,View only access,arn:aws:iam::aws:policy/job-function/ViewOnlyAccess,PT4H
|
||||
ReadOnly,Read only access,arn:aws:iam::aws:policy/ReadOnlyAccess,PT4H
|
||||
FullAccess,Full admin access,arn:aws:iam::aws:policy/AdministratorAccess,PT4H
|
||||
NetworkAdmin,Network admin access,arn:aws:iam::aws:policy/job-function/NetworkAdministrator,PT4H
|
||||
DatabaseAdmin,Database admin access,arn:aws:iam::aws:policy/job-function/DatabaseAdministrator,PT4H
|
||||
BillingAdmin,Billing admin access,arn:aws:iam::aws:policy/job-function/Billing,PT4H
|
||||
SecurityAudit,Security admin access,arn:aws:iam::aws:policy/SecurityAudit,PT4H
|
||||
PowerUser,Full access excluding IAM,arn:aws:iam::aws:policy/PowerUserAccess,PT4H
|
||||
CSV
|
||||
|
||||
items = csvdecode(local.csv_data)
|
||||
}
|
13
examples/bea-sso-preview/provider.tf
Normal file
13
examples/bea-sso-preview/provider.tf
Normal file
@ -0,0 +1,13 @@
|
||||
provider "aws" {
|
||||
region = var.aws-region
|
||||
}
|
||||
|
||||
terraform {
|
||||
required_version = ">= 1.0"
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = ">= 3.25"
|
||||
}
|
||||
}
|
||||
}
|
64
examples/bea-sso-preview/sso-users.tf
Normal file
64
examples/bea-sso-preview/sso-users.tf
Normal file
@ -0,0 +1,64 @@
|
||||
data "aws_ssoadmin_instances" "sso1" {}
|
||||
|
||||
locals {
|
||||
csv_data2 = <<-CSV
|
||||
username,email,lastName,firstName
|
||||
user1,user1@acme.local,Doe,John
|
||||
user2,user2@acme.local,Smith,Jane
|
||||
CSV
|
||||
|
||||
users = csvdecode(local.csv_data2)
|
||||
}
|
||||
|
||||
resource "aws_identitystore_user" "sso-user" {
|
||||
for_each = { for item in local.users : item.username => item }
|
||||
identity_store_id = tolist(data.aws_ssoadmin_instances.sso1.identity_store_ids)[0]
|
||||
display_name = "${each.value.firstName} ${each.value.lastName}"
|
||||
user_name = each.value.username
|
||||
nickname = each.value.username
|
||||
emails {
|
||||
primary = true
|
||||
value = each.value.email
|
||||
}
|
||||
|
||||
name {
|
||||
family_name = each.value.lastName
|
||||
given_name = each.value.firstName
|
||||
}
|
||||
}
|
||||
|
||||
resource "aws_identitystore_group" "sso-group" {
|
||||
identity_store_id = tolist(data.aws_ssoadmin_instances.sso1.identity_store_ids)[0]
|
||||
display_name = "Viewers"
|
||||
description = "Users with view permission"
|
||||
}
|
||||
|
||||
resource "aws_identitystore_group_membership" "sso-group-membership" {
|
||||
for_each = aws_identitystore_user.sso-user
|
||||
identity_store_id = tolist(data.aws_ssoadmin_instances.sso1.identity_store_ids)[0]
|
||||
group_id = aws_identitystore_group.sso-group.group_id
|
||||
member_id = each.value.user_id
|
||||
}
|
||||
|
||||
locals {
|
||||
csv_data3 = <<-CSV
|
||||
seq,groupName,permission,accountId
|
||||
1,Viewers,ViewOnly,865184416664
|
||||
2,Viewers,ViewOnly,572802010687
|
||||
CSV
|
||||
|
||||
accounts = csvdecode(local.csv_data3)
|
||||
}
|
||||
|
||||
resource "aws_ssoadmin_account_assignment" "pset-assignment" {
|
||||
for_each = { for item in local.accounts : item.seq => item }
|
||||
|
||||
instance_arn = tolist(data.aws_ssoadmin_instances.sso1.arns)[0]
|
||||
permission_set_arn = module.sso[each.value.permission].pset-arn
|
||||
|
||||
principal_id = aws_identitystore_group.sso-group.group_id
|
||||
principal_type = "GROUP"
|
||||
|
||||
target_id = each.value.accountId
|
||||
target_type = "AWS_ACCOUNT"
|
||||
}
|
9
examples/bea-sso-preview/terraform.tfstate
Normal file
9
examples/bea-sso-preview/terraform.tfstate
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"version": 4,
|
||||
"terraform_version": "1.3.5",
|
||||
"serial": 66,
|
||||
"lineage": "b72dc65d-13d0-2661-89b8-fa46cc9e8bbd",
|
||||
"outputs": {},
|
||||
"resources": [],
|
||||
"check_results": null
|
||||
}
|
1033
examples/bea-sso-preview/terraform.tfstate.backup
Normal file
1033
examples/bea-sso-preview/terraform.tfstate.backup
Normal file
File diff suppressed because it is too large
Load Diff
7
examples/bea-sso-preview/terraform.tfvars
Normal file
7
examples/bea-sso-preview/terraform.tfvars
Normal file
@ -0,0 +1,7 @@
|
||||
aws-region = "ap-east-1"
|
||||
aws-region-short = "ape1"
|
||||
customer-name = "bea"
|
||||
environment = "preview"
|
||||
project = "security"
|
||||
application = "sso"
|
||||
|
6
examples/bea-sso-preview/variables.tf
Normal file
6
examples/bea-sso-preview/variables.tf
Normal file
@ -0,0 +1,6 @@
|
||||
variable "aws-region" {}
|
||||
variable "aws-region-short" {}
|
||||
variable "customer-name" {}
|
||||
variable "environment" {}
|
||||
variable "project" {}
|
||||
variable "application" {}
|
39
examples/deployer.ec2/main.tf
Normal file
39
examples/deployer.ec2/main.tf
Normal file
@ -0,0 +1,39 @@
|
||||
module "deployer-ec2" {
|
||||
source = "../../modules/compute/ec2"
|
||||
|
||||
additional_tags = { "Backup" : "None" }
|
||||
# ami-id = "ami-072e4595d41025d94"
|
||||
ami-id = data.aws_ami.ami-lookup.id
|
||||
default-tags = local.default-tags
|
||||
ebs-encrypted = true
|
||||
asso-eip = false
|
||||
instance-name = "rackspace-deployer-ec2-test"
|
||||
instance-type = "t3.micro"
|
||||
key-name = "whk1-ec2-key-555344966285"
|
||||
asso-public-ip = false
|
||||
root-volume-size = 15
|
||||
security-groups = ["sg-03282995027b7a9fc"]
|
||||
subnet-id = "subnet-07e4392828a70b1f9"
|
||||
instance-profile = "TerraformRole"
|
||||
}
|
||||
|
||||
data "aws_ami" "ami-lookup" {
|
||||
most_recent = true
|
||||
|
||||
filter {
|
||||
name = "name"
|
||||
values = ["CIS Amazon Linux 2 Kernel 5.10*"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "virtualization-type"
|
||||
values = ["hvm"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "architecture"
|
||||
values = ["x86_64"]
|
||||
}
|
||||
|
||||
owners = ["211372476111"] # CIS
|
||||
}
|
8
examples/deployer.ec2/terraform.tfvars
Normal file
8
examples/deployer.ec2/terraform.tfvars
Normal file
@ -0,0 +1,8 @@
|
||||
aws-region = "ap-southeast-1"
|
||||
customer-name = "bea"
|
||||
environment = "dev"
|
||||
project = "iac"
|
||||
application = "terraform"
|
||||
CostCenter = "none"
|
||||
DynamicAddressGroup = ""
|
||||
Owner = "Rackspace"
|
25
examples/deployer.ec2/variables.tf
Normal file
25
examples/deployer.ec2/variables.tf
Normal file
@ -0,0 +1,25 @@
|
||||
variable "aws-region" {}
|
||||
variable "customer-name" {}
|
||||
variable "environment" {}
|
||||
variable "project" {}
|
||||
variable "application" {}
|
||||
variable "owner" {}
|
||||
variable "costcenter" {}
|
||||
variable "DynamicAddressGroup" {}
|
||||
|
||||
locals {
|
||||
default-tags = {
|
||||
ServiceProvider = "RackspaceTechnology"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
TerraformMode = "managed"
|
||||
BuildDate = formatdate("YYYYMMDD", timestamp())
|
||||
Owner = var.owner
|
||||
CostCenter = var.costcenter
|
||||
DynamicAddressGroup = var.DynamicAddressGroup
|
||||
|
||||
}
|
||||
resource-prefix = "${var.environment}-substr(${var.aws-region},0,2)-${var.customer-name}-${var.project}"
|
||||
}
|
||||
|
10
examples/eks-lab-ip6/eks/.terraform.lock.hcl
Normal file
10
examples/eks-lab-ip6/eks/.terraform.lock.hcl
Normal file
@ -0,0 +1,10 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/aws" {
|
||||
version = "4.55.0"
|
||||
constraints = ">= 3.25.0"
|
||||
hashes = [
|
||||
"h1:VHfmrKCb4oTW/+rWGKKqipoMOPd4tPxlGwMp0/Flx/s=",
|
||||
]
|
||||
}
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/aws/4.55.0/linux_amd64
|
119
examples/eks-lab-ip6/eks/README.md
Normal file
119
examples/eks-lab-ip6/eks/README.md
Normal file
@ -0,0 +1,119 @@
|
||||
# eks-lab/eks
|
||||
This layer creates the following resources
|
||||
- EKS cluster using ipv6 for service network
|
||||
- EKS nodegroup
|
||||
- EKS bastion
|
||||
- Install eksctl, kubectl, awscliv2, helm on EKS bastion with user_data script
|
||||
|
||||
Be patient. EKS cluster takes 12min to provision. Node group will take another 5 min. And the cluster addon takes another ?? min.
|
||||
|
||||
## Worker node instance size
|
||||
Choose t3.large at the minimum. This is due to AWS's limitation on number of IPs. Smaller instanecs are limited with 6 IP
|
||||
which is not enough. See https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-eni.html#AvailableIpPerENI
|
||||
|
||||
## How to use eksctl and kubectl
|
||||
By default, AWS EKS are installed with an aws-auth configmap which allows only the cluster creator
|
||||
to work with the cluster. Therefore, one must first assume to the creator IAM role before running eksctl or kubectl.
|
||||
For example, to create kube config, run these commands:
|
||||
|
||||
```bash
|
||||
export AWS_ACCESS_KEY_ID=xxxx AWS_SECRET_ACCESS_KEY="yyyy" AWS_DEFAULT_REGION=ap-northeast-1
|
||||
aws eks update-kubeconfig --name lab-apne1-xpk-iac-cluster01
|
||||
```
|
||||
|
||||
## Edit configmap/aws-auth
|
||||
```
|
||||
kubectl edit -n kube-system configmap/aws-auth
|
||||
```
|
||||
Add a group with system:master role
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
data:
|
||||
mapRoles: |
|
||||
- groups:
|
||||
- system:bootstrappers
|
||||
- system:nodes
|
||||
rolearn: arn:aws:iam::040216112220:role/clusterCreator
|
||||
username: system:node:Template:EC2PrivateDNSName
|
||||
- groups:
|
||||
- system:masters
|
||||
rolearn: arn:aws:iam::040216112220:role/lab-apne1-xpk-iac-bast-role
|
||||
username: lab-apne1-xpk-iac-bast-role
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: "2022-12-29T11:02:15Z"
|
||||
name: aws-auth
|
||||
namespace: kube-system
|
||||
resourceVersion: "59670"
|
||||
uid: 7cf9d889-8ed2-4c8d-ac0f-092184cede8a
|
||||
```
|
||||
|
||||
## Addon updates
|
||||
When updating addons, please select advanced options and choose preserve settings.
|
||||
|
||||
## Install ALB ingress controller
|
||||
AWS provides documentation on how to deploy a sample application with ingress (ALB)
|
||||
https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html
|
||||
|
||||
That depends on the load balancer container, which can be deployed by
|
||||
|
||||
```bash
|
||||
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.4/docs/install/iam_policy.json
|
||||
|
||||
aws iam create-policy \
|
||||
--policy-name AWSLoadBalancerControllerIAMPolicy \
|
||||
--policy-document file://iam_policy.json
|
||||
|
||||
```
|
||||
Create an openid provider on iam
|
||||
https://docs.aws.amazon.com/eks/latest/userguide/enable-iam-roles-for-service-accounts.html
|
||||
|
||||
```
|
||||
eksctl create iamserviceaccount \
|
||||
--cluster=lab-apne1-xpk-iac-cluster01 \
|
||||
--namespace=kube-system \
|
||||
--name=aws-load-balancer-controller \
|
||||
--role-name AmazonEKSLoadBalancerControllerRole \
|
||||
--attach-policy-arn=arn:aws:iam::040216112220:policy/AWSLoadBalancerControllerIAMPolicy \
|
||||
--approve
|
||||
|
||||
helm repo add eks https://aws.github.io/eks-charts
|
||||
helm repo update
|
||||
helm install aws-load-balancer-controller eks/aws-load-balancer-controller \
|
||||
-n kube-system \
|
||||
--set clusterName=lab-apne1-xpk-iac-cluster01 \
|
||||
--set serviceAccount.create=false \
|
||||
--set serviceAccount.name=aws-load-balancer-controller
|
||||
```
|
||||
|
||||
## Tag subnets
|
||||
Reference: https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html
|
||||
|
||||
The following tags are set in the network layer:
|
||||
|
||||
On private subnets:
|
||||
Key – kubernetes.io/role/internal-elb
|
||||
Value – 1
|
||||
|
||||
On public subnets:
|
||||
Key – kubernetes.io/role/elb
|
||||
Value – 1
|
||||
|
||||
|
||||
## Install sample app the 2048 game
|
||||
See https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html
|
||||
```bash
|
||||
curl -O https://raw.githubusercontent.com/kubernetes-sigs/aws-load-balancer-controller/v2.4.4/docs/examples/2048/2048_full.yaml
|
||||
edit the file
|
||||
kubectl apply -f 2048_full.yaml
|
||||
kubectl get ingress/ingress-2048 -n game-2048
|
||||
```
|
||||
|
||||
In a moment, the lb address should be displayed
|
||||
```bash
|
||||
root@ip-192-168-123-187:~# kubectl get ingress/ingress-2048 -n game-2048
|
||||
NAME CLASS HOSTS ADDRESS PORTS AGE
|
||||
ingress-2048 alb * internal-k8s-game2048-ingress2-5f196824a1-20502803.ap-northeast-1.elb.amazonaws.com 80 7s
|
||||
```
|
||||
|
||||
|
7
examples/eks-lab-ip6/eks/eks-node-sshkey
Normal file
7
examples/eks-lab-ip6/eks/eks-node-sshkey
Normal file
@ -0,0 +1,7 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||
QyNTUxOQAAACDQnEGn3cwEav+pMKXYvP3KjDYpB+Po/wpcrmQZnh31wgAAAJDu9hUF7vYV
|
||||
BQAAAAtzc2gtZWQyNTUxOQAAACDQnEGn3cwEav+pMKXYvP3KjDYpB+Po/wpcrmQZnh31wg
|
||||
AAAEBcvMSW9eqRM2Kd3obuJfHma+nzrsMiRSHO09wjSg4KF9CcQafdzARq/6kwpdi8/cqM
|
||||
NikH4+j/ClyuZBmeHfXCAAAADWtuQGlzbS56b28ubG8=
|
||||
-----END OPENSSH PRIVATE KEY-----
|
1
examples/eks-lab-ip6/eks/eks-node-sshkey.pub
Normal file
1
examples/eks-lab-ip6/eks/eks-node-sshkey.pub
Normal file
@ -0,0 +1 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINCcQafdzARq/6kwpdi8/cqMNikH4+j/ClyuZBmeHfXC kn@ism.zoo.lo
|
18
examples/eks-lab-ip6/eks/locals.tf
Normal file
18
examples/eks-lab-ip6/eks/locals.tf
Normal file
@ -0,0 +1,18 @@
|
||||
data "aws_caller_identity" "this" {}
|
||||
|
||||
locals {
|
||||
default-tags = merge({
|
||||
ServiceProvider = "None"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
TerraformMode = "managed"
|
||||
TerraformDir = "${local.path-cwd-list[length(local.path-cwd-list) - 2]}/${local.path-cwd-list[length(local.path-cwd-list) - 1]}"
|
||||
|
||||
CreatedBy = data.aws_caller_identity.this.arn
|
||||
BuildDate = formatdate("YYYYMMDD", timestamp())
|
||||
})
|
||||
resource-prefix = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}"
|
||||
path-cwd-list = split("/", path.cwd)
|
||||
|
||||
}
|
306
examples/eks-lab-ip6/eks/main.tf
Normal file
306
examples/eks-lab-ip6/eks/main.tf
Normal file
@ -0,0 +1,306 @@
|
||||
data "terraform_remote_state" "vpc" {
|
||||
backend = "local"
|
||||
config = {
|
||||
path = "../network/terraform.tfstate"
|
||||
}
|
||||
}
|
||||
|
||||
resource "aws_iam_role" "eks-cluster-role" {
|
||||
name = "${local.resource-prefix}-cluster-role"
|
||||
assume_role_policy = jsonencode({
|
||||
"Version" : "2012-10-17",
|
||||
"Statement" : [
|
||||
{
|
||||
"Effect" : "Allow",
|
||||
"Principal" : {
|
||||
"Service" : "eks.amazonaws.com"
|
||||
},
|
||||
"Action" : "sts:AssumeRole"
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
managed_policy_arns = ["arn:aws:iam::aws:policy/AmazonEKSClusterPolicy", "arn:aws:iam::aws:policy/AmazonEKSVPCResourceController"]
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
resource "aws_eks_cluster" "eks-cluster" {
|
||||
name = "${local.resource-prefix}-cluster01"
|
||||
role_arn = aws_iam_role.eks-cluster-role.arn
|
||||
vpc_config {
|
||||
subnet_ids = data.terraform_remote_state.vpc.outputs.private-subnet-ids
|
||||
endpoint_private_access = true
|
||||
endpoint_public_access = false
|
||||
}
|
||||
enabled_cluster_log_types = ["api", "audit"]
|
||||
kubernetes_network_config {
|
||||
ip_family = "ipv6"
|
||||
}
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
|
||||
resource "aws_eks_addon" "eks-addons" {
|
||||
# for_each = toset(["vpc-cni", "coredns", "kube-proxy", "aws-ebs-csi-driver"])
|
||||
# latest version as on 2023-02-17 failed to deploy
|
||||
for_each = {
|
||||
"aws-ebs-csi-driver" : {
|
||||
"version" : "v1.15.0-eksbuild.1"
|
||||
},
|
||||
"vpc-cni" : {
|
||||
"version" : "v1.12.2-eksbuild.1"
|
||||
},
|
||||
"coredns" : {
|
||||
"version" : "v1.9.3-eksbuild.2"
|
||||
},
|
||||
"kube-proxy" : {
|
||||
"version" : "v1.24.9-eksbuild.1"
|
||||
}
|
||||
}
|
||||
cluster_name = aws_eks_cluster.eks-cluster.name
|
||||
addon_name = each.key
|
||||
addon_version = each.value["version"]
|
||||
}
|
||||
|
||||
resource "aws_iam_role" "eks-nodegroup-role" {
|
||||
name = "${local.resource-prefix}-nodegroup-role"
|
||||
assume_role_policy = jsonencode({
|
||||
"Version" : "2012-10-17",
|
||||
"Statement" : [
|
||||
{
|
||||
"Effect" : "Allow",
|
||||
"Principal" : {
|
||||
"Service" : "ec2.amazonaws.com"
|
||||
},
|
||||
"Action" : "sts:AssumeRole"
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
managed_policy_arns = [
|
||||
"arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy",
|
||||
"arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy",
|
||||
"arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly",
|
||||
"arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
|
||||
]
|
||||
inline_policy {
|
||||
name = "IP6CniAccess"
|
||||
policy = jsonencode({
|
||||
"Version" : "2012-10-17",
|
||||
"Statement" : [
|
||||
{
|
||||
"Effect" : "Allow",
|
||||
"Action" : [
|
||||
"ec2:AssignIpv6Addresses",
|
||||
"ec2:DescribeInstances",
|
||||
"ec2:DescribeTags",
|
||||
"ec2:DescribeNetworkInterfaces",
|
||||
"ec2:DescribeInstanceTypes"
|
||||
],
|
||||
"Resource" : "*"
|
||||
},
|
||||
{
|
||||
"Effect" : "Allow",
|
||||
"Action" : [
|
||||
"ec2:CreateTags"
|
||||
],
|
||||
"Resource" : [
|
||||
"arn:aws:ec2:*:*:network-interface/*"
|
||||
]
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
inline_policy {
|
||||
name = "AlbIngressAccess"
|
||||
policy = jsonencode({
|
||||
"Version" : "2012-10-17",
|
||||
"Statement" : [
|
||||
{
|
||||
"Effect" : "Allow",
|
||||
"Action" : [
|
||||
"elasticloadbalancing:*"
|
||||
],
|
||||
"Resource" : "*"
|
||||
}
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
data "aws_ssm_parameter" "eks_ami_release_version" {
|
||||
name = "/aws/service/eks/optimized-ami/${aws_eks_cluster.eks-cluster.version}/amazon-linux-2/recommended/release_version"
|
||||
}
|
||||
|
||||
# manually generate the key: ssh-keygen -ted25519 -f eks-node-sshkey
|
||||
# file() can only read pre-existing file
|
||||
resource "aws_key_pair" "eks-node-sshkey" {
|
||||
key_name = "${local.resource-prefix}-eks-node-sshkey"
|
||||
public_key = file("${path.module}/eks-node-sshkey.pub")
|
||||
}
|
||||
|
||||
resource "aws_security_group" "eks-node-sg" {
|
||||
name = "${local.resource-prefix}-eks-node-sg"
|
||||
description = "Allow ssh to EKS nodes"
|
||||
vpc_id = data.terraform_remote_state.vpc.outputs.vpc-id
|
||||
|
||||
ingress {
|
||||
description = "SSH from VPC"
|
||||
from_port = 22
|
||||
to_port = 22
|
||||
protocol = "tcp"
|
||||
cidr_blocks = [data.terraform_remote_state.vpc.outputs.vpc-cidr]
|
||||
}
|
||||
|
||||
egress {
|
||||
from_port = 0
|
||||
to_port = 0
|
||||
protocol = "-1"
|
||||
cidr_blocks = ["0.0.0.0/0"]
|
||||
}
|
||||
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
resource "aws_eks_node_group" "eks-nodegroup" {
|
||||
cluster_name = aws_eks_cluster.eks-cluster.name
|
||||
node_group_name_prefix = "${local.resource-prefix}-eks-ng"
|
||||
node_role_arn = aws_iam_role.eks-nodegroup-role.arn
|
||||
subnet_ids = data.terraform_remote_state.vpc.outputs.private-subnet-ids
|
||||
version = aws_eks_cluster.eks-cluster.version
|
||||
release_version = nonsensitive(data.aws_ssm_parameter.eks_ami_release_version.value)
|
||||
instance_types = ["t3.large"] # see README.md
|
||||
scaling_config {
|
||||
desired_size = 1
|
||||
max_size = 2
|
||||
min_size = 1
|
||||
}
|
||||
|
||||
update_config {
|
||||
max_unavailable = 1
|
||||
}
|
||||
remote_access {
|
||||
ec2_ssh_key = aws_key_pair.eks-node-sshkey.key_name
|
||||
source_security_group_ids = [aws_security_group.eks-node-sg.id]
|
||||
}
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
# ec2 instance for EKS management
|
||||
data "aws_ami" "ubuntu" {
|
||||
most_recent = true
|
||||
|
||||
filter {
|
||||
name = "name"
|
||||
values = ["ubuntu/images/hvm-ssd/ubuntu-*-amd64-server-*"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "virtualization-type"
|
||||
values = ["hvm"]
|
||||
}
|
||||
|
||||
owners = ["099720109477"] # Canonical
|
||||
}
|
||||
|
||||
resource "aws_security_group" "eks-bast-sg" {
|
||||
name = "${local.resource-prefix}-eks-bast-sg"
|
||||
description = "Allow ssh to EKS bast"
|
||||
vpc_id = data.terraform_remote_state.vpc.outputs.vpc-id
|
||||
|
||||
ingress {
|
||||
description = "SSH from VPC"
|
||||
from_port = 22
|
||||
to_port = 22
|
||||
protocol = "tcp"
|
||||
cidr_blocks = ["223.18.148.85/32"]
|
||||
}
|
||||
|
||||
egress {
|
||||
from_port = 0
|
||||
to_port = 0
|
||||
protocol = "-1"
|
||||
cidr_blocks = ["0.0.0.0/0"]
|
||||
}
|
||||
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
|
||||
resource "aws_iam_role" "eks-bast-role" {
|
||||
name = "${local.resource-prefix}-bast-role"
|
||||
assume_role_policy = jsonencode({
|
||||
"Version" : "2012-10-17",
|
||||
"Statement" : [
|
||||
{
|
||||
"Effect" : "Allow",
|
||||
"Principal" : {
|
||||
"Service" : "ec2.amazonaws.com"
|
||||
},
|
||||
"Action" : "sts:AssumeRole"
|
||||
}
|
||||
]
|
||||
})
|
||||
inline_policy {
|
||||
name = "eks-bast-policy"
|
||||
|
||||
policy = jsonencode({
|
||||
Version = "2012-10-17"
|
||||
Statement = [
|
||||
{
|
||||
Action = ["eks:*", "ecr:*"]
|
||||
Effect = "Allow"
|
||||
Resource = "*"
|
||||
},
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
managed_policy_arns = ["arn:aws:iam::aws:policy/ReadOnlyAccess"]
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
|
||||
resource "aws_iam_instance_profile" "eks-bast-iam-profile" {
|
||||
name = "eksBastIamProfile"
|
||||
role = aws_iam_role.eks-bast-role.name
|
||||
}
|
||||
|
||||
resource "aws_instance" "eks-bast" {
|
||||
ami = data.aws_ami.ubuntu.id
|
||||
instance_type = "t3.micro"
|
||||
associate_public_ip_address = true
|
||||
ebs_optimized = true
|
||||
key_name = aws_key_pair.eks-node-sshkey.key_name
|
||||
vpc_security_group_ids = [aws_security_group.eks-bast-sg.id, aws_eks_cluster.eks-cluster.vpc_config[0].cluster_security_group_id]
|
||||
subnet_id = data.terraform_remote_state.vpc.outputs.public-subnet-ids[0]
|
||||
iam_instance_profile = aws_iam_instance_profile.eks-bast-iam-profile.name
|
||||
root_block_device {
|
||||
volume_size = 8
|
||||
volume_type = "gp3"
|
||||
tags = local.default-tags
|
||||
}
|
||||
tags = merge(local.default-tags, { "Name" : "${local.resource-prefix}-eks-bast" })
|
||||
user_data = <<EOF
|
||||
#!/bin/bash
|
||||
echo "Install unzip"
|
||||
apt install unzip -y
|
||||
echo "Install eksctl"
|
||||
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
|
||||
mv /tmp/eksctl /usr/local/bin
|
||||
echo "Install kubectl"
|
||||
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
||||
mv kubectl /usr/local/bin/
|
||||
chmod 755 /usr/local/bin/kubectl
|
||||
echo "Install awscliv2"
|
||||
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||
unzip awscliv2.zip
|
||||
sudo ./aws/install
|
||||
echo "Install helm"
|
||||
curl -q https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
|
||||
EOF
|
||||
|
||||
}
|
9
examples/eks-lab-ip6/eks/outputs.tf
Normal file
9
examples/eks-lab-ip6/eks/outputs.tf
Normal file
@ -0,0 +1,9 @@
|
||||
/*
|
||||
output eks-cluster-sg {
|
||||
value = aws_eks_cluster.eks-cluster.vpc_config.*.cluster_security_group_id
|
||||
}
|
||||
*/
|
||||
|
||||
output eks-bast-ip {
|
||||
value = aws_instance.eks-bast.public_ip
|
||||
}
|
13
examples/eks-lab-ip6/eks/provider.tf
Normal file
13
examples/eks-lab-ip6/eks/provider.tf
Normal file
@ -0,0 +1,13 @@
|
||||
provider "aws" {
|
||||
region = var.aws-region
|
||||
}
|
||||
|
||||
terraform {
|
||||
required_version = ">= 1.0"
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = ">= 3.25"
|
||||
}
|
||||
}
|
||||
}
|
6
examples/eks-lab-ip6/eks/terraform.tfvars
Normal file
6
examples/eks-lab-ip6/eks/terraform.tfvars
Normal file
@ -0,0 +1,6 @@
|
||||
aws-region = "ap-northeast-1"
|
||||
aws-region-short = "apne1"
|
||||
customer-name = "xpk"
|
||||
environment = "lab"
|
||||
project = "iac"
|
||||
application = "eks"
|
6
examples/eks-lab-ip6/eks/variables.tf
Normal file
6
examples/eks-lab-ip6/eks/variables.tf
Normal file
@ -0,0 +1,6 @@
|
||||
variable "aws-region" {}
|
||||
variable "aws-region-short" {}
|
||||
variable "customer-name" {}
|
||||
variable "environment" {}
|
||||
variable "project" {}
|
||||
variable "application" {}
|
10
examples/eks-lab-ip6/network/.terraform.lock.hcl
Normal file
10
examples/eks-lab-ip6/network/.terraform.lock.hcl
Normal file
@ -0,0 +1,10 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/aws" {
|
||||
version = "4.55.0"
|
||||
constraints = ">= 3.25.0"
|
||||
hashes = [
|
||||
"h1:VHfmrKCb4oTW/+rWGKKqipoMOPd4tPxlGwMp0/Flx/s=",
|
||||
]
|
||||
}
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/aws/4.55.0/linux_amd64
|
10
examples/eks-lab-ip6/network/README.md
Normal file
10
examples/eks-lab-ip6/network/README.md
Normal file
@ -0,0 +1,10 @@
|
||||
# eks-lab/network
|
||||
This module creates the following resources
|
||||
- VPC
|
||||
- Public and private subnets
|
||||
- NAT gateway
|
||||
|
||||
Ipv6 is enabled on EKS subnets. See
|
||||
https://docs.aws.amazon.com/eks/latest/userguide/cni-ipv6.html
|
||||
https://docs.aws.amazon.com/eks/latest/userguide/cni-iam-role.html#cni-iam-role-create-ipv6-policy
|
||||
https://aws.amazon.com/premiumsupport/knowledge-center/eks-failed-create-pod-sandbox/
|
18
examples/eks-lab-ip6/network/locals.tf
Normal file
18
examples/eks-lab-ip6/network/locals.tf
Normal file
@ -0,0 +1,18 @@
|
||||
data "aws_caller_identity" "this" {}
|
||||
|
||||
locals {
|
||||
default-tags = merge({
|
||||
ServiceProvider = "None"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
TerraformMode = "managed"
|
||||
TerraformDir = "${local.path-cwd-list[length(local.path-cwd-list) - 2]}/${local.path-cwd-list[length(local.path-cwd-list) - 1]}"
|
||||
|
||||
CreatedBy = data.aws_caller_identity.this.arn
|
||||
BuildDate = formatdate("YYYYMMDD", timestamp())
|
||||
})
|
||||
resource-prefix = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}"
|
||||
path-cwd-list = split("/", path.cwd)
|
||||
|
||||
}
|
133
examples/eks-lab-ip6/network/main.tf
Normal file
133
examples/eks-lab-ip6/network/main.tf
Normal file
@ -0,0 +1,133 @@
|
||||
# Create VPC and subnets
|
||||
|
||||
resource "aws_vpc" "vpc1" {
|
||||
cidr_block = "192.168.123.0/24"
|
||||
assign_generated_ipv6_cidr_block = true
|
||||
enable_dns_support = true
|
||||
enable_dns_hostnames = true
|
||||
|
||||
tags = merge(local.default-tags, { "Name" : "${local.resource-prefix}-vpc1" })
|
||||
}
|
||||
|
||||
data "aws_availability_zones" "azs" {
|
||||
state = "available"
|
||||
}
|
||||
|
||||
# kubernetes tag is needed for alb ingress controller
|
||||
resource "aws_subnet" "private-subnets" {
|
||||
count = 2
|
||||
availability_zone = data.aws_availability_zones.azs.names[count.index]
|
||||
vpc_id = aws_vpc.vpc1.id
|
||||
cidr_block = cidrsubnet(aws_vpc.vpc1.cidr_block, 2, count.index)
|
||||
assign_ipv6_address_on_creation = true
|
||||
# ipv6 subnets must be a /64
|
||||
ipv6_cidr_block = cidrsubnet(aws_vpc.vpc1.ipv6_cidr_block, 8, count.index)
|
||||
enable_resource_name_dns_a_record_on_launch = true
|
||||
tags = merge(local.default-tags,
|
||||
{ "Name" : "${local.resource-prefix}-private-${data.aws_availability_zones.azs.names[count.index]}" },
|
||||
{ "kubernetes.io/role/internal-elb" : "1" }
|
||||
)
|
||||
}
|
||||
|
||||
# kubernetes tag is needed for alb ingress controller
|
||||
resource "aws_subnet" "public-subnets" {
|
||||
count = 2
|
||||
availability_zone = data.aws_availability_zones.azs.names[count.index]
|
||||
vpc_id = aws_vpc.vpc1.id
|
||||
cidr_block = cidrsubnet(aws_vpc.vpc1.cidr_block, 2, count.index + 2)
|
||||
assign_ipv6_address_on_creation = true
|
||||
# ipv6 subnets must be a /64
|
||||
ipv6_cidr_block = cidrsubnet(aws_vpc.vpc1.ipv6_cidr_block, 8, count.index + 2)
|
||||
enable_resource_name_dns_a_record_on_launch = true
|
||||
tags = merge(local.default-tags,
|
||||
{ "Name" : "${local.resource-prefix}-public-${data.aws_availability_zones.azs.names[count.index]}" },
|
||||
{ "kubernetes.io/role/elb" : "1" }
|
||||
)
|
||||
}
|
||||
|
||||
resource "aws_internet_gateway" "igw" {
|
||||
vpc_id = aws_vpc.vpc1.id
|
||||
tags = merge(local.default-tags, { "Name" : "${local.resource-prefix}-igw" })
|
||||
}
|
||||
|
||||
resource "aws_eip" "ngw-ip" {
|
||||
vpc = true
|
||||
}
|
||||
|
||||
resource "aws_nat_gateway" "ngw" {
|
||||
allocation_id = aws_eip.ngw-ip.id
|
||||
subnet_id = aws_subnet.public-subnets[0].id
|
||||
tags = merge(local.default-tags, { "Name" : "${local.resource-prefix}-ngw" })
|
||||
}
|
||||
|
||||
resource "aws_route_table" "public-rtb" {
|
||||
vpc_id = aws_vpc.vpc1.id
|
||||
route {
|
||||
cidr_block = "0.0.0.0/0"
|
||||
gateway_id = aws_internet_gateway.igw.id
|
||||
}
|
||||
tags = merge(local.default-tags, { "Name" : "${local.resource-prefix}-public-rtb" })
|
||||
}
|
||||
|
||||
resource "aws_route_table" "private-rtb" {
|
||||
vpc_id = aws_vpc.vpc1.id
|
||||
route {
|
||||
cidr_block = "0.0.0.0/0"
|
||||
gateway_id = aws_nat_gateway.ngw.id
|
||||
}
|
||||
tags = merge(local.default-tags, { "Name" : "${local.resource-prefix}-private-rtb" })
|
||||
}
|
||||
|
||||
resource "aws_route_table_association" "public-rtb-asso" {
|
||||
count = length(aws_subnet.public-subnets)
|
||||
subnet_id = aws_subnet.public-subnets[count.index].id
|
||||
route_table_id = aws_route_table.public-rtb.id
|
||||
}
|
||||
|
||||
resource "aws_route_table_association" "private-rtb-asso" {
|
||||
count = length(aws_subnet.private-subnets)
|
||||
subnet_id = aws_subnet.private-subnets[count.index].id
|
||||
route_table_id = aws_route_table.private-rtb.id
|
||||
}
|
||||
|
||||
resource "aws_vpc_endpoint" "eks-vpcep" {
|
||||
vpc_id = aws_vpc.vpc1.id
|
||||
service_name = "com.amazonaws.${var.aws-region}.eks"
|
||||
vpc_endpoint_type = "Interface"
|
||||
security_group_ids = [aws_security_group.generic-ep-sg.id]
|
||||
private_dns_enabled = true
|
||||
subnet_ids = aws_subnet.private-subnets.*.id
|
||||
tags = merge(local.default-tags, { "Name" : "${local.resource-prefix}-vpcep-eks" })
|
||||
}
|
||||
|
||||
resource "aws_security_group" "generic-ep-sg" {
|
||||
name = "HttpsAccessToVpcEndpoints"
|
||||
description = "HttpsAccessToVpcEndpoints"
|
||||
vpc_id = aws_vpc.vpc1.id
|
||||
|
||||
ingress {
|
||||
description = "TLS from VPC"
|
||||
from_port = 443
|
||||
to_port = 443
|
||||
protocol = "tcp"
|
||||
cidr_blocks = [aws_vpc.vpc1.cidr_block]
|
||||
}
|
||||
|
||||
ingress {
|
||||
description = "TLS from VPC"
|
||||
from_port = 443
|
||||
to_port = 443
|
||||
protocol = "tcp"
|
||||
ipv6_cidr_blocks = [aws_vpc.vpc1.ipv6_cidr_block]
|
||||
}
|
||||
|
||||
egress {
|
||||
from_port = 0
|
||||
to_port = 0
|
||||
protocol = "-1"
|
||||
cidr_blocks = ["0.0.0.0/0"]
|
||||
ipv6_cidr_blocks = ["::/0"]
|
||||
}
|
||||
|
||||
tags = merge({ "Name" : "VpcEpAccess" }, local.default-tags)
|
||||
}
|
19
examples/eks-lab-ip6/network/outputs.tf
Normal file
19
examples/eks-lab-ip6/network/outputs.tf
Normal file
@ -0,0 +1,19 @@
|
||||
output vpc-cidr {
|
||||
value = aws_vpc.vpc1.cidr_block
|
||||
}
|
||||
|
||||
output vpc-cidr6 {
|
||||
value = aws_vpc.vpc1.ipv6_cidr_block
|
||||
}
|
||||
|
||||
output vpc-id {
|
||||
value = aws_vpc.vpc1.id
|
||||
}
|
||||
|
||||
output private-subnet-ids {
|
||||
value = aws_subnet.private-subnets.*.id
|
||||
}
|
||||
|
||||
output public-subnet-ids {
|
||||
value = aws_subnet.public-subnets.*.id
|
||||
}
|
13
examples/eks-lab-ip6/network/provider.tf
Normal file
13
examples/eks-lab-ip6/network/provider.tf
Normal file
@ -0,0 +1,13 @@
|
||||
provider "aws" {
|
||||
region = var.aws-region
|
||||
}
|
||||
|
||||
terraform {
|
||||
required_version = ">= 1.0"
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = ">= 3.25"
|
||||
}
|
||||
}
|
||||
}
|
6
examples/eks-lab-ip6/network/terraform.tfvars
Normal file
6
examples/eks-lab-ip6/network/terraform.tfvars
Normal file
@ -0,0 +1,6 @@
|
||||
aws-region = "ap-northeast-1"
|
||||
aws-region-short = "apne1"
|
||||
customer-name = "xpk"
|
||||
environment = "lab"
|
||||
project = "iac"
|
||||
application = "eks"
|
6
examples/eks-lab-ip6/network/variables.tf
Normal file
6
examples/eks-lab-ip6/network/variables.tf
Normal file
@ -0,0 +1,6 @@
|
||||
variable "aws-region" {}
|
||||
variable "aws-region-short" {}
|
||||
variable "customer-name" {}
|
||||
variable "environment" {}
|
||||
variable "project" {}
|
||||
variable "application" {}
|
1
examples/eks-lab/.terraform/modules/modules.json
Normal file
1
examples/eks-lab/.terraform/modules/modules.json
Normal file
@ -0,0 +1 @@
|
||||
{"Modules":[{"Key":"vpc-subnets.vpc-ep","Source":"../vpc-endpoints","Dir":"../../modules/networking/vpc-endpoints"},{"Key":"vpc-subnets","Source":"../../modules/networking/vpc_subnets","Dir":"../../modules/networking/vpc_subnets"},{"Key":"","Source":"","Dir":"."}]}
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/aws/4.54.0/linux_amd64
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/local/2.3.0/linux_amd64
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/null/3.2.1/linux_amd64
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/template/2.2.0/linux_amd64
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/tls/4.0.4/linux_amd64
|
10
examples/eks-lab/eks/.terraform.lock.hcl
Normal file
10
examples/eks-lab/eks/.terraform.lock.hcl
Normal file
@ -0,0 +1,10 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/aws" {
|
||||
version = "4.55.0"
|
||||
constraints = ">= 3.25.0"
|
||||
hashes = [
|
||||
"h1:VHfmrKCb4oTW/+rWGKKqipoMOPd4tPxlGwMp0/Flx/s=",
|
||||
]
|
||||
}
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/aws/4.55.0/linux_amd64
|
94
examples/eks-lab/eks/README.md
Normal file
94
examples/eks-lab/eks/README.md
Normal file
@ -0,0 +1,94 @@
|
||||
# eks-lab
|
||||
This module creates the following resources
|
||||
- VPC
|
||||
- Public and private subnets
|
||||
- NAT gateway
|
||||
- EKS cluster
|
||||
- EKS nodegroup
|
||||
- EKS bastion
|
||||
- Install eksctl and kubectl on EKS bastion
|
||||
|
||||
## How to use eksctl and kubectl
|
||||
By default, AWS EKS are installed with an aws-auth configmap which allows only the cluster creator
|
||||
to work with the cluster. Therefore, one must first assume to the creator IAM role before running eksctl or kubectl.
|
||||
For example, to create kube config, run these commands:
|
||||
|
||||
```bash
|
||||
export AWS_ACCESS_KEY_ID=xxxx AWS_SECRET_ACCESS_KEY="yyyy" AWS_DEFAULT_REGION=ap-northeast-1
|
||||
aws eks update-kubeconfig --name lab-apne1-xpk-iac-cluster01
|
||||
```
|
||||
|
||||
## Configure VPC CNI to use custom networking
|
||||
```bash
|
||||
kubectl set env daemonset aws-node -n kube-system AWS_VPC_K8S_CNI_CUSTOM_NETWORK_CFG=true
|
||||
kubectl set env daemonset aws-node -n kube-system ENI_CONFIG_LABEL_DEF=failure-domain.beta.kubernetes.io/zone
|
||||
|
||||
cat <<EOF | kubectl apply -f -
|
||||
apiVersion: crd.k8s.amazonaws.com/v1alpha1
|
||||
kind: ENIConfig
|
||||
metadata:
|
||||
name: ap-northeast-1a
|
||||
spec:
|
||||
subnet: subnet-0d015cc72715685ca
|
||||
EOF
|
||||
|
||||
cat <<EOF | kubectl apply -f -
|
||||
apiVersion: crd.k8s.amazonaws.com/v1alpha1
|
||||
kind: ENIConfig
|
||||
metadata:
|
||||
name: ap-northeast-1c
|
||||
spec:
|
||||
subnet: subnet-030ee2c3e2b730fcc
|
||||
EOF
|
||||
```
|
||||
|
||||
Then redeploy the nodegroup
|
||||
```bash
|
||||
terraform apply -replace="aws_eks_node_group.eks-nodegroup"
|
||||
```
|
||||
|
||||
If successfully done, you will start to see 100.64.0.0 addresses being used on the EKS worker nodes. You can also see it with kubectl:
|
||||
|
||||
|
||||
```bash
|
||||
root@ip-192-168-123-48:~# kubectl get pods --all-namespaces -o wide
|
||||
NAMESPACE NAME READY STATUS RESTARTS AGE IP NODE NOMINATED NODE READINESS GATES
|
||||
kube-system aws-node-5892k 1/1 Running 0 4m9s 192.168.123.245 ip-192-168-123-245.ap-northeast-1.compute.internal <none> <none>
|
||||
kube-system coredns-5fc8d4cdcf-c75z6 1/1 Running 0 13m 100.64.9.249 ip-192-168-123-245.ap-northeast-1.compute.internal <none> <none>
|
||||
kube-system coredns-5fc8d4cdcf-h5lnl 1/1 Running 0 13m 100.64.13.41 ip-192-168-123-245.ap-northeast-1.compute.internal <none> <none>
|
||||
kube-system ebs-csi-controller-d6bff959-8459z 6/6 Running 0 13m 100.64.8.74 ip-192-168-123-245.ap-northeast-1.compute.internal <none> <none>
|
||||
kube-system ebs-csi-controller-d6bff959-vnwlf 6/6 Running 0 5m28s 100.64.11.124 ip-192-168-123-245.ap-northeast-1.compute.internal <none> <none>
|
||||
kube-system ebs-csi-node-h7w8r 3/3 Running 0 4m9s 100.64.11.188 ip-192-168-123-245.ap-northeast-1.compute.internal <none> <none>
|
||||
kube-system kube-proxy-vgmdf 1/1 Running 0 4m9s 192.168.123.245 ip-192-168-123-245.ap-northeast-1.compute.internal <none> <none>
|
||||
|
||||
```
|
||||
|
||||
## Edit configmap/aws-auth
|
||||
```
|
||||
kubectl edit -n kube-system configmap/aws-auth
|
||||
```
|
||||
Add a group with system:master role
|
||||
```yaml
|
||||
apiVersion: v1
|
||||
data:
|
||||
mapRoles: |
|
||||
- groups:
|
||||
- system:bootstrappers
|
||||
- system:nodes
|
||||
rolearn: arn:aws:iam::040216112220:role/clusterCreator
|
||||
username: system:node:Template:EC2PrivateDNSName
|
||||
- groups:
|
||||
- system:masters
|
||||
rolearn: arn:aws:iam::040216112220:role/lab-apne1-xpk-iac-bast-role
|
||||
username: lab-apne1-xpk-iac-bast-role
|
||||
kind: ConfigMap
|
||||
metadata:
|
||||
creationTimestamp: "2022-12-29T11:02:15Z"
|
||||
name: aws-auth
|
||||
namespace: kube-system
|
||||
resourceVersion: "59670"
|
||||
uid: 7cf9d889-8ed2-4c8d-ac0f-092184cede8a
|
||||
```
|
||||
|
||||
## Addon updates
|
||||
When updating addons, please select advanced options and choose preserve settings.
|
7
examples/eks-lab/eks/eks-node-sshkey
Normal file
7
examples/eks-lab/eks/eks-node-sshkey
Normal file
@ -0,0 +1,7 @@
|
||||
-----BEGIN OPENSSH PRIVATE KEY-----
|
||||
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
|
||||
QyNTUxOQAAACDQnEGn3cwEav+pMKXYvP3KjDYpB+Po/wpcrmQZnh31wgAAAJDu9hUF7vYV
|
||||
BQAAAAtzc2gtZWQyNTUxOQAAACDQnEGn3cwEav+pMKXYvP3KjDYpB+Po/wpcrmQZnh31wg
|
||||
AAAEBcvMSW9eqRM2Kd3obuJfHma+nzrsMiRSHO09wjSg4KF9CcQafdzARq/6kwpdi8/cqM
|
||||
NikH4+j/ClyuZBmeHfXCAAAADWtuQGlzbS56b28ubG8=
|
||||
-----END OPENSSH PRIVATE KEY-----
|
1
examples/eks-lab/eks/eks-node-sshkey.pub
Normal file
1
examples/eks-lab/eks/eks-node-sshkey.pub
Normal file
@ -0,0 +1 @@
|
||||
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAINCcQafdzARq/6kwpdi8/cqMNikH4+j/ClyuZBmeHfXC kn@ism.zoo.lo
|
18
examples/eks-lab/eks/locals.tf
Normal file
18
examples/eks-lab/eks/locals.tf
Normal file
@ -0,0 +1,18 @@
|
||||
data "aws_caller_identity" "this" {}
|
||||
|
||||
locals {
|
||||
default-tags = merge({
|
||||
ServiceProvider = "None"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
TerraformMode = "managed"
|
||||
TerraformDir = "${local.path-cwd-list[length(local.path-cwd-list) - 2]}/${local.path-cwd-list[length(local.path-cwd-list) - 1]}"
|
||||
|
||||
CreatedBy = data.aws_caller_identity.this.arn
|
||||
BuildDate = formatdate("YYYYMMDD", timestamp())
|
||||
})
|
||||
resource-prefix = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}"
|
||||
path-cwd-list = split("/", path.cwd)
|
||||
|
||||
}
|
261
examples/eks-lab/eks/main.tf
Normal file
261
examples/eks-lab/eks/main.tf
Normal file
@ -0,0 +1,261 @@
|
||||
data "terraform_remote_state" "vpc" {
|
||||
backend = "local"
|
||||
config = {
|
||||
path = "../network/terraform.tfstate"
|
||||
}
|
||||
}
|
||||
|
||||
resource "aws_iam_role" "eks-cluster-role" {
|
||||
name = "${local.resource-prefix}-cluster-role"
|
||||
assume_role_policy = jsonencode({
|
||||
"Version" : "2012-10-17",
|
||||
"Statement" : [
|
||||
{
|
||||
"Effect" : "Allow",
|
||||
"Principal" : {
|
||||
"Service" : "eks.amazonaws.com"
|
||||
},
|
||||
"Action" : "sts:AssumeRole"
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
managed_policy_arns = ["arn:aws:iam::aws:policy/AmazonEKSClusterPolicy", "arn:aws:iam::aws:policy/AmazonEKSVPCResourceController"]
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
resource "aws_eks_cluster" "eks-cluster" {
|
||||
name = "${local.resource-prefix}-cluster01"
|
||||
role_arn = aws_iam_role.eks-cluster-role.arn
|
||||
vpc_config {
|
||||
subnet_ids = data.terraform_remote_state.vpc.outputs.private-subnet-ids
|
||||
endpoint_private_access = true
|
||||
endpoint_public_access = false
|
||||
}
|
||||
enabled_cluster_log_types = ["api", "audit"]
|
||||
kubernetes_network_config {
|
||||
service_ipv4_cidr = "172.16.0.0/16"
|
||||
ip_family = "ipv4"
|
||||
}
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
|
||||
resource "aws_eks_addon" "eks-addons" {
|
||||
# for_each = toset(["vpc-cni", "coredns", "kube-proxy", "aws-ebs-csi-driver"])
|
||||
# latest version as on 2023-02-17 failed to deploy
|
||||
for_each = {
|
||||
"aws-ebs-csi-driver" : {
|
||||
"version" : "v1.15.0-eksbuild.1"
|
||||
},
|
||||
"vpc-cni" : {
|
||||
"version" : "v1.12.2-eksbuild.1"
|
||||
},
|
||||
"coredns" : {
|
||||
"version" : "v1.9.3-eksbuild.2"
|
||||
},
|
||||
"kube-proxy" : {
|
||||
"version" : "v1.24.9-eksbuild.2"
|
||||
}
|
||||
}
|
||||
cluster_name = aws_eks_cluster.eks-cluster.name
|
||||
addon_name = each.key
|
||||
# addon_version = each.value["version"]
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
resource "aws_iam_role" "eks-nodegroup-role" {
|
||||
name = "${local.resource-prefix}-nodegroup-role"
|
||||
assume_role_policy = jsonencode({
|
||||
"Version" : "2012-10-17",
|
||||
"Statement" : [
|
||||
{
|
||||
"Effect" : "Allow",
|
||||
"Principal" : {
|
||||
"Service" : "ec2.amazonaws.com"
|
||||
},
|
||||
"Action" : "sts:AssumeRole"
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
managed_policy_arns = [
|
||||
"arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy",
|
||||
"arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy",
|
||||
"arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly",
|
||||
"arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
|
||||
]
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
data "aws_ssm_parameter" "eks_ami_release_version" {
|
||||
name = "/aws/service/eks/optimized-ami/${aws_eks_cluster.eks-cluster.version}/amazon-linux-2/recommended/release_version"
|
||||
}
|
||||
|
||||
# manually generate the key: ssh-keygen -ted25519 -f eks-node-sshkey
|
||||
# file() can only read pre-existing file
|
||||
resource "aws_key_pair" "eks-node-sshkey" {
|
||||
key_name = "${local.resource-prefix}-eks-node-sshkey"
|
||||
public_key = file("${path.module}/eks-node-sshkey.pub")
|
||||
}
|
||||
|
||||
resource "aws_security_group" "eks-node-sg" {
|
||||
name = "${local.resource-prefix}-eks-node-sg"
|
||||
description = "Allow ssh to EKS nodes"
|
||||
vpc_id = data.terraform_remote_state.vpc.outputs.vpc-id
|
||||
|
||||
ingress {
|
||||
description = "SSH from VPC"
|
||||
from_port = 22
|
||||
to_port = 22
|
||||
protocol = "tcp"
|
||||
cidr_blocks = [data.terraform_remote_state.vpc.outputs.vpc-cidr]
|
||||
}
|
||||
|
||||
egress {
|
||||
from_port = 0
|
||||
to_port = 0
|
||||
protocol = "-1"
|
||||
cidr_blocks = ["0.0.0.0/0"]
|
||||
}
|
||||
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
resource "aws_eks_node_group" "eks-nodegroup" {
|
||||
cluster_name = aws_eks_cluster.eks-cluster.name
|
||||
node_group_name_prefix = "${local.resource-prefix}-eks-ng"
|
||||
node_role_arn = aws_iam_role.eks-nodegroup-role.arn
|
||||
subnet_ids = data.terraform_remote_state.vpc.outputs.private-subnet-ids
|
||||
version = aws_eks_cluster.eks-cluster.version
|
||||
release_version = nonsensitive(data.aws_ssm_parameter.eks_ami_release_version.value)
|
||||
instance_types = ["t3.small"]
|
||||
scaling_config {
|
||||
desired_size = 1
|
||||
max_size = 2
|
||||
min_size = 1
|
||||
}
|
||||
|
||||
update_config {
|
||||
max_unavailable = 1
|
||||
}
|
||||
remote_access {
|
||||
ec2_ssh_key = aws_key_pair.eks-node-sshkey.key_name
|
||||
source_security_group_ids = [aws_security_group.eks-node-sg.id]
|
||||
}
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
# ec2 instance for EKS management
|
||||
data "aws_ami" "ubuntu" {
|
||||
most_recent = true
|
||||
|
||||
filter {
|
||||
name = "name"
|
||||
values = ["ubuntu/images/hvm-ssd/ubuntu-*-amd64-server-*"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "virtualization-type"
|
||||
values = ["hvm"]
|
||||
}
|
||||
|
||||
owners = ["099720109477"] # Canonical
|
||||
}
|
||||
|
||||
resource "aws_security_group" "eks-bast-sg" {
|
||||
name = "${local.resource-prefix}-eks-bast-sg"
|
||||
description = "Allow ssh to EKS bast"
|
||||
vpc_id = data.terraform_remote_state.vpc.outputs.vpc-id
|
||||
|
||||
ingress {
|
||||
description = "SSH from VPC"
|
||||
from_port = 22
|
||||
to_port = 22
|
||||
protocol = "tcp"
|
||||
cidr_blocks = ["223.18.148.85/32"]
|
||||
}
|
||||
|
||||
egress {
|
||||
from_port = 0
|
||||
to_port = 0
|
||||
protocol = "-1"
|
||||
cidr_blocks = ["0.0.0.0/0"]
|
||||
}
|
||||
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
|
||||
resource "aws_iam_role" "eks-bast-role" {
|
||||
name = "${local.resource-prefix}-bast-role"
|
||||
assume_role_policy = jsonencode({
|
||||
"Version" : "2012-10-17",
|
||||
"Statement" : [
|
||||
{
|
||||
"Effect" : "Allow",
|
||||
"Principal" : {
|
||||
"Service" : "ec2.amazonaws.com"
|
||||
},
|
||||
"Action" : "sts:AssumeRole"
|
||||
}
|
||||
]
|
||||
})
|
||||
inline_policy {
|
||||
name = "eks-bast-policy"
|
||||
|
||||
policy = jsonencode({
|
||||
Version = "2012-10-17"
|
||||
Statement = [
|
||||
{
|
||||
Action = ["eks:*", "ecr:*"]
|
||||
Effect = "Allow"
|
||||
Resource = "*"
|
||||
},
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
managed_policy_arns = ["arn:aws:iam::aws:policy/ReadOnlyAccess"]
|
||||
tags = local.default-tags
|
||||
}
|
||||
|
||||
|
||||
resource "aws_iam_instance_profile" "eks-bast-iam-profile" {
|
||||
name = "eksBastIamProfile"
|
||||
role = aws_iam_role.eks-bast-role.name
|
||||
}
|
||||
|
||||
resource "aws_instance" "eks-bast" {
|
||||
ami = data.aws_ami.ubuntu.id
|
||||
instance_type = "t3.micro"
|
||||
associate_public_ip_address = true
|
||||
ebs_optimized = true
|
||||
key_name = aws_key_pair.eks-node-sshkey.key_name
|
||||
vpc_security_group_ids = [aws_security_group.eks-bast-sg.id, aws_eks_cluster.eks-cluster.vpc_config[0].cluster_security_group_id]
|
||||
subnet_id = data.terraform_remote_state.vpc.outputs.public-subnet-ids[0]
|
||||
iam_instance_profile = aws_iam_instance_profile.eks-bast-iam-profile.name
|
||||
root_block_device {
|
||||
volume_size = 8
|
||||
volume_type = "gp3"
|
||||
tags = local.default-tags
|
||||
}
|
||||
tags = merge(local.default-tags, { "Name" : "${local.resource-prefix}-eks-bast" })
|
||||
user_data = <<EOF
|
||||
#!/bin/bash
|
||||
echo "Install unzip"
|
||||
apt install unzip -y
|
||||
echo "Install eksctl"
|
||||
curl --silent --location "https://github.com/weaveworks/eksctl/releases/latest/download/eksctl_$(uname -s)_amd64.tar.gz" | tar xz -C /tmp
|
||||
mv /tmp/eksctl /usr/local/bin
|
||||
echo "Install kubectl"
|
||||
curl -LO "https://dl.k8s.io/release/$(curl -L -s https://dl.k8s.io/release/stable.txt)/bin/linux/amd64/kubectl"
|
||||
mv kubectl /usr/local/bin/
|
||||
chmod 755 /usr/local/bin/kubectl
|
||||
echo "Install awscliv2"
|
||||
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
|
||||
unzip awscliv2.zip
|
||||
sudo ./aws/install
|
||||
EOF
|
||||
|
||||
}
|
9
examples/eks-lab/eks/outputs.tf
Normal file
9
examples/eks-lab/eks/outputs.tf
Normal file
@ -0,0 +1,9 @@
|
||||
/*
|
||||
output eks-cluster-sg {
|
||||
value = aws_eks_cluster.eks-cluster.vpc_config.*.cluster_security_group_id
|
||||
}
|
||||
*/
|
||||
|
||||
output eks-bast-ip {
|
||||
value = aws_instance.eks-bast.public_ip
|
||||
}
|
13
examples/eks-lab/eks/provider.tf
Normal file
13
examples/eks-lab/eks/provider.tf
Normal file
@ -0,0 +1,13 @@
|
||||
provider "aws" {
|
||||
region = var.aws-region
|
||||
}
|
||||
|
||||
terraform {
|
||||
required_version = ">= 1.0"
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = ">= 3.25"
|
||||
}
|
||||
}
|
||||
}
|
9
examples/eks-lab/eks/terraform.tfstate
Normal file
9
examples/eks-lab/eks/terraform.tfstate
Normal file
@ -0,0 +1,9 @@
|
||||
{
|
||||
"version": 4,
|
||||
"terraform_version": "1.3.7",
|
||||
"serial": 113,
|
||||
"lineage": "61b12344-3edc-e800-e200-edd57322a557",
|
||||
"outputs": {},
|
||||
"resources": [],
|
||||
"check_results": null
|
||||
}
|
1101
examples/eks-lab/eks/terraform.tfstate.backup
Normal file
1101
examples/eks-lab/eks/terraform.tfstate.backup
Normal file
File diff suppressed because it is too large
Load Diff
6
examples/eks-lab/eks/terraform.tfvars
Normal file
6
examples/eks-lab/eks/terraform.tfvars
Normal file
@ -0,0 +1,6 @@
|
||||
aws-region = "ap-northeast-1"
|
||||
aws-region-short = "apne1"
|
||||
customer-name = "xpk"
|
||||
environment = "lab"
|
||||
project = "iac"
|
||||
application = "eks"
|
6
examples/eks-lab/eks/variables.tf
Normal file
6
examples/eks-lab/eks/variables.tf
Normal file
@ -0,0 +1,6 @@
|
||||
variable "aws-region" {}
|
||||
variable "aws-region-short" {}
|
||||
variable "customer-name" {}
|
||||
variable "environment" {}
|
||||
variable "project" {}
|
||||
variable "application" {}
|
25
examples/eks-lab/network/.terraform.lock.hcl
Normal file
25
examples/eks-lab/network/.terraform.lock.hcl
Normal file
@ -0,0 +1,25 @@
|
||||
# This file is maintained automatically by "terraform init".
|
||||
# Manual edits may be lost in future updates.
|
||||
|
||||
provider "registry.terraform.io/hashicorp/aws" {
|
||||
version = "4.55.0"
|
||||
constraints = ">= 3.25.0, >= 3.75.2"
|
||||
hashes = [
|
||||
"h1:VHfmrKCb4oTW/+rWGKKqipoMOPd4tPxlGwMp0/Flx/s=",
|
||||
"zh:0866f25575bad3b9c313cd778c94fc65e79d335af2d20a3480f79d7731d93b7b",
|
||||
"zh:2c05c16155cbc054622cf83e4b6614fef35935b00b238e4c21ee225e6c896770",
|
||||
"zh:2efba66649fb12af0492c6cce4e2361fe9139df648734264f61a9a1ef754df53",
|
||||
"zh:3c60bb53e3b65d7f86699fae0797a55a9aa41b8ba377aaff4daf23d1661393a9",
|
||||
"zh:41f6dcd90b54b623d523df8fb4a30779cfe22e9ab59516bc05b29291a7af0946",
|
||||
"zh:4b8330b154e9e2d035dd5488abcac25efec1fa6055d3a70894a8c0384f0579d6",
|
||||
"zh:595f263706cf1fb6b8447e2ec343638de4360841a15e6bff6ccbb0ff86c7ce74",
|
||||
"zh:5dfc5b858a43cf45fde5542eb673f6104c14cdc3d73843d1b87a9e44545cbad4",
|
||||
"zh:7bbe05cf30521f0110603bb84995a4025ce7810626010276600e4b402143df27",
|
||||
"zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425",
|
||||
"zh:a490e68c63504d3301d6dcb700c95778d93bb2baa6632a46c5a1d62862a7067c",
|
||||
"zh:c4f9f6659148528375c8a822163925c9aae490ccce2e6301cefbbab009531971",
|
||||
"zh:ef66070f957408f1c924ddfd5dbd0d34bce16efd9e36ccecbf699de72beb131f",
|
||||
"zh:f7ba5e3e62a2b51b24e326797a89fdd86bafaea7d1912738d514c9903c14d7f2",
|
||||
"zh:ffc20b7d9f7bd331fb6451d0fc92c68196383d7115e69380de6566cc268cb9b9",
|
||||
]
|
||||
}
|
1
examples/eks-lab/network/.terraform/modules/modules.json
Normal file
1
examples/eks-lab/network/.terraform/modules/modules.json
Normal file
@ -0,0 +1 @@
|
||||
{"Modules":[{"Key":"","Source":"","Dir":"."},{"Key":"vpc-subnets","Source":"../../../modules/networking/vpc_subnets","Dir":"../../../modules/networking/vpc_subnets"},{"Key":"vpc-subnets.vpc-ep","Source":"../vpc-endpoints","Dir":"../../../modules/networking/vpc-endpoints"}]}
|
@ -0,0 +1 @@
|
||||
/home/kn/.terraform.d/plugin-cache/registry.terraform.io/hashicorp/aws/4.55.0/linux_amd64
|
8
examples/eks-lab/network/README.md
Normal file
8
examples/eks-lab/network/README.md
Normal file
@ -0,0 +1,8 @@
|
||||
# eks-lab/network
|
||||
This module creates the following resources
|
||||
- VPC
|
||||
- Public and private subnets
|
||||
- NAT gateway
|
||||
|
||||
A secondary CIDR range is added to the VPC. Later on in the EKS layer, EKS will be configured to use the secondary CIDR.
|
||||
See https://aws.amazon.com/premiumsupport/knowledge-center/eks-multiple-cidr-ranges/
|
18
examples/eks-lab/network/locals.tf
Normal file
18
examples/eks-lab/network/locals.tf
Normal file
@ -0,0 +1,18 @@
|
||||
data "aws_caller_identity" "this" {}
|
||||
|
||||
locals {
|
||||
default-tags = merge({
|
||||
ServiceProvider = "None"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
TerraformMode = "managed"
|
||||
TerraformDir = "${local.path-cwd-list[length(local.path-cwd-list) - 2]}/${local.path-cwd-list[length(local.path-cwd-list) - 1]}"
|
||||
|
||||
CreatedBy = data.aws_caller_identity.this.arn
|
||||
BuildDate = formatdate("YYYYMMDD", timestamp())
|
||||
})
|
||||
resource-prefix = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}"
|
||||
path-cwd-list = split("/", path.cwd)
|
||||
|
||||
}
|
55
examples/eks-lab/network/main.tf
Normal file
55
examples/eks-lab/network/main.tf
Normal file
@ -0,0 +1,55 @@
|
||||
# Create VPC and subnets
|
||||
|
||||
module "vpc-subnets" {
|
||||
source = "../../../modules/networking/vpc_subnets"
|
||||
|
||||
application = var.application
|
||||
aws-region = var.aws-region
|
||||
customer-name = var.customer-name
|
||||
default-tags = local.default-tags
|
||||
environment = var.environment
|
||||
project = var.project
|
||||
vpc-cidr = "192.168.123.0/24"
|
||||
vpcflowlog-cwl-loggroup-key-arn = ""
|
||||
number-of-private-subnets-per-az = 1
|
||||
number-of-public-subnets-per-az = 1
|
||||
create-nat-gateway = true
|
||||
create-free-vpc-endpoints = true
|
||||
enable-flow-log = false
|
||||
}
|
||||
|
||||
# secondary CIDR for EKS
|
||||
# https://aws.amazon.com/premiumsupport/knowledge-center/eks-multiple-cidr-ranges/
|
||||
resource "aws_vpc_ipv4_cidr_block_association" "secondary_cidr" {
|
||||
vpc_id = module.vpc-subnets.vpc_id
|
||||
cidr_block = "100.64.0.0/16"
|
||||
}
|
||||
|
||||
resource "aws_subnet" "cidr2-subnet1a" {
|
||||
vpc_id = module.vpc-subnets.vpc_id
|
||||
cidr_block = "100.64.0.0/21"
|
||||
tags = merge(local.default-tags, {"Name" : "${local.resource-prefix}-private-1a-eks"})
|
||||
}
|
||||
|
||||
resource "aws_route_table_association" "cidr2-subnet1a-rtb-asso" {
|
||||
subnet_id = aws_subnet.cidr2-subnet1a.id
|
||||
route_table_id = module.vpc-subnets.private-rtb-id
|
||||
}
|
||||
|
||||
resource "aws_subnet" "cidr2-subnet1c" {
|
||||
vpc_id = module.vpc-subnets.vpc_id
|
||||
cidr_block = "100.64.8.0/21"
|
||||
tags = merge(local.default-tags, {"Name" : "${local.resource-prefix}-private-1c-eks"})
|
||||
}
|
||||
|
||||
resource "aws_route_table_association" "cidr2-subnet1c-rtb-asso" {
|
||||
subnet_id = aws_subnet.cidr2-subnet1c.id
|
||||
route_table_id = module.vpc-subnets.private-rtb-id
|
||||
}
|
||||
|
||||
resource "aws_vpc_endpoint" "eks-vpcep" {
|
||||
vpc_id = module.vpc-subnets.vpc_id
|
||||
service_name = "com.amazonaws.${var.aws-region}.eks"
|
||||
vpc_endpoint_type = "Interface"
|
||||
tags = merge(local.default-tags, { "Name" : "${local.resource-prefix}-vpcep-eks" })
|
||||
}
|
15
examples/eks-lab/network/outputs.tf
Normal file
15
examples/eks-lab/network/outputs.tf
Normal file
@ -0,0 +1,15 @@
|
||||
output vpc-cidr {
|
||||
value = module.vpc-subnets.vpc-cidr
|
||||
}
|
||||
|
||||
output vpc-id {
|
||||
value = module.vpc-subnets.vpc_id
|
||||
}
|
||||
|
||||
output private-subnet-ids {
|
||||
value = module.vpc-subnets.private-subnet-ids
|
||||
}
|
||||
|
||||
output public-subnet-ids {
|
||||
value = module.vpc-subnets.public-subnet-ids
|
||||
}
|
13
examples/eks-lab/network/provider.tf
Normal file
13
examples/eks-lab/network/provider.tf
Normal file
@ -0,0 +1,13 @@
|
||||
provider "aws" {
|
||||
region = var.aws-region
|
||||
}
|
||||
|
||||
terraform {
|
||||
required_version = ">= 1.0"
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = ">= 3.25"
|
||||
}
|
||||
}
|
||||
}
|
16
examples/eks-lab/network/terraform.tfstate
Normal file
16
examples/eks-lab/network/terraform.tfstate
Normal file
@ -0,0 +1,16 @@
|
||||
{
|
||||
"version": 4,
|
||||
"terraform_version": "1.3.7",
|
||||
"serial": 70,
|
||||
"lineage": "ee2778d9-f9d6-f368-21c3-1a1e2778fc15",
|
||||
"outputs": {},
|
||||
"resources": [],
|
||||
"check_results": [
|
||||
{
|
||||
"object_kind": "resource",
|
||||
"config_addr": "module.vpc-subnets.module.vpc-ep.data.aws_vpc.this-vpc",
|
||||
"status": "unknown",
|
||||
"objects": null
|
||||
}
|
||||
]
|
||||
}
|
125
examples/eks-lab/network/terraform.tfstate.backup
Normal file
125
examples/eks-lab/network/terraform.tfstate.backup
Normal file
@ -0,0 +1,125 @@
|
||||
{
|
||||
"version": 4,
|
||||
"terraform_version": "1.3.7",
|
||||
"serial": 63,
|
||||
"lineage": "ee2778d9-f9d6-f368-21c3-1a1e2778fc15",
|
||||
"outputs": {},
|
||||
"resources": [
|
||||
{
|
||||
"mode": "data",
|
||||
"type": "aws_caller_identity",
|
||||
"name": "this",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"account_id": "040216112220",
|
||||
"arn": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"id": "040216112220",
|
||||
"user_id": "AIDAQSXIRFROOXYISSIEQ"
|
||||
},
|
||||
"sensitive_attributes": []
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"mode": "managed",
|
||||
"type": "aws_vpc_ipv4_cidr_block_association",
|
||||
"name": "secondary_cidr",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 0,
|
||||
"attributes": {
|
||||
"cidr_block": "100.64.0.0/16",
|
||||
"id": "vpc-cidr-assoc-023e2a1c53aa39448",
|
||||
"ipv4_ipam_pool_id": null,
|
||||
"ipv4_netmask_length": null,
|
||||
"timeouts": null,
|
||||
"vpc_id": "vpc-0ea2750f798358708"
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwfX0=",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this",
|
||||
"module.vpc-subnets.aws_vpc.vpc"
|
||||
]
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"module": "module.vpc-subnets",
|
||||
"mode": "managed",
|
||||
"type": "aws_vpc",
|
||||
"name": "vpc",
|
||||
"provider": "provider[\"registry.terraform.io/hashicorp/aws\"]",
|
||||
"instances": [
|
||||
{
|
||||
"schema_version": 1,
|
||||
"attributes": {
|
||||
"arn": "arn:aws:ec2:ap-northeast-1:040216112220:vpc/vpc-0ea2750f798358708",
|
||||
"assign_generated_ipv6_cidr_block": false,
|
||||
"cidr_block": "192.168.123.0/24",
|
||||
"default_network_acl_id": "acl-071f6e3e57003c3ea",
|
||||
"default_route_table_id": "rtb-094b1da133f919558",
|
||||
"default_security_group_id": "sg-00852e5eba267541f",
|
||||
"dhcp_options_id": "dopt-090c9f839527a4c07",
|
||||
"enable_classiclink": false,
|
||||
"enable_classiclink_dns_support": false,
|
||||
"enable_dns_hostnames": true,
|
||||
"enable_dns_support": true,
|
||||
"enable_network_address_usage_metrics": false,
|
||||
"id": "vpc-0ea2750f798358708",
|
||||
"instance_tenancy": "default",
|
||||
"ipv4_ipam_pool_id": null,
|
||||
"ipv4_netmask_length": null,
|
||||
"ipv6_association_id": "",
|
||||
"ipv6_cidr_block": "",
|
||||
"ipv6_cidr_block_network_border_group": "",
|
||||
"ipv6_ipam_pool_id": "",
|
||||
"ipv6_netmask_length": 0,
|
||||
"main_route_table_id": "rtb-094b1da133f919558",
|
||||
"owner_id": "040216112220",
|
||||
"tags": {
|
||||
"Application": "eks",
|
||||
"BuildDate": "20230217",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "lab",
|
||||
"Name": "lab-ap-xpk-iac-vpc",
|
||||
"Project": "iac",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "eks-lab/network",
|
||||
"TerraformMode": "managed"
|
||||
},
|
||||
"tags_all": {
|
||||
"Application": "eks",
|
||||
"BuildDate": "20230217",
|
||||
"CreatedBy": "arn:aws:iam::040216112220:user/ken2026",
|
||||
"Environment": "lab",
|
||||
"Name": "lab-ap-xpk-iac-vpc",
|
||||
"Project": "iac",
|
||||
"ServiceProvider": "None",
|
||||
"TerraformDir": "eks-lab/network",
|
||||
"TerraformMode": "managed"
|
||||
}
|
||||
},
|
||||
"sensitive_attributes": [],
|
||||
"private": "eyJzY2hlbWFfdmVyc2lvbiI6IjEifQ==",
|
||||
"dependencies": [
|
||||
"data.aws_caller_identity.this"
|
||||
],
|
||||
"create_before_destroy": true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"check_results": [
|
||||
{
|
||||
"object_kind": "resource",
|
||||
"config_addr": "module.vpc-subnets.module.vpc-ep.data.aws_vpc.this-vpc",
|
||||
"status": "unknown",
|
||||
"objects": null
|
||||
}
|
||||
]
|
||||
}
|
6
examples/eks-lab/network/terraform.tfvars
Normal file
6
examples/eks-lab/network/terraform.tfvars
Normal file
@ -0,0 +1,6 @@
|
||||
aws-region = "ap-northeast-1"
|
||||
aws-region-short = "apne1"
|
||||
customer-name = "xpk"
|
||||
environment = "lab"
|
||||
project = "iac"
|
||||
application = "eks"
|
6
examples/eks-lab/network/variables.tf
Normal file
6
examples/eks-lab/network/variables.tf
Normal file
@ -0,0 +1,6 @@
|
||||
variable "aws-region" {}
|
||||
variable "aws-region-short" {}
|
||||
variable "customer-name" {}
|
||||
variable "environment" {}
|
||||
variable "project" {}
|
||||
variable "application" {}
|
15
examples/eks-managed-nodegroup/README.md
Normal file
15
examples/eks-managed-nodegroup/README.md
Normal file
@ -0,0 +1,15 @@
|
||||
# eks-managed-nodegroup
|
||||
Create EKS cluster using managed nodegroup. Then performed EKS control plane upgrades.
|
||||
|
||||
## Versions and upgrade notes
|
||||
Based on 1-4 t3.medium worker node with no app pods
|
||||
|
||||
| eks-ver | coredns | kube-proxy | vpc-cni | AMI-version | upgrade notes |
|
||||
|---------|--------------------|---------------------|--------------------|------------------|---------------------------------------------------------------------|
|
||||
| 1.25 | v1.9.3-eksbuild.10 | v1.25.16-eksbuild.1 | v1.15.4-eksbuild.1 | 1.25.15-20231201 | N/A |
|
||||
| 1.26 | v1.9.3-eksbuild.10 | v1.26.11-eksbuild.1 | v1.15.4-eksbuild.1 | 1.26.10-20231201 | from 1.25, set cluster_version = "1.26". nodes are recreated. 23min |
|
||||
| 1.27 | v1.10.1-eksbuild.6 | v1.27.6-eksbuild.2 | v1.15.4-eksbuild.1 | 1.27.7-20231201 | from 1.26, set cluster_version = "1.27". nodes are recreated. 16min |
|
||||
| 1.28 | v1.10.1-eksbuild.6 | v1.28.4-eksbuild.1 | v1.15.4-eksbuild.1 | 1.28.3-20231201 | from 1.27, set cluster_version = "1.28". nodes are recreated. 26min |
|
||||
|
||||
## References
|
||||
https://repost.aws/knowledge-center/eks-plan-upgrade-cluster
|
78
examples/eks-managed-nodegroup/bastion.tf
Normal file
78
examples/eks-managed-nodegroup/bastion.tf
Normal file
@ -0,0 +1,78 @@
|
||||
module "bastion" {
|
||||
source = "terraform-aws-modules/ec2-instance/aws"
|
||||
version = "5.5.0"
|
||||
name = "lab-ken2026-eks-bastion"
|
||||
instance_type = "t3.micro"
|
||||
ami = data.aws_ami.this.id
|
||||
ignore_ami_changes = true
|
||||
subnet_id = var.subnet_ids[0]
|
||||
vpc_security_group_ids = [module.sg.id, module.eks.cluster_primary_security_group_id]
|
||||
create_iam_instance_profile = true
|
||||
iam_role_description = "IAM role for EC2 instance"
|
||||
iam_role_policies = {
|
||||
SSMManagedInstanceCore = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
|
||||
CloudwatchAgent = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
|
||||
Admin = "arn:aws:iam::aws:policy/AdministratorAccess"
|
||||
}
|
||||
key_name = "kf-key"
|
||||
ebs_optimized = true
|
||||
root_block_device = [
|
||||
{
|
||||
encrypted = true
|
||||
volume_type = "gp3"
|
||||
volume_size = 10
|
||||
},
|
||||
]
|
||||
volume_tags = data.aws_default_tags.this.tags
|
||||
# IMDSv2 requirement
|
||||
metadata_options = {
|
||||
http_endpoint = "enabled"
|
||||
http_tokens = "required"
|
||||
http_put_response_hop_limit = 2
|
||||
}
|
||||
user_data = <<EOF
|
||||
#!/bin/bash
|
||||
curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
|
||||
chmod 755 kubectl
|
||||
mv kubectl /usr/local/bin/
|
||||
EOF
|
||||
}
|
||||
|
||||
module "sg" {
|
||||
source = "../../modules/compute/security_group"
|
||||
description = "Security group for web server"
|
||||
egress = {
|
||||
r1 = "tcp,0,65535,0.0.0.0/0,Allow outbound tcp traffic"
|
||||
r2 = "udp,0,65535,0.0.0.0/0,Allow outbound udp traffic"
|
||||
r3 = "icmp,0,-1,0.0.0.0/0,Allow icmp echo reply"
|
||||
}
|
||||
ingress = {
|
||||
r1 = "icmp,8,-1,0.0.0.0/0,Allow ICMP traffic"
|
||||
}
|
||||
name = "lab-ken2026-eks-bastion-sg"
|
||||
vpc-id = var.vpc_id
|
||||
}
|
||||
|
||||
data "aws_default_tags" "this" {}
|
||||
|
||||
data "aws_ami" "this" {
|
||||
most_recent = true
|
||||
name_regex = "al2023-ami-202.*"
|
||||
|
||||
filter {
|
||||
name = "virtualization-type"
|
||||
values = ["hvm"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "root-device-type"
|
||||
values = ["ebs"]
|
||||
}
|
||||
|
||||
filter {
|
||||
name = "architecture"
|
||||
values = ["x86_64"]
|
||||
}
|
||||
|
||||
owners = ["910595266909"] # AWS
|
||||
}
|
3
examples/eks-managed-nodegroup/locals.tf
Normal file
3
examples/eks-managed-nodegroup/locals.tf
Normal file
@ -0,0 +1,3 @@
|
||||
locals {
|
||||
resource-prefix = "${var.environment}-${var.aws-region-short}-${var.customer-name}-${var.project}"
|
||||
}
|
189
examples/eks-managed-nodegroup/main.tf
Normal file
189
examples/eks-managed-nodegroup/main.tf
Normal file
@ -0,0 +1,189 @@
|
||||
provider "kubernetes" {
|
||||
host = module.eks.cluster_endpoint
|
||||
cluster_ca_certificate = base64decode(module.eks.cluster_certificate_authority_data)
|
||||
|
||||
exec {
|
||||
api_version = "client.authentication.k8s.io/v1beta1"
|
||||
command = "aws"
|
||||
# This requires the awscli to be installed locally where Terraform is executed
|
||||
args = ["eks", "get-token", "--cluster-name", module.eks.cluster_name]
|
||||
}
|
||||
}
|
||||
|
||||
module "eks" {
|
||||
source = "terraform-aws-modules/eks/aws"
|
||||
version = "19.21.0"
|
||||
|
||||
cluster_name = "lab-ken2026-eks01"
|
||||
cluster_endpoint_public_access = true
|
||||
cluster_version = "1.27"
|
||||
|
||||
cluster_addons = {
|
||||
coredns = {
|
||||
preserve = true
|
||||
most_recent = true
|
||||
|
||||
timeouts = {
|
||||
create = "25m"
|
||||
delete = "10m"
|
||||
}
|
||||
}
|
||||
kube-proxy = {
|
||||
most_recent = true
|
||||
}
|
||||
vpc-cni = {
|
||||
most_recent = true
|
||||
}
|
||||
}
|
||||
|
||||
create_kms_key = false
|
||||
cluster_encryption_config = {
|
||||
resources = ["secrets"]
|
||||
provider_key_arn = module.kms.key_arn
|
||||
}
|
||||
|
||||
iam_role_additional_policies = {
|
||||
additional = aws_iam_policy.additional.arn
|
||||
}
|
||||
|
||||
vpc_id = var.vpc_id
|
||||
subnet_ids = var.subnet_ids
|
||||
control_plane_subnet_ids = var.control_plane_subnet_ids
|
||||
|
||||
# Extend cluster security group rules
|
||||
cluster_security_group_additional_rules = {
|
||||
ingress_nodes_ephemeral_ports_tcp = {
|
||||
description = "Nodes on ephemeral ports"
|
||||
protocol = "tcp"
|
||||
from_port = 1025
|
||||
to_port = 65535
|
||||
type = "ingress"
|
||||
source_node_security_group = true
|
||||
}
|
||||
# Test: https://github.com/terraform-aws-modules/terraform-aws-eks/pull/2319
|
||||
ingress_source_security_group_id = {
|
||||
description = "Ingress from another computed security group"
|
||||
protocol = "tcp"
|
||||
from_port = 22
|
||||
to_port = 22
|
||||
type = "ingress"
|
||||
source_security_group_id = aws_security_group.additional.id
|
||||
}
|
||||
}
|
||||
|
||||
# requires terraform be ran inside VPC
|
||||
# manage_aws_auth_configmap = true
|
||||
#
|
||||
# aws_auth_roles = [
|
||||
# {
|
||||
# rolearn = module.eks_managed_node_group.iam_role_arn
|
||||
# username = "system:node:{{EC2PrivateDNSName}}"
|
||||
# groups = [
|
||||
# "system:bootstrappers",
|
||||
# "system:nodes",
|
||||
# ]
|
||||
# },
|
||||
# {
|
||||
# rolearn = "arn:aws:iam::040216112220:role/rackLE"
|
||||
# username = "rackLE"
|
||||
# groups = ["system:masters"]
|
||||
# }
|
||||
# ]
|
||||
#
|
||||
# aws_auth_users = [
|
||||
# {
|
||||
# userarn = var.eks_master_user_arn
|
||||
# username = "eksmaster"
|
||||
# groups = ["system:masters"]
|
||||
# }
|
||||
# ]
|
||||
#
|
||||
# aws_auth_accounts = [
|
||||
# data.aws_caller_identity.current.account_id
|
||||
# ]
|
||||
|
||||
}
|
||||
|
||||
module "eks_managed_node_group" {
|
||||
source = "terraform-aws-modules/eks/aws//modules/eks-managed-node-group"
|
||||
version = "19.21.0"
|
||||
|
||||
name = "eks-mng"
|
||||
cluster_name = module.eks.cluster_name
|
||||
cluster_version = module.eks.cluster_version
|
||||
|
||||
subnet_ids = var.subnet_ids
|
||||
cluster_primary_security_group_id = module.eks.cluster_primary_security_group_id
|
||||
vpc_security_group_ids = [
|
||||
module.eks.cluster_security_group_id,
|
||||
aws_security_group.additional.id
|
||||
]
|
||||
|
||||
ami_type = "AL2_x86_64"
|
||||
instance_types = ["t3.medium"]
|
||||
iam_role_additional_policies = {
|
||||
SsmInstanceCore = "arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore"
|
||||
}
|
||||
|
||||
# this will get added to what AWS provides
|
||||
bootstrap_extra_args = <<-EOT
|
||||
# extra args added
|
||||
[settings.kernel]
|
||||
lockdown = "integrity"
|
||||
|
||||
[settings.kubernetes.node-labels]
|
||||
"label1" = "foo"
|
||||
"label2" = "bar"
|
||||
EOT
|
||||
|
||||
min_size = 0
|
||||
desired_size = 1
|
||||
max_size = 2
|
||||
}
|
||||
|
||||
|
||||
module "kms" {
|
||||
source = "terraform-aws-modules/kms/aws"
|
||||
version = "~> 1.5"
|
||||
|
||||
aliases = ["eks/${local.resource-prefix}"]
|
||||
description = "${local.resource-prefix} cluster encryption key"
|
||||
enable_default_policy = true
|
||||
key_owners = [data.aws_caller_identity.current.arn]
|
||||
}
|
||||
|
||||
resource "aws_security_group" "additional" {
|
||||
name_prefix = "${local.resource-prefix}-sg"
|
||||
vpc_id = var.vpc_id
|
||||
|
||||
ingress {
|
||||
from_port = 22
|
||||
to_port = 22
|
||||
protocol = "tcp"
|
||||
cidr_blocks = [
|
||||
"10.0.0.0/8",
|
||||
"172.16.0.0/12",
|
||||
"192.168.0.0/16",
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
resource "aws_iam_policy" "additional" {
|
||||
name = "${local.resource-prefix}-policy"
|
||||
|
||||
policy = jsonencode({
|
||||
Version = "2012-10-17"
|
||||
Statement = [
|
||||
{
|
||||
Action = [
|
||||
"ec2:Describe*",
|
||||
]
|
||||
Effect = "Allow"
|
||||
Resource = "*"
|
||||
},
|
||||
]
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
data "aws_caller_identity" "current" {}
|
30
examples/eks-managed-nodegroup/provider.tf
Normal file
30
examples/eks-managed-nodegroup/provider.tf
Normal file
@ -0,0 +1,30 @@
|
||||
provider "aws" {
|
||||
region = var.aws-region
|
||||
|
||||
default_tags {
|
||||
tags = {
|
||||
ServiceProvider = "RackspaceTechnology"
|
||||
Environment = var.environment
|
||||
Project = var.project
|
||||
Application = var.application
|
||||
TerraformMode = "managed"
|
||||
TerraformDir = "${reverse(split("/", path.cwd))[1]}/${reverse(split("/", path.cwd))[0]}"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
terraform {
|
||||
required_version = ">= 1.3.0"
|
||||
required_providers {
|
||||
aws = {
|
||||
source = "hashicorp/aws"
|
||||
version = ">= 5.0"
|
||||
}
|
||||
}
|
||||
backend "s3" {
|
||||
bucket = "lab-ken2026-tf-state"
|
||||
key = "experimental/eks-upgrade-test.tfstate"
|
||||
region = "ap-east-1"
|
||||
encrypt = true
|
||||
}
|
||||
}
|
0
examples/eks-managed-nodegroup/terraform.tfstate
Normal file
0
examples/eks-managed-nodegroup/terraform.tfstate
Normal file
2389
examples/eks-managed-nodegroup/terraform.tfstate.backup
Normal file
2389
examples/eks-managed-nodegroup/terraform.tfstate.backup
Normal file
File diff suppressed because it is too large
Load Diff
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user