Helm ja salaisuuksienhallinta
Yksi hyvä ja suositeltava työkalu palveluiden pystyttämiseen OpenShiftille on Helm. Se on Kubernetesta ymmärtävä template-moottori, jolla voidaan parametrisoida OpenShiftiin syötettävää yamlia ja syöttää sitä suoraan komentoriviltä älykkäästi oman projektin komponenteiksi.
Tässä artikkelissa esitellään eräs tapa säilyttää salaisuuksia kryptattuina Helm chartin Git-repossa.
Tarvittavat työkalut
Asenna seuraavat työkalut seuraamalla linkkien takana olevia asennusohjeita ja/tai käyttämällä oman käyttöjärjestelmäsi paketinhallintaa.
- OpenShiftin komentoriviasiakas oc
- Lataa täältä paketti openshift-client-... omalle käyttöjärjestelmällesi: https://mirror.openshift.com/pub/openshift-v4/clients/ocp/latest/
- Helm
- Helmin secrets plugin
- GnuPG
- Esimerkiksi apt install gnupg
- Ei ainut vaihtoehto. SOPS tukee myös muita salaus-backendejä. Tässä esimerkkiohjeessa keskitytään kuitenkin GPG:hen.
- SOPS
Asetustiedosto
Lue Helm chart -repoosi tiedosto .sops.yaml seuraavanlaisella sisällöllä:
creation_rules: - pgp: >- pilkuilla, eroteltu, lista, pgp-sormenjälkiä
Sormenjälki (fingerprint) on henkilökohtaisen PGP-avaimen yksilöivä tunniste, joka näyttää esimerkiksi tältä: 78F7F1856BB695563D5BBA877F9D8156A3CF7EE3.
Luettele asetustiedostossa sormenjälkien avulla kaikkien niiden henkilöiden PGP-avaimet, joita vasten haluat kryptata Helm chartisi salaisuudet. Siis he henkilöt, joiden tarvitsee päästä asentamaan projektiasi OpenShiftissä. Jokainen listattu avain pystyy purkamaan kryptatut salaisuudet.
.gitignore
Lisää seuraavat rivit .gitignore-tiedostoosi, jotta et vahingossa committaa selväkielisiä salaisuuksia:
*.yaml.dec*.yml.dec
Käyttö
Salaisuus-yamlit ja viittaaminen templatessaLuo esimerkiksi tiedostot secrets.test.yaml ja secrets.prod.yaml. Luettele niissä kaikki testi- ja tuotantoympäristöjesi salaisuudet. Esimerkiksi:
tls_cert: |- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----tls_chain: |- -----BEGIN CERTIFICATE----- ... -----END CERTIFICATE-----tls_privkey: |- -----BEGIN PRIVATE KEY----- .. -----END PRIVATE KEY-----
Sitten voit viitata salaisuuteesi templateissa esimerkiksi näin:
# chart/templates/route.yamlkind: RouteapiVersion: metadata: name: sovellukseni namespace: projektinilabels: app: sovellukseni type: externalspec: host: {{ .Values.route_hostname }} # aseta tämä tiedostossa values.ymparisto.yaml (ei tarvitse kryptata) to: kind: Service name: sovellukseni tls: termination: edge insecureEdgeTerminationPolicy: Redirect key: | {{- .Values.tls_privkey | nindent 6 }} certificate: | {{- .Values.tls_cert | nindent 6 }} caCertificate: | {{- .Values.tls_chain | nindent 6 }}
Komennot
Salaisuuden kryptaaminenVarmista ensin, että olet importannut GPG-avainrenkaaseesi kaikki .sops.yaml-asetustiedostossa listaamasi julkiset avaimet. Mahdollisesti sinun pitää myös asettaa niille riittävä luottamusaste, jotta GPG suostuu kryptaamaan niille. Olennaiset komennot tähän ovat gpg --import (tuo tiedostosta) sekä gpg --recv-keys (hae avainpalvelimelta) – tutustu näiden käyttöön GnuPG:n dokumentaatiosta.
Kryptaa laatimasi salaisuus-yaml seuraavalla komennolla:
helm secrets enc secrets.ymparisto.yaml
Tiedosto on nyt korvautunut kryptatulla versiolla.
Kryptatun salaisuuden muokkaaminen
helm secrets edit secrets.ymparisto.yaml
Kryptatun salaisuuden katseleminen
helm secrets view secrets.ymparisto.yaml
Kryptatun salaisuuden purkaminen
helm secrets dec secrets.ymparisto.yaml
Kryptatun yamlin kanssa samaan hakemistoon on nyt ilmaantunut selväkielinen tiedosto secrets.ymparisto.yaml.dec
Kääre muille Helm-komennoilleHelm secrets plugin osaa käyttää kryptattuja salaisuuksia läpinäkyvästi ilman purkamista levylle välivaiheena käärimällä Helmin muut komennot näppärästi. Seuraavalla komennolla voit tehdä releasen projektiisi käyttäen kryptattuja salaisuuksia:
helm secrets upgrade --install -f secrets.ymparisto.yaml -f values.ymparisto.yaml releasen-nimi .
Suositeltu yhteydenottotapa kysymyksiin on:
https://helsinkifi.slack.com #kontit
Resurssien lisäys/muutospyynnöt kannattaa lähettää sähköpostilla.
grp-openshift-owner@helsinki.fi (alustan ylläpito ja kehitys)
tike-ohjelmistotuotanto@helsinki.fi (sovelluskehitys)