본문 바로가기

리눅스

[draft] Vault를 사용하여 SSH 인증을 관리하는 방법

728x90

Vault를 사용하여 SSH 인증을 관리하는 방법(ssh authentication)

테스트 환경

호스트 이름 아이피 역할 운영체제 비고
node141 192.168.0.141 vault server ubuntu 24.04  
node142 192.168.0.142 ssh server ubuntu 22.04  
node143 192.168.0.143 ssh client ubuntu 22.04  

출처-https://www.pacewisdom.com/blog/wp-content/uploads/2020/12/VaultImage.png

Vault 데이터 디렉터리 초기화 및 서버 재시작

sudo systemctl stop vault
sudo rm -rf /opt/vault
더보기

---

GPG 키와 저장소 추가

wget -O- https://apt.releases.hashicorp.com/gpg \
    | sudo gpg --dearmor --yes -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" \
    | sudo tee /etc/apt/sources.list.d/hashicorp.list

Vault 설치

sudo apt update
sudo apt install -y vault
vault version

Vault 설정 파일 구성

sudo tee /etc/vault.d/vault.hcl > /dev/null <<EOF
ui = true

storage "file" {
  path = "/opt/vault/data"
}

# HTTP listener
listener "tcp" {
  address = "0.0.0.0:8200"
  tls_disable = 1
}
EOF

Vault 서비스 시작 및 확인

sudo systemctl enable --now vault
sudo systemctl restart vault
sudo systemctl status vault

Vault 서비스 로그 확인

sudo journalctl -xeu vault
sudo journalctl -u vault -b

---

sudo mkdir -pv /opt/vault/data
sudo chown -R vault.vault /opt/vault
sudo systemctl start vault
sudo systemctl status vault

Vault 초기화 및 언실

환경변수 설정

echo "export VAULT_ADDR=http://127.0.0.1:8200" >> ~/.bashrc
source ~/.bashrc

seal 상태 확인

vault status

Vault 초기화(Initialize Vault)

vault operator init -key-shares=1 -key-threshold=1 | tee vault-init-$(date +"%Y%m%d-%H%M%S").txt

Vault UI 접속

http://192.168.0.141:8200

unseal 및 로그인

vault operator unseal {Unseal Key}

vault operator unseal yR+JSTCt2nXZI0axjiu3kQp1TPSP2XpDMGv1+WbYw/8=

vault login {Initial Root Token}

vault login hvs.OXgyLZfl8wnutNnda1FK3Cd2

토큰(token)에 대한 정보 표시

vault token lookup

seal 및 HA 상태 출력

vault status

Syslog를 통한 Vault Audit 로깅 활성화

vault audit enable syslog

[Vault Server]

SSH Client-Signer Secrets Engine 활성화 및 CA 키 생성

SSH Client-Signer Secrets Engine 활성화

vault secrets enable -path=ssh-client-signer ssh

CA(인증 기관) 키 생성

vault write ssh-client-signer/config/ca generate_signing_key=true

CA(인증 기관) 키 출력

vault read -field=public_key ssh-client-signer/config/ca > /etc/ssh/trusted-user-ca-keys.pem
cat /etc/ssh/trusted-user-ca-keys.pem

SSH 인증 역할 설정(my-role)

서명된 인증서를 통해 인증 가능한 사용자를 제한하고 기본 사용자 및 인증서 TTL(Time To Live)을 설정합니다.

vault write ssh-client-signer/roles/my-role -<<"EOH"
{
  "allow_user_certificates": true,
  "allowed_users": "*",
  "valid_principals": "vuser1",
  "default_extensions": [
    {
      "permit-pty": ""
    }
  ],
  "key_type": "ca",
  "default_user": "vuser1",
  "ttl": "30m0s"
}
EOH

role 정보 확인

vault read ssh-client-signer/roles/my-role

[Target : SSH Server]

각 호스트에 CA의 공개 키 추가

SSH 서버 설정 (CA 키 설정)

Vault에서 생성한 CA 키를 SSH 서버에서 신뢰하도록 설정합니다.

 

trusted-user-ca-keys.pem(/etc/ssh/trusted-user-ca-keys.pem) 저장

curl -s http://192.168.0.141:8200/v1/ssh-client-signer/public_key -o /etc/ssh/trusted-user-ca-keys.pem
cat /etc/ssh/trusted-user-ca-keys.pem

ssh(sshd) 설정(/etc/ssh/sshd_config)

echo 'TrustedUserCAKeys /etc/ssh/trusted-user-ca-keys.pem' >> /etc/ssh/sshd_config
echo "PubkeyAcceptedKeyTypes=+ssh-rsa,ssh-rsa-cert-v01@openssh.com" >> /etc/ssh/sshd_config

ssh(sshd) 설정 확인

cat /etc/ssh/sshd_config | egrep 'TrustedUserCAKeys|PubkeyAcceptedKeyTypes'

ssh(sshd) 재기동

sshd -t
systemctl restart sshd

[Client]

Vault 설치

바이너리 파일로 vault를 설치합니다.

apt install -y unzip
curl -fsSL https://releases.hashicorp.com/vault/1.18.0/vault_1.18.0_linux_amd64.zip -o vault_1.18.0_linux_amd64.zip
unzip vault_1.18.0_linux_amd64.zip
mv vault /usr/local/bin/
vault version
rm -f LICENSE.txt vault_1.18.0_linux_amd64.zip

클라이언트 측 환경 변수 설정

Vault 주소와 토큰을 설정하여 SSH 클라이언트에서 Vault와 쉽게 상호작용할 수 있게 합니다.

 

- VAULT_TOKEN = ssh client에서 생성한 token value 입력(require-ssh-sign token)

echo 'export VAULT_ADDR=http://192.168.0.141:8200' >> ~/.bashrc
echo 'export VAULT_TOKEN="hvs.OXgyLZfl8wnutNnda1FK3Cd2"' >> ~/.bashrc
source ~/.bashrc
env | grep VAULT

클라이언트 측 SSH 키 생성 및 서명

클라이언트에서 SSH 키를 생성하고 Vault에서 서명된 인증서를 생성하여 SSH 접속에 사용합니다.

 

SSH 키 생성

ssh-keygen -t rsa -C "vuser1@vault"

Vault에서 SSH 키 서명 요청

vault write -field=signed_key ssh-client-signer/sign/my-role public_key=@$HOME/.ssh/id_rsa.pub > ~/.ssh/signed-cert.pub

파일 권한 설정

chmod 644 ~/.ssh/signed-cert.pub

인증서 확인

cat ~/.ssh/signed-cert.pub

서명된 인증서 확인

ssh-keygen -Lf ~/.ssh/signed-cert.pub

SSH 서버로 접속

ssh -i ~/.ssh/signed-cert.pub -i ~/.ssh/id_rsa vuser1@192.168.0.142

 

참고URL

- Hashicorp Releases : Vault Binary download(https://releases.hashicorp.com)

- HashiCorp Vault를 이용한 SSH 공개키 인증 : https://ikcoo.tistory.com/251

- Signed SSH Certificates : https://developer.hashicorp.com/vault/docs/secrets/ssh/signed-ssh-certificates

- client key signing : https://developer.hashicorp.com/vault/docs/secrets/ssh/signed-ssh-certificates#client-key-signing

- host key signing : https://developer.hashicorp.com/vault/docs/secrets/ssh/signed-ssh-certificates#host-key-signing

- 複雑なポリシーを適切に管理する、HashiCorp Vault SSH CA動的シークレットエンジンとSentinel : https://www.lac.co.jp/lacwatch/service/20200811_002237.html

- Managing Developer Access with Vault SSH : https://pacewisdom.com/blog/managing-developer-access-with-vault-ssh/

 

명사: 클라이언트, 고객, 의뢰인
 
728x90