Vault API 인증은 X-Vault-Token 헤더와 함께 Vault 토큰으로 수행됩니다.
볼트 컨피그를 구성하고 프로덕션 서버 시작하기
"Prod" 모드에서 Vault 서버를 실행하려면 여러 단계를 거쳐야 합니다.
Vault configuration files 은 HCL 또는 JSON으로 지정할 수 있습니다.
listener
seal
uicluster_addr
api_addr
log_level
storage
일반적인 구성 설정은 다음과 같습니다.
서버를 시작합니다.
Unseal keys와 initial root token을 얻기 위해 서버를 초기화합니다.
Unseal keys로 Vault 서버의 봉인을 해제합니다.
-dev 옵션 없이 vault server 명령어로 Production 서버를 시작합니다.
Config file에서 구성을 지정합니다.
볼트 클러스터 초기화하기
Vault 클러스터는 여러 Vault 서버를 실행하여 구성합니다.이는 Vault의 vault operator init 으로 수행됩니다.이 명령은 클러스터에 대한 unseal keys와 initial root token을 반환합니다.
키 공유 수와 키 임계값은 –key-shares 및 key-threshold 옵션을 사용하여 지정할 수 있습니다.
각 Vault 클러스터는 한 번 초기화해야 합니다.
각 Vault 서버는 시작할 때마다 봉인(Seal)을 해제해야 합니다.이는 클러스터를 초기화할 때 반환된 unseal keys를 사용하여 vault operator unseal 명령어로 수행됩니다.
봉인을 해제할 때까지 서버를 사용할 수 없습니다.
vault status 명령어로 상태 확인 가능하며 봉인 되었는지 아닌지 확인 가능합니다.
$ vault status
WARNING! VAULT_ADDR and -address unset. Defaulting to https://127.0.0.1:8200.
Error checking seal status: Get "https://127.0.0.1:8200/v1/sys/seal-status": http: server gave HTTP response to HTTPS client
$export VAULT_ADDR='http://127.0.0.1:8200'# no tls for this test demo$ vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.17.0
Build Date 2024-06-10T10:11:34Z
Storage Type inmem
Cluster Name vault-cluster-445bxxxx
Cluster ID 6748b197-b91c-89a2-36f3-a78cxxxxxxxx
HA Enabled false
볼트 시크릿 엔진
대부분의 Vault 비밀 엔진은 명시적으로 활성화해야 합니다.각 비밀 엔진에는 기본 경로가 있습니다.그러면 CLI 명령 및 API 호출에서 사용자 지정 경로를 지정해야 합니다. vault write aws/config/root 대신 vault write aws-east/config/root
여러 인스턴스를 활성화하기 위해 대체 경로(path)를 지정할 수 있습니다. vault secrets enable -path=aws-east aws
vault secrets enable 명령어로 수행됩니다.
볼트 엔진 버전은 현재 두가지가 있습니다.
KV v1(버전 관리 없음)
KV v2(버전 관리 포함)
Dev mode는 Vault 서버에 대해 KV v2 엔진의 인스턴스가 자동으로 활성화됩니다.
Vault는 "Prod" mode 서버에서 KV 시크릿 엔진의 인스턴스를 자동으로 활성화하지 않습니다. 따라서 직접 활성화해야 합니다.
기본 경로 kv에 KV v2 secrets 엔진의 인스턴스를 마운트하는 방법 vault secrets enable -version=2 kv
vault kv list는 지정된 경로에 있는 보안 비밀을 나열합니다.vault kv get은 지정된 경로에서 보안 비밀을 읽습니다.
vault kv delete는 지정된 경로에서 보안 비밀을 삭제합니다.
vault kv put은 지정된 경로에 보안 비밀을 작성합니다.
볼트 인증
볼트 인증 방법은 유저, 어플리케이션 대상 두가지로 나눠져 있습니다.
Methods for UsersGitHubJWT/OIDC
Okta
LDAP
Userpass
Methods for ApplicationsAWSGoogle Cloud
Kubernetes
Azure
AppRole
대부분의 Vault 인증 방법은 명시적으로 활성화해야 합니다.각 인증 방법에는 기본 경로가 있습니다.CLI 명령 및 API 호출에서 사용자 지정 경로를 지정해야 합니다. vault write aws/config/root 대신 vault write aws-east/config/root
여러 인스턴스를 활성화하기 위해 대체 경로를 지정할 수 있습니다. vault auth enable -path=aws-east aws
이는 vault auth enable 명령어로 수행됩니다.
볼트 정책(Policy)
Vault Policies는 사용자와 애플리케이션이 액세스할 수 있는 secrets (비밀) 을 제한합니다.
Vault는 기본적으로 액세스를 거부하는 최소 권한 관행을 따릅니다.
Vault 관리자는 정책 설명을 사용하여 특정 경로에 대한 사용자 및 애플리케이션 액세스 권한을 명시적으로 부여해야 합니다.
경로를 지정하는 것 외에도 정책은 해당 경로에 대한 기능 집합도 지정합니다.
Policies 는 HashiCorpConfiguration Language (HCL)로 작성됩니다.
예시:
# Allow tokens to look up their own properties
path "auth/token/lookup-self" {
capabilities = ["read"]
}
정책 경로는 Vault API 경로에 매핑됩니다.
Vault의 CLI, UI 또는 API를 사용하여 Vault 서버에 Vault 정책을 추가할 수 있습니다.
$ vault server -dev
==> Vault server configuration:
Administrative Namespace:
Api Address: http://127.0.0.1:8200
Cgo: disabled
Cluster Address: https://127.0.0.1:8201
Environment Variables: BASH_FUNC_which%%, DBUS_SESSION_BUS_ADDRESS, GOTRACEBACK, HISTCONTROL, HISTSIZE, HOME, HOSTNAME, LANG, LESSOPEN, LOGNAME, LS_COLORS, MAIL, MOTD_SHOWN, NVM_BIN, NVM_CD_FLAGS, NVM_DIR, NVM_INC, NVM_RC_VERSION, OLDPWD, PATH, PWD, SELINUX_LEVEL_REQUESTED, SELINUX_ROLE_REQUESTED, SELINUX_USE_CURRENT_RANGE, SHELL, SHLVL, SSH_CLIENT, SSH_CONNECTION, SSH_TTY, SYSTEMD_COLORS, S_COLORS, TERM, USER, XDG_RUNTIME_DIR, XDG_SESSION_CLASS, XDG_SESSION_ID, XDG_SESSION_TYPE, _, which_declare
Go Version: go1.22.4
Listener 1: tcp (addr: "127.0.0.1:8200", cluster address: "127.0.0.1:8201", disable_request_limiter: "false", max_request_duration: "1m30s", max_request_size: "33554432", tls: "disabled")
Log Level:
Mlock: supported: true, enabled: false
Recovery Mode: false
Storage: inmem
Version: Vault v1.17.0, built 2024-06-10T10:11:34Z
Version Sha: 72850df1bc10581b74ba5f0f7b3xxxxxxxx
==> Vault server started! Log data will stream in below:
...
WARNING! dev mode is enabled! In this mode, Vault runs entirely in-memory
and starts unsealed with a single unseal key. The root token is already
authenticated to the CLI, so you can immediately begin using Vault.
You may need to set the following environment variables:
$ export VAULT_ADDR='http://127.0.0.1:8200'
The unseal key and root token are displayed below in case you want to
seal/unseal the Vault or re-authenticate.
Unseal Key: lS0Xa99RlRkP/g2reElBKYhnJggXcOtxxxxxxxxx
Root Token: hvs.EI1TksGnXihdxxxxxxxx
Development mode should NOT be used in production installations!
볼트 서버 상태를 확인합니다.
$export VAULT_ADDR='http://127.0.0.1:8200'$ vault status
Key Value
--- -----
Seal Type shamir
Initialized true
Sealed false
Total Shares 1
Threshold 1
Version 1.17.0
Build Date 2024-06-10T10:11:34Z
Storage Type inmem
Cluster Name vault-cluster-44xxxxx
Cluster ID 6748b197-b91c-89a2-36f3-axxxxxxxx
HA Enabled false
key value 로 시크릿을 생성하기 위해 kv 명령어를 실행합니다.
$ vault kv put -mount=secret hello team=banana
== Secret Path ==
secret/data/hello
======= Metadata =======
Key Value
--- -----
created_time 2024-06-23T06:53:49.203123729Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 1
dev 모드로 볼트 서버를 시작한 경우, 기본 Mount path은 자동으로 생성됩니다.
data hello가 secret/data/hello 로 key value 로 마운트 되었습니다.
kv put으로 여러 key value를 입력할 수 있습니다.
$ vault kv put -mount=secret hello team=banana homework=yes
== Secret Path ==
secret/data/hello
======= Metadata =======
Key Value
--- -----
created_time 2024-06-23T06:57:10.424550787Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 2
이제 시크릿을 get 으로 읽어봅니다.
$ vault kv get -mount=secret hello
== Secret Path ==
secret/data/hello
======= Metadata =======
Key Value
--- -----
created_time 2024-06-23T06:57:10.424550787Z
custom_metadata <nil>
deletion_time n/a
destroyed false
version 2
====== Data ======
Key Value
--- -----
homework yes
team banana
특정 키의 value 값만 읽습니다. 옵션과 명령어 넣을때 순서를 인식합니다.
$ vault kv get -mount=secret hello -field=homework
Command flags must be provided before positional arguments. The following arguments will not be parsed as flags: [-field=homework]
Too many arguments (expected 1, got 2)
$ vault kv get -mount=secret -field=homework hello
yes
이제 AWS 엔진을 활성화 하고 동적 AWS 시크릿을 생성해 봅니다.
동적 비밀은 액세스할 때 생성됩니다. 동적 시크릿은 읽을 때까지 존재하지 않으므로 누군가가 이를 훔치거나 동일한 비밀을 사용하는 다른 클라이언트가 발생할 위험이 없습니다.
Vault에는 취소 메커니즘이 내장되어 있으므로 동적 시크릿은 사용 후 즉시 취소되어 비밀이 존재하는 시간을 최소화할 수 있습니다.
참고로 STS 페더레이션 토큰을 사용하려는 경우 IAM 역할 자격 증명으로 볼트를 인증할 수 없습니다.
역할과 연결된 임시 보안 자격 증명에는 GetFederationToken을 사용할 권한이 없기 때문입니다.
대안으로 identity token audience 를 사용하는 방법이 있는데 무료 커뮤니티 버전은 지원이 안됩니다.
$ vault write aws/config/root \
identity_token_audience="http://127.0.0.1:8200" \
role_arn="arn:aws:iam::539666729110:role/gepp-demo01-ssm-assume-ec2-role"
Error writing data to aws/config/root: Error making API request.
URL: PUT http://127.0.0.1:8200/v1/aws/config/root
Code: 400. Errors:
* failed to generate plugin identity token: plugin workload identity not supported in Vault community edition
export 한 access key value를 써서 구성해봅니다.
$ vault write aws/config/root \
access_key=$AWS_ACCESS_KEY_ID \
secret_key=$AWS_SECRET_ACCESS_KEY \
region=ap-southeast-1
Success! Data written to: aws/config/root
이제 IAM Role을 생성해봅니다. 크레덴셜이 가리키는 유저가 수행할 역할이며 ec2 에 대한 권한을 주었습니다.
이제 명령어 pulumi new aws-typscript 를 사용하여 새 프로젝트를 생성합니다.
$ pulumi new aws-typescript
Manage your Pulumi stacks by logging in.
Run `pulumi login --help` for alternative login options.
Enter your access token from https://app.pulumi.com/account/tokens
or hit to log inusing your browser :
Welcome to Pulumi!
Pulumi helps you create, deploy, and manage infrastructure onany cloud using
your favorite language. You can get started today with Pulumi at:
https://www.pulumi.com/docs/get-started/
Tip: Resources you createwith Pulumi are given unique names (a randomly
generated suffix) by default. To learn more about auto-naming or customizing resource
names see https://www.pulumi.com/docs/intro/concepts/resources/#autonaming.
This command will walk you through creating a new Pulumi project.
Enter a valueor leave blank to accept the (default), and press .
Press ^C atanytimeto quit.
project name (project): aws-create-s3-with-ts
project description (A minimal AWS TypeScript Pulumi program): cnp demo for pulumi
Created project 'aws-create-s3-with-ts'
Please enter your desired stack name.
Tocreate a stack in an organization, use the format / (e.g. `acmecorp/dev`).
stack name (dev): dev
Created stack 'dev'
The packagemangager to use for installing dependencies npm
aws:region: The AWS region to deploy into (us-east-1): ap-southeast-1
Saved config
Installing dependencies...
added 422 packages, and audited 423 packages in4m
60 packages are looking for funding
run `npm fund` for details
found 0 vulnerabilities
Finished installing dependencies
Your new project is ready to go!To perform an initial deployment, run `pulumi up`
$ ls
Pulumi.dev.yaml Pulumi.yaml index.ts node_modules package-lock.json package.json tsconfig.json
$ cat index.ts
import * as pulumi from "@pulumi/pulumi";
import * as aws from "@pulumi/aws";
import * as awsx from "@pulumi/awsx";
// Create an AWS resource (S3 Bucket)
const bucket = new aws.s3.Bucket("gepp-demo01-pulumi-test-bucket01");
// Export the name of the bucket
export const bucketName = bucket.id;
aws 에러를 피하기 위해 pulumi up을 하기전에 먼저 크레덴셜이 정상적으로 s3 리소스로 접근 가능한지 테스트 해봅니다.
aws s3 ls
이제 스택 배포 및 버킷 생성을 하기 위해 pulumi up 명령어를 실행합니다.
$ pulumi up
Previewing update (dev)
View in Browser (Ctrl+O): https://app.pulumi.com/INSANECRAB/aws-create-s3-with-ts/dev/previews/b929de47-a0e9-4f72-88c4-7ddexxxxxxx
Type Name Plan
+ pulumi:pulumi:Stack aws-create-s3-with-ts-dev create
+ └─ aws:s3:Bucket gepp-demo01-pulumi-test-bucket01 create
Outputs:
bucketName: output
Resources:
+ 2 to create
Do you want to perform this update? yes
Updating (dev)
View in Browser (Ctrl+O): https://app.pulumi.com/INSANECRAB/aws-create-s3-with-ts/dev/updates/1
Type Name Status
+ pulumi:pulumi:Stack aws-create-s3-with-ts-dev created (7s)
+ └─ aws:s3:Bucket gepp-demo01-pulumi-test-bucket01 created (1s)
Outputs:
bucketName: "gepp-demo01-pulumi-test-bucket01-ffa34xx"
Resources:
+ 2 created
Duration: 9s
$ aws s3 ls | grep gepp-demo
2024-06-23 15:36:30 gepp-demo01-pulumi-test-bucket01-ffa34xx
Pulumi Console 에서 방금 배포한 내용이 확인됩니다.
참고 문서
dynamic credentials with AWS OIDC 를 위해 pulumi yaml 에 아래와 같은 설정을 추가할 수도 있습니다.
Service Mesh는 마이크로서비스 아키텍처에서 서비스 간의 통신을 관리하는 인프라 계층입니다.
즉 서비스 간의 상호작용을 더욱 효율적이고 안전하게 만들기 위해 다양한 기능을 제공합니다.
Service Mesh는 주로 다음과 같은 기능을 포함합니다:
트래픽 관리: 서비스 간의 트래픽을 제어하고 라우팅합니다. 이를 통해 A/B 테스트, 카나리아 배포, 트래픽 분할 등을 쉽게 구현할 수 있습니다. 서비스 디스커버리: 서비스 인스턴스가 동적으로 변경될 때 이를 자동으로 감지하고 업데이트합니다. 로드 밸런싱: 서비스 요청을 여러 인스턴스에 고르게 분산시켜 시스템의 부담을 줄입니다. 보안: 서비스 간 통신을 암호화하고 인증을 관리하여 보안성을 높입니다. 모니터링 및 로깅: 서비스 간의 통신 데이터를 수집하고 분석하여 성능 문제를 파악하고 문제를 해결하는 데 도움을 줍니다. 정책 관리: 서비스 간의 통신 규칙을 설정하고 적용합니다. ETC: 또한 서비스 메시는 A/B 테스트, 카나리아 배포, 속도 제한, 액세스 제어, 암호화, 엔드투엔드 인증과 같은 보다 복잡한 운영 요구 사항을 해결하는 경우도 있습니다. Service Mesh는 일반적으로 사이드카 패턴을 사용하여 구현됩니다. 각 서비스 인스턴스 옆에 프록시(사이드카 프록시)를 배치하고, 이 프록시가 서비스 간의 모든 트래픽을 처리합니다.
이를 통해서 애플리케이션 코드의 변경 없이 통신 기능을 추가할 수 있습니다.
대표적인 Service Mesh 솔루션으로는 Istio, Linkerd, Consul 등이 있습니다.
$ helm status istiod -n istio-system
NAME: istiod
LAST DEPLOYED: Fri Jan 20 22:00:44 2023
NAMESPACE: istio-system
STATUS: deployed
REVISION: 1
TEST SUITE: None
NOTES:
"istiod" successfully installed!
또한 Istio 는 istioctl 명령어를 제공하여, 해당 명령어로 설치할 수도 있습니다.
설치하고 나중에 어플리케이션 배포하면 Istio가 Envoy sidecar 프록시를 주입시키도록 라벨을 정할 수 있습니다.
$ curl -L https://istio.io/downloadIstio | sh -
$ cd istio-<version>
$ export PATH=$PWD/bin:$PATH
$ istioctl install --set profile=demo -y
# Add a namespace label to instruct Istio to automatically inject Envoy sidecar proxies
$ kubectl label namespace default istio-injection=enabled
애플리케이션 배포 후, 바깥쪽에서 접근 가능하게 하여 서비스 메쉬 엣지로 라우팅할 수 있도록 path를 맵핑하는
Istio Ingress Gateway를 설정합니다.
kubectl apply -f samples/bookinfo/networking/bookinfo-gateway.yaml
gateway.networking.istio.io/bookinfo-gateway created
virtualservice.networking.istio.io/bookinfo created
# check the config
$ istioctl analyze
✔ No validation issues found when analyzing namespace: default.
# check if there's external load balancer to support
kubectl get svc istio-ingressgateway -n istio-system
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
istio-ingressgateway LoadBalancer 172.21.109.129 130.211.10.121 80:31380/TCP,443:31390/TCP,31400:31400/TCP 17h
bookinfo-gateway.yaml
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: bookinfo-gateway
spec:
# The selector matches the ingress gateway pod labels.# If you installed Istio using Helm following the standard documentation, this would be "istio=ingress"
selector:
istio: ingressgateway # use istio default controller
servers:
- port:
number: 8080
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: bookinfo
spec:
hosts:
- "*"
gateways:
- bookinfo-gateway
http:
- match:
- uri:
exact: /productpage
- uri:
prefix: /static
- uri:
exact: /login
- uri:
exact: /logout
- uri:
prefix: /api/v1/products
route:
- destination:
host: productpage
port:
number: 9080
Aqua Security와 Trivy는 모두 컨테이너 이미지의 보안을 강화하기 위한 도구들입니다. Aqua Security는 엔터프라이즈급 보안 솔루션으로 컨테이너 및 서버리스 환경에서의 보안을 제공하며, Trivy는 오픈소스 취약점 스캐너로서 컨테이너 이미지의 취약점을 검사합니다.
Aqua Security 홈페이지 소개글:
Aqua Security는 애플리케이션 라이프사이클 전반에 걸쳐 클라우드 네이티브 공격을 차단하고 이를 보장하는 100만 달러의 클라우드 네이티브 보호 보증을 제공하는 유일한 회사입니다. 클라우드 네이티브 보안의 선구자인 Aqua는 고객이 비즈니스의 미래를 구축하는 동시에 위험을 줄일 수 있도록 지원합니다. Aqua Platform은 업계에서 가장 통합된 CNAPP(클라우드 네이티브 애플리케이션 보호 플랫폼)으로, 코드에서 클라우드까지 애플리케이션 라이프사이클을 보호합니다. 2015년에 설립된 Aqua는 매사추세츠주 보스턴과 일리노이주 라마트 간(Ramat Gan)에 본사를 두고 있으며 40개국 이상에서 Fortune 1000대 고객을 보유하고 있습니다.
Overview
Aqua Security는 컨테이너 기반 애플리케이션의 전반적인 보안을 담당하는 플랫폼입니다.
주요 기능으로는 이미지 보안 스캔, 런타임 보호, 네트워크 보안, 엑세스 제어, 보안 정책 관리 등이 있습니다.
Aqua는 DevOps 툴체인과 통합되어 CI/CD 파이프라인에서 보안 검사를 자동화하고,
컨테이너화된 애플리케이션의 보안 관리를 중앙 집중화합니다.
How to use
헬름 명령어로 쉽게 설치할 수 있습니다.
helm repo add aqua https://helm.aquasec.com
helm repo update
helm install aqua aqua/aqua \
--namespace aqua \
--set licenseToken=<your-license-token> \
--set adminPassword=<admin-password> \
--set database.storageClassName=<storage-class>
Aqua Security 설치 후, Aqua Console에 접속하여 이미지 스캔, 보안 정책 설정, 이벤트 모니터링 등을 수행할 수 있습니다.
Aqua Security는 Kubernetes에서 동작하며, 통합된 CLI 및 API를 제공하여 컨테이너 및 클러스터의 보안 상태를 관리할 수 있습니다.
Trivy
Trivy는 컨테이너 이미지의 취약점을 검사하는 오픈소스 도구입니다.
특히 빠르고 강력한 취약점 데이터베이스를 기반으로 하여,
컨테이너 이미지의 OS 패키지 취약점, 애플리케이션 취약점 등을 식별하고 보고할 수 있습니다.
Trivy는 개발자와 운영팀이 이미지를 빌드하고 배포하기 전에 보안 검사를 수행하는 데 유용합니다.
Trivy 사이트 소개글
Trivy는 가장 인기 있는 오픈 소스 보안 스캐너로, 안정적이고 빠르며 사용하기 쉽습니다. Trivy를 사용하여 취약점 및 IaC 구성 오류, SBOM 검색, 클라우드 스캐닝, Kubernetes 보안 위험 등을 찾아보세요.
How to install and use
Trivy를 설치 시 binary 형태로 다운받거나 Docker로 설치할 수 있습니다.
도커 이미지로 Trivy 실행하기
docker pull aquasec/trivy
docker pull aquasec/trivy:0.18.3
docker run --rm -v /var/run/docker.sock:/var/run/docker.sock aquasec/trivy <image-name>
docker run --rm -v [YOUR_CACHE_DIR]:/root/.cache/ aquasec/trivy:0.18.3 [YOUR_IMAGE_NAME]
# MacOS
docker run --rm -v $HOME/Library/Caches:/root/.cache/ aquasec/trivy:0.18.3 python:3.4-alpine
sudo apt-get install wget apt-transport-https gnupg lsb-release
wget -qO - https://aquasecurity.github.io/trivy-repo/deb/public.key | sudo apt-key add -
echo deb https://aquasecurity.github.io/trivy-repo/deb $(lsb_release -sc) main | sudo tee -a /etc/apt/sources.list.d/trivy.list
sudo apt-get update
sudo apt-get install trivy
# Or below
wget https://github.com/aquasecurity/trivy/releases/download/v0.18.3/trivy_0.18.3_Linux-64bit.deb
sudo dpkg -i trivy_0.18.3_Linux-64bit.deb
Binary로 다운로드하여 사용하기
wget https://github.com/aquasecurity/trivy/releases/download/v0.19.2/trivy_0.19.2_Linux-64bit.tar.gz
tar zxvf trivy_0.19.2_Linux-64bit.tar.gz
./trivy image <image-name>
# Or use the script depending on your env
curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin v0.18.3
What are the major leaders in infrastructure automation technologies?
AWS CloudFormation: AWS CloudFormation is Amazon Web Services' (AWS) native IaC service that allows users to create and manage AWS resources using JSON or YAML templates.
Google Cloud Deployment Manager: Similar to CloudFormation, Google Cloud Deployment Manager enables the creation and management of Google Cloud Platform (GCP) resources through configuration files.
Azure Resource Manager (ARM) Templates: Microsoft Azure's ARM Templates provide IaC capabilities for defining and managing Azure resources.
Ansible: Ansible is an open-source automation tool that supports IaC for provisioning, configuration management, and application deployment.
Chef: Chef is another open-source automation platform that enables configuration management and infrastructure automation.
Puppet: Puppet is a configuration management tool that helps manage the state of IT infrastructure through code.
Jenkins: Jenkins is an open-source automation server that can be used for continuous integration and continuous deployment (CI/CD) pipelines.
GitLab CI/CD: GitLab provides built-in CI/CD capabilities for automating the deployment and testing of applications using GitLab's infrastructure.
A brief description of some of HashiCorp key services
Terraform: Terraform is an infrastructure as code (IaC) tool that enables users to define and manage cloud infrastructure using a declarative configuration language. With Terraform, you can create, modify, and destroy infrastructure resources across various cloud providers, data centers, and services, all in a version-controlled and repeatable manner.
Consul: Consul is a service networking platform that provides features for service discovery, health checking, and key-value storage. It simplifies the management of distributed applications and microservices by enabling them to locate and communicate with each other reliably.
Vault: Vault is a secrets management tool that securely stores, accesses, and manages sensitive data, such as passwords, tokens, and encryption keys. It ensures that applications and services can access secrets securely without hardcoding or exposing them.
Nomad: Nomad is a lightweight and flexible job scheduler and orchestrator. It allows users to deploy and manage applications across various infrastructure platforms, including virtual machines, containers, and bare-metal servers.
Packer: Packer is a tool for creating machine images for various platforms, such as Amazon EC2, Microsoft Azure, and Docker. It automates the process of creating consistent, ready-to-use machine images, ensuring that environments are reproducible and scalable.
Vagrant: Vagrant is a development environment automation tool that simplifies the setup and configuration of virtual development environments. It allows developers to create and share reproducible development environments easily.