Slide 1

Slide 1 text

High Availability Vault Service on AWS Environment Gea-Suan Lin (DK) Director of SW Platform and Infrastructures

Slide 2

Slide 2 text

Links ● This slide: ○ https://bit.ly/3igUbgh ● AWS Summit Taiwan 2021: ○ https://aws.amazon.com/tw/events/taiwan/2021summit/ ● My wiki: ○ https://wiki.gslin.org/wiki/Vault/Install (in Chinese)

Slide 3

Slide 3 text

Explain “Migo” ● https://wiki.gslin.org/wiki/Migo

Slide 4

Slide 4 text

What is HashiCorp Vault? ● “Manage secrets and protect sensitive data” ● Usually: ○ Credentials ○ Tokens ○ … ● Sometimes: ○ Endpoint information ○ …

Slide 5

Slide 5 text

Why do people need Vault? ● Auditing. ● Credentials/tokens versioning. ● We don’t want to put credentials into Ansible and/or GitLab…

Slide 6

Slide 6 text

Today’s objectives ● High availability. ○ But I don’t want to manage HA by myself.

Slide 7

Slide 7 text

Technologies ● Amazon EC2 (Multi-AZ) ○ (or container-based services like ECS/EKS) ● Amazon DynamoDB ● AWS KMS ● AWS ELB ● AWS ACM (optional)

Slide 8

Slide 8 text

Setup DynamoDB ● Create a table called vault. ○ Primary key as Path. ○ Sort key as Key.

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

Setup KMS ● Create a key with SYMMETRIC_DEFAULT.

Slide 11

Slide 11 text

No content

Slide 12

Slide 12 text

Setup EC2 ● Create two t3a.nano or t4g.nano instances. ● We choose Ubuntu 20.04.

Slide 13

Slide 13 text

No content

Slide 14

Slide 14 text

Install Vault curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -; sudo apt-add-repository "deb https://apt.releases.hashicorp.com $(lsb_release -cs) main"; sudo apt update && sudo apt install vault

Slide 15

Slide 15 text

Setup Vault api_addr = "http://10.10.10.10:8200" cluster_addr = "http://10.10.10.10:8201" log_level = "Info" ui = true listener "tcp" { address = "0.0.0.0:8200" cluster_address = "10.10.10.10:8201" tls_disable = "true" } seal "awskms" { region = "ap-southeast-1" access_key = "x" secret_key = "x" kms_key_id = "x" } storage "dynamodb" { ha_enabled = "true" region = "ap-southeast-1" table = "vault" access_key = "x" secret_key = "x" }

Slide 16

Slide 16 text

Setup EC2 IAM Role ● Create an EC2 role. ● Attach two inline policies. ● Attach to EC2 instances.

Slide 17

Slide 17 text

EC2 IAM Role - Policy-Vault-DynamoDB { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "dynamodb:BatchGetItem", "dynamodb:BatchWriteItem", "dynamodb:PutItem", "dynamodb:DescribeTable", "dynamodb:DeleteItem", "dynamodb:GetItem", "dynamodb:Scan", "dynamodb:ListTagsOfResource", "dynamodb:Query", "dynamodb:UpdateItem", "dynamodb:DescribeTimeToLive", "dynamodb:GetRecords" ], "Resource": [ "arn:aws:dynamodb:ap-southeast-1:123456789012:table/vault/stream/*", "arn:aws:dynamodb:ap-southeast-1:123456789012:table/vault/index/*", "arn:aws:dynamodb:ap-southeast-1:123456789012:table/vault" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": [ "dynamodb:DescribeReservedCapacityOfferings", "dynamodb:ListTables", "dynamodb:DescribeReservedCapacity", "dynamodb:DescribeLimits" ], "Resource": "*" } ] }

Slide 18

Slide 18 text

EC2 IAM Role - Policy-Vault-KMS { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "kms:Decrypt", "kms:Encrypt", "kms:DescribeKey" ], "Resource": "arn:aws:kms:ap-southeast-1:123456789012:key/01234567-89ab-cdef-0123-456789abcdef" } ] }

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

Setup ELB ● Choose ALB ● /v1/sys/health as health check path. ● Backend in port 8200. ● Frontend in port 80. ○ Recommend to use ACM for HTTPS (port 443).

Slide 21

Slide 21 text

Start Vault sudo systemctl enable vault; sudo service vault start

Slide 22

Slide 22 text

Initialization # Remember to write down the root token vault operator init \ -recovery-shares=1 \ -recovery-threshold=1 \ -address=http://127.0.0.1:8200

Slide 23

Slide 23 text

Now it’s working ● http://vault.example.com/ ○ https://vault.example.com/ (HTTPS)

Slide 24

Slide 24 text

Monitoring ● Cloudwatch ○ ELB (ALB) ○ EC2 ○ DynamoDB ○ KMS

Slide 25

Slide 25 text

That’s it… ● Q&A after sessions. ● And we’re hiring!