Integracja Vaulta Menedżera Haseł OpenBao dla Lepszego Zarządzania Sekretami w GitLabie
Wymagania wstępne
Upewnij się, że masz uprawnienia root przed rozpoczęciem instalacji.
Automatyczny skrypt instalacyjny
Aby zautomatyzować instalację i konfigurację OpenBao, użyj dostarczonego skryptu bao.sh
. Skrypt ten obsługuje następujące czynności:
- Tworzy systemowego użytkownika i grupę dla OpenBao.
- Instaluje Go.
- Instaluje niezbędne zależności.
- Instaluje NVM, Node.js i Yarn.
- Klonuje i buduje repozytorium OpenBao.
- Konfiguruje OpenBao.
- Generuje certyfikaty SSL.
- Inicjalizuje i odblokowuje OpenBao.
- Tworzy niezbędne usługi systemd.
Pobierz i uruchom skrypt jako root:
|
|
Zamień <IP address or URL>
na rzeczywisty adres IP lub URL i uruchom go przed uruchomieniem skryptu. Zobacz przykład poniżej:
|
|
Uczyń plik wykonywalnym:
|
|
Uruchom skrypt z sudo:
|
|
Skrypt obsługuje wszystkie kroki opisane poniżej. Jeśli jednak wolisz zrozumieć każdy krok lub uruchomić je ręcznie, postępuj zgodnie ze szczegółowym przewodnikiem.
Szczegółowe kroki instalacji
Krok 1: Tworzenie użytkownika i konfiguracja środowiska
Skrypt sprawdzi, czy użytkownik openbao
istnieje i utworzy go, jeśli to konieczne. Upewni się również, że środowisko jest odpowiednio skonfigurowane dla użytkownika openbao
, w tym skopiowanie .bashrc
i .profile
z /etc/skel
, jeśli nie są obecne.
Krok 2: Instalacja Go
-
Pobierz i zainstaluj Go:
1 2 3 4 5 6
wget https://go.dev/dl/go1.22.4.linux-amd64.tar.gz sudo tar -C /usr/local -xzf go1.22.4.linux-amd64.tar.gz sudo mkdir -p /var/lib/openbao sudo touch /var/lib/openbao/.profile echo "export PATH=\$PATH:/usr/local/go/bin" | sudo tee -a /var/lib/openbao/.profile sudo chown -R openbao:openbao /var/lib/openbao
Krok 3: Instalacja zależności
-
Zainstaluj wymagane pakiety:
1
sudo apt install -y git make curl gnupg2
-
Skonfiguruj NVM, Node.js i Yarn dla użytkownika openbao:
1 2 3 4
sudo -u openbao -H bash -c 'cd /var/lib/openbao && curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash' sudo -u openbao -H bash -c 'export NVM_DIR="/var/lib/openbao/.nvm" && cd /var/lib/openbao && source $NVM_DIR/nvm.sh && nvm install 22' sudo -u openbao -H bash -c 'export NVM_DIR="/var/lib/openbao/.nvm" && cd /var/lib/openbao && source $NVM_DIR/nvm.sh && npm config set prefix /var/lib/openbao/.npm-global && npm install -g yarn' sudo -u openbao -H bash -c 'echo "export PATH=/var/lib/openbao/.npm-global/bin:\$PATH" >> /var/lib/openbao/.profile'
Krok 4: Klonowanie i budowanie OpenBao
-
Sklonuj repozytorium OpenBao:
1 2 3 4
sudo mkdir -p /var/lib/openbao/src/github.com/openbao sudo chown -R openbao:openbao /var/lib/openbao/src/github.com cd /var/lib/openbao/src/github.com/openbao sudo -u openbao git clone https://github.com/openbao/openbao.git
-
Zbuduj OpenBao:
1 2 3
sudo -u openbao -H bash -c 'source /var/lib/openbao/.profile && cd /var/lib/openbao/src/github.com/openbao/openbao && export NVM_DIR="/var/lib/openbao/.nvm" && source $NVM_DIR/nvm.sh && nvm use --delete-prefix v22.3.0 --silent && export NODE_OPTIONS="--max_old_space_size=4096" && make bootstrap' sudo -u openbao -H bash -c 'source /var/lib/openbao/.profile && cd /var/lib/openbao/src/github.com/openbao/openbao && export NVM_DIR="/var/lib/openbao/.nvm" && source $NVM_DIR/nvm.sh && nvm use --delete-prefix v22.3.0 --silent && make static-dist dev-ui' sudo mv /var/lib/openbao/src/github.com/openbao/openbao/bin/bao /usr/local/bin/openbao
Krok 5: Konfiguracja OpenBao
-
Utwórz katalog i plik konfiguracyjny:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
sudo mkdir -p /var/lib/openbao/config cat << 'EOF' | sudo tee /var/lib/openbao/config/config.hcl ui = true cluster_addr = "https://10.10.0.126:8201" api_addr = "https://10.10.0.126:8200" disable_mlock = true storage "file" { path = "/var/lib/openbao/data" } listener "tcp" { address = "10.10.0.126:8200" tls_cert_file = "/var/lib/openbao/tls/tls.crt" tls_key_file = "/var/lib/openbao/tls/tls.key" } EOF sudo mkdir -p /var/lib/openbao/data sudo chown -R openbao:openbao /var/lib/openbao/data sudo chmod -R 755 /var/lib/openbao/data
Krok 6: Generowanie certyfikatów SSL
-
Utwórz plik konfiguracyjny OpenSSL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
cat << 'EOF' | sudo tee /var/lib/openbao/openssl.cnf [req] default_bits = 2048 default_md = sha256 prompt = no encrypt_key = no distinguished_name = dn req_extensions = req_ext x509_extensions = v3_ca [dn] C = US ST = State L = City O = Organization OU = Organizational Unit CN = 10.10.0.126 [req_ext] subjectAltName = @alt_names [v3_ca] subjectAltName = @alt_names basicConstraints = critical, CA:true [alt_names] IP.1 = 10.10.0.126 EOF
-
Generowanie klucza prywatnego i certyfikatu:
1 2 3 4 5 6 7 8 9 10
sudo openssl genpkey -algorithm RSA -out /var/lib/openbao/tls.key sudo openssl req -new -x509 -days 365 -key /var/lib/openbao/tls.key -out /var/lib/openbao/tls.crt -config /var/lib/openbao/openssl.cnf sudo mkdir -p /var/lib/openbao/tls sudo mv /var/lib/openbao/tls.crt /var/lib/openbao/tls/ sudo mv /var/lib/openbao/tls.key /var/lib/openbao/tls/ sudo chown -R openbao:openbao /var/lib/openbao/tls/ sudo cp /var/lib/openbao/tls/tls.crt /usr/local/share/ca-certificates/openbao.crt sudo update-ca-certificates
Krok 7: Inicjalizacja i odblokowanie OpenBao
-
Inicjalizuj i odblokuj OpenBao:
1 2 3
sudo -u openbao -H bash -c 'source /var/lib/openbao/.bashrc && openbao server -config /var/lib/openbao/config/config.hcl &' sleep 30 sudo -u openbao -H bash -c 'source /var/lib/openbao/.bashrc && openbao operator init > /tmp/init_output.txt'
-
Odblokuj OpenBao:
1 2 3 4 5
UNSEAL_KEYS=$(grep 'Unseal Key' /tmp/init_output.txt | awk '{print $NF}') echo "$UNSEAL_KEYS" > /tmp/unseal_keys.txt for key in $(cat /tmp/unseal_keys.txt); do openbao operator unseal $key done
Krok 8: Tworzenie usług systemd
-
Utwórz
openbao.service
iopenbao-unseal.service
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
cat << 'EOF' | sudo tee /etc/systemd/system/openbao.service [Unit] Description=OpenBao Documentation=https://github.com/openbao/openbao Requires=network-online.target After=network-online.target Requires=openbao-unseal.service [Service] User=openbao Group=openbao EnvironmentFile=/etc/openbao.d/openbao.env ExecStart=/usr/local/bin/openbao server -config=/var/lib/openbao/config/config.hcl ExecReload=/bin/kill --signal HUP $MAINPID KillMode=process KillSignal=SIGINT Restart=on-failure RestartSec=5 LimitNOFILE=65536 LimitMEMLOCK=infinity [Install] WantedBy=multi-user.target EOF cat << 'EOF' | sudo tee /etc/systemd/system/openbao-unseal.service [Unit] Description=Odblokuj OpenBao After=openbao.service Requires=openbao.service [Service] Type=oneshot ExecStart=/usr/local/bin/unseal_openbao.sh Environment=VAULT_ADDR=https://10.10.0.126:8200 Environment=DBUS_SESSION_BUS_ADDRESS=$XDG_RUNTIME_DIR/bus [Install] WantedBy=multi-user.target EOF sudo systemctl daemon-reload sudo systemctl enable openbao-unseal.service sudo systemctl enable openbao.service sudo systemctl start openbao.service
Dostosowywanie konfiguracji
- Ustawienia serwera: Dostosuj adres serwera, port i ustawienia UI.
- Ustawienia przechowywania: Skonfiguruj backend przechowywania zgodnie z wymaganiami (np. plik, baza danych itp.).
- Ustawienia API: Ustaw adres i port API.
- Ustawienia logowania: Określ poziom logowania i lokalizację plików.
- Ustawienia bezpieczeństwa: Skonfiguruj uwierzytelnianie i ustawienia bezpieczeństwa.
Zapoznaj się z dokumentacją OpenBao, aby uzyskać bardziej szczegółowe opcje konfiguracji i przykłady. Ten przykład zapewnia punkt wyjścia i powinien być dostosowany do Twoich specyficznych wymagań i środowiska. Jeśli potrzebujesz dalszej pomocy lub konkretnych opcji konfiguracji, nie wahaj się zapytać!
Konfiguracja GitLab
-
Zdefiniuj zmienne środowiskowe w GitLab CI/CD:
Dodaj zmienne CI/CD w GitLabie:
VAULT_ADDR
=https://10.10.0.126:8200
VAULT_TOKEN
=<vault_token>
-
Konfiguracja
.gitlab-ci.yml
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
stages: - test variables: VAULT_ADDR: "https://10.10.0.126:8200" before_script: - apt-get update -y && apt-get install -y jq - echo $VAULT_TOKEN > /tmp/.vault-token job: stage: test script: - echo "Pobieranie sekretów z OpenBao" - export VAULT_TOKEN=$(cat /tmp/.vault-token) - secrets=$(openbao kv get -format=json secret/gitlab/database) - export DB_USERNAME=$(echo $secrets | jq -r '.data.data.username') - export DB_PASSWORD=$(echo $secrets | jq -r '.data.data.password') - echo "Używanie pobranych sekretów" - echo "DB_USERNAME: $DB_USERNAME" - echo "DB_PASSWORD: $DB_PASSWORD"
Podsumowanie
Powyższe kroki obejmują instalację Go, pobieranie i budowanie OpenBao z interfejsem użytkownika, konfigurowanie OpenBao i integrację z GitLabem. Pozwala to na bezpieczne przechowywanie i zarządzanie sekretami używanymi w Twoich pipeline’ach CI/CD.