diff --git a/docs/GETTING_STARTED.md b/docs/GETTING_STARTED.md index 88198a2..3b11446 100644 --- a/docs/GETTING_STARTED.md +++ b/docs/GETTING_STARTED.md @@ -15,9 +15,9 @@ `baseca` gRPC Server: -- Option 1: [Build and Run baseca as Container](#3a-run-baseca-as-container-option-a) -- Option 2: [Compile baseca as Executable (amd64)](#3b-compile-baseca-as-executable-option-b) -- Option 3: [Run baseca as One-Off Execution](#3c-run-baseca-as-one-off-execution-option-c) +- Option 1: [Run baseca as One-Off Execution](#3a-run-baseca-as-one-off-execution-local-development) +- Option 2: [Build and Run baseca as Container](#3b-run-baseca-as-container-production-deployment) +- Option 3: [Compile baseca as Executable (amd64)](#3c-compile-baseca-as-executable-custom-production-build) `Signing` x.509 Certificate: @@ -29,14 +29,23 @@ Each organization will have different Public Key Infrastructure topologies depending on its needs; for your PKI to be compatible with `baseca` (a) Certificate Authorities must be AWS Private CA and (b) there must be a minimum [PathLen](https://docs.aws.amazon.com/privateca/latest/userguide/PcaTerms.html#terms-pathlength) depending on where `baseca` issues the Subordinate CA from. Designing a Public Key Infrastructure is out of scope of this document, but we will take a look at topologies that `baseca` is compatible with below: -- Option 1: Root CA (Self-Managed) → Intermediate CA (AWS): Minimum PathLen2 on Root CA, PathLen1 on Intermediate CA (Higher Complexity, Recommended) +- **Option 1:** Root CA Per Environment (Self-Managed) → Intermediate CA (AWS): Minimum PathLen2 on Root CA, PathLen1 on Intermediate CA (Highest Complexity, Recommended) -- Option 2: Root CA (AWS) → Intermediate CA (AWS): Minimum PathLen2 on Root CA, PathLen1 on Intermediate CA (Lower Complexity, Recommended) + -- Option 3: Root CA (AWS) → No AWS Intermediate CA: Minimum PathLen1 on Root CA (Not Recommended) +- **Option 2:** Root CA (Self-Managed) → Intermediate CA (AWS): Minimum PathLen2 on Root CA, PathLen1 on Intermediate CA (Higher Complexity, Recommended) -_PKI Architecture Example: Option 1_ - + + +- **Option 3:** Root CA (AWS) → Intermediate CA (AWS): Minimum PathLen2 on Root CA, PathLen1 on Intermediate CA (Lower Complexity, Recommended) + + + +- **Option 4:** Root CA (AWS) → No AWS Intermediate CA: Minimum PathLen1 on Root CA (Not Recommended) + +_Note: If this approach is used onle a single environment can be supported._ + + ## Build Infrastructure @@ -57,6 +66,8 @@ tfenv use 1.4.2 **DISCLAIMER**: `DO NOT` use Private CA(s) that are used within your organization's `PRODUCTION` environment for this `GETTING_STARTED.md` document, this is meant to build a local development environment. For production deployments please refer to [`PRODUCTION_DEPLOYMENT.md`](PRODUCTION_DEPLOYMENT.md). ```sh +# /path/to/baseca/terraform/development/baseca.tf + module "baseca" { source = "./baseca" service = "baseca" @@ -148,7 +159,26 @@ VALUES (uuid_generate_v4(), 'example@example.com', crypt('ADMIN_CREDENTIALS', ge docker exec -it baseca psql -U root -d baseca -a -f db/init/init-docker.sql ``` -### 3a. Run baseca as Container (Option A) +### 3a. Run baseca as One-Off Execution (Local Development) + +_This step is recommended for local testing and getting `baseca` running most quickly._ + +Update the configuration file `config.primary.local.sandbox.yml` + +```yml +# Update config.primary.local.sandbox.yml +database_endpoint: localhost +database_reader_endpoint: localhost +ssl_mode: disable +``` + +Start the Golang `baseca` gRPC Server + +```sh +database_credentials=secret go run cmd/baseca/server.go +``` + +### 3b. Run baseca as Container (Production Deployment) _This step is recommended for production deployments using the standard Dockerfile that is provided for baseca._ @@ -175,7 +205,7 @@ docker run -p 9090:9090 -e database_credentials=secret -v ~/.aws/:/home/baseca/. -v /path/to/local/baseca/config:/home/baseca/config ghcr.io/coinbase/baseca:VERSION_SHA ``` -### 3b. Compile `baseca` as Executable (Option B) +### 3c. Compile `baseca` as Executable (Custom Production Build) _This step is recommended for users that may want build the binary and then deploy their own custom container._ @@ -200,25 +230,6 @@ GOOS=linux GOARCH=amd64 go build -o target/bin/linux/baseca cmd/baseca/server.go database_credentials=secret ./target/bin/linux/baseca ``` -### 3c. Run baseca as One-Off Execution (Option C) - -_This step is recommended for local testing and getting `baseca` running most quickly._ - -Update the configuration file `config.primary.local.sandbox.yml` - -```yml -# Update config.primary.local.sandbox.yml -database_endpoint: localhost -database_reader_endpoint: localhost -ssl_mode: disable -``` - -Start the Golang `baseca` gRPC Server - -```sh -database_credentials=secret go run cmd/baseca/server.go -``` - ## Signing x.509 Certificate Start the `baseca` gRPC server via the preferred method within the [Local Deployment](#local-deployment) section and then run the [`baseca.v1.Account/LoginUser`](ENDPOINTS.md#basecav1accountloginuser) RPC method. @@ -230,8 +241,8 @@ Authenticate with the `ADMIN` user created from the [`Create Initial Admin User` ```sh grpcurl -vv -plaintext \ -d '{ - "username": "[USERNAME]", - "password": "[PASSWORD]" + "username": "example@example.com", + "password": "ADMIN_CREDENTIALS" }' \ localhost:9090 baseca.v1.Account/LoginUser diff --git a/docs/images/public_key_infrastructure.png b/docs/images/public_key_infrastructure.png deleted file mode 100644 index 255ec46..0000000 Binary files a/docs/images/public_key_infrastructure.png and /dev/null differ diff --git a/docs/images/public_key_infrastructure_option_1.png b/docs/images/public_key_infrastructure_option_1.png new file mode 100644 index 0000000..6a2090e Binary files /dev/null and b/docs/images/public_key_infrastructure_option_1.png differ diff --git a/docs/images/public_key_infrastructure_option_2.png b/docs/images/public_key_infrastructure_option_2.png new file mode 100644 index 0000000..64c49b2 Binary files /dev/null and b/docs/images/public_key_infrastructure_option_2.png differ diff --git a/docs/images/public_key_infrastructure_option_3.png b/docs/images/public_key_infrastructure_option_3.png new file mode 100644 index 0000000..3bbb350 Binary files /dev/null and b/docs/images/public_key_infrastructure_option_3.png differ diff --git a/docs/images/public_key_infrastructure_option_4.png b/docs/images/public_key_infrastructure_option_4.png new file mode 100644 index 0000000..9a5283b Binary files /dev/null and b/docs/images/public_key_infrastructure_option_4.png differ diff --git a/terraform/development/baseca.tf b/terraform/development/baseca.tf new file mode 100644 index 0000000..ea0c451 --- /dev/null +++ b/terraform/development/baseca.tf @@ -0,0 +1,8 @@ +module "baseca" { + source = "./baseca" + service = "baseca" + environment = "development" + region = "us-east-1" + key_spec = "RSA_4096" + bucket = "baseca-firehose-example" +}