-
Notifications
You must be signed in to change notification settings - Fork 2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Nye ambisjoner for Nais CLIet #513
Comments
Local buildsfirst things first: Here i would be worried about a developer machine being compromised and In theory i am, unsurprisingly, pro local builds (reproducible and verifiable local builds).
Please don't. Users should not be able to build and deploy.
in addition to difficulties talking about provenance. SLSA level 2 requires a build platform for all artifacts and I expect to be the standard from a regulatory perspective going forward. Build stuff for CI needs to be in CI.
This is exactly the same problem as above. If there is no provenance the signature means nothing. "I built something somehow and now it's running in production". the CI stuff should be separate affair for trusted (and hardened!) build platforms. see https://slsa.dev/spec/v1.1/levels |
Så det du mener er at ingen kjørende workloads i clusteret skal være uten SBOM og provenance? Jeg tenker at i en lokal utviklingssetting er reproduserbarhet et poeng som ikke helt gir mening. Det er ingenting iboende i det å kjøre fra lokal maskin som betyr at det ikke kan reproduseres. Det som skal i produksjon vil jo normalt sett uansett kjøres via pipelines og bygges fra main. Hvis vi kan etter bygging av image, verifisere at dette ble bygget av en autentisert nais-bruker (kan vi gjøre det via Fulcio?) tenker jeg det vil være godt nok. |
What i mean is exactly the first sentence:
nope. signatures give you:
it does not give you:
if you want to say "signature is good enough" you want:
I would be hesitant to allow developer machines to deploy and would much prefer that we lean in on the industry best practice of using dedicated build systems for producing artifacts. |
Ok, men skjønner jeg litt mer hva du mener. I dag har vi ingen som helst krav til hvor imaget som kjører i clusteret ble bygget. Eneste vi vet i dag om imaget, er at det kommer fra våres image registry, og med det kan utlede at det ble pushet av noen med tilgang. Selv om det hadde vært bra å kunne si at alle kjørende images i clusteret har en provenance fra et sted som f.eks github actions (er det bra nok?), så er det veldig langt unna der vi er i dag. Jeg tenker det bør bli en separat diskusjon i teamet, ledet an av @ybelMekk @tommytroen, så vi kan være litt mer samla rundt hvilken linje vi skal legge oss på her. Tanken i forbindelse med dette initiativet var at vi gjorde det et par knepp bedre ved å bruke brukerens egen identitet når man genererer SBOM. Siden man må være innlogget bruker, og vi har compliant device krav på innlogging, så skjer det jo fra en maskin vi ellers stoler nok på til å slippe rett inn i clusteret til å gjøre alle operasjoner der inne. |
note that deciding on slsa level is mentioned in the closed issue "proactive tenant security posture" (which was originally supposed to be about only that). Imo there's really not much to decide on here, the space if you go by the spec has levels 0-4. Deters adversaries who face legal or financial risk by evading security controls, such as employees who face risk of getting fired. Reduces attack surface by limiting builds to specific build platforms that can be audited and hardened. |
Syns du har mange gode poenger, men vi må innom noen steg før vi er der at dette kan låses ned. En god start tenker jeg er at @ybelMekk / @tommytroen kaller inn til en prat |
Jeg synes diskusjonen er nyttig, og det er viktig at vi alle er bevisste på hva vi ønsker å oppnå med det vi lar kjøre i klustrene. La meg først si litt om SLSA-nivået. For øyeblikket er vi på SLSA nivå 2+ og ikke 0.7 som beskrevet tidligere. SLSA nivå 2 krever at byggeprosessen er automatisert, som vanligvis skjer gjennom CI/CD-pipelines som GitHub Actions eller GitLab CI. Manuelle bygg (for eksempel ved hjelp av en CLI eller et lokalt skript) er ikke tilstrekkelige for nivå 2. Hvis vi kan flagge dette på en måte i Nais Console, kan det være et pluss. Vi kan bruke nivå 1 for testing, men for produksjon bør vi egentlig kreve nivå 2 eller høyere. Bygget må også produsere signert provenance, ved bruk av verktøy som Cosign, som beskrevet tidligere, som beskriver byggeomgivelsene, avhengighetene og det resulterende artefaktet. Denne provenance-en må være verifiserbar og knyttet til byggeprosessen. Hvis en bruker signerer lokalt, kan dette ikke verifiseres tilbake til byggeprosessen, som er tilfelle i dag. Når man signerer lokalt, introduseres også et ekstra steg hvor brukeren må logge seg inn med Google (gjennom Sigstore) for å få signert et image. Som et startpunkt er dette veldig nyttig i test- og utviklingsmiljøer for team, men jeg ser ikke for meg at dette skal være den standardiserte løsningen i produksjon. Da bør det, som Johnny påpeker, brukes i en pipeline av et eller annet slag. I tillegg må signerte artefakter og metadata lagres i transparenslogger (som Rekor), noe som gir bevis på at signaturen er opprettet og at artefaktet kommer fra en pålitelig kilde. Dette hindrer manipulering og gjør det mulig for andre å verifisere artefaktene uavhengig. Tjenester som Rekor lagrer informasjon om dem som har signert (epost), men det er mulig å hoste sin egen Rekor? Når vi gjør ting gjennom en pipeline som GitHub, har vi spårbarhet på hvem som gjorde comitten, og gjennom metadata i signaturen kan vi se nøyaktig hvilken commit den kommer fra, akkurat hvilket image og når. Det er verdt å påpeke at komprimerte innloggingsdetaljer også kan være tilgjengelig i GitHub, akkurat som de kan være for et lokalt signert artefakt. La oss diskutere dette videre, men som nevnt støtter jeg dette i test/dev. Jeg ser gjerne at vi har mer kontroll på hva vi setter som godkjent i produksjon, da dette potensielt kan føre til problemer dersom det ikke håndteres riktig. |
I think this is haggling on "having a hosted build platform" is sufficient or if i'ts necessary to use it. otoh, maybe you're right. Maybe it is about the capability rather than the practice.
That is about attack surface. Local builds has the set of all developer machines over time whereas a hosted build platform with ephemeral builders have a slightly smaller attack surface. |
Dette issuet beskriver den overordnede ambisjonen for Nais CLIet.
Her samler vi hovedtrekkene, retningen og har oversikt over rekkefølgen på oppgavene.
Dette er moder-issuet, som refereres til fra de konkrete initiativene som vil spinne ut i fra dette.
Essensen
Vi ønsker å gjøre kommandolinja til en førsteklasses flate ut i mot brukerene våre, slik Console er i dag.
I det ligger det at vi ønsker å samle eksisterende funksjonalitet, samt legge til nye funksjoner slik at man får ett enkelt CLI å forholde seg til.
Ved å utvide funksjonaliteten, kan vi også forenkle bruker-reisen betraktelig ved å kutte avhengigheter til andre CLIer som vi lener oss på i dag, primært
gcloud
ogkubectl
.Andre betraktninger
gcloud
installert.kubectl
eller prosjekt i GCP. Hvilken tenant er mer behind-the-scenes for bruker.Førsteutkast av toppnivåkommandoer:
Her er et grovt førsteutkast av type kommandoer man ser for seg i nytt CLI (på lang sikt)
Steg på veien / milepæler
1. Konsolidere eksisterende CI-funksjonalitet /
nais run
Samle eksisterende kommandolinjeverktøy og GitHub Actions-tooling til én binary.
Dette vil gi bedre støtte for Nais CI gjennom lokal utvikling, som blir så og si identisk med det som skjer på GitHub.
I tillegg kan vi støtte flere ulike miljøer hos våre tenants, som bruker andre ting enn GitHub, f.eks Azure DevOps og GitLab. Ved å tilby Nais-funksjonalitet fra en enkelt binær, kan vi på sikt ha samme syntaks og dokumentasjon på tvers av ulike Git- og CI-tilbydere.
Ved å samle CI-relatert funksjonalitet som i dag gjøres i
docker-build-push
, samtdeploy CLI
/nais deploy action
i CLIet, muliggjør vi:Det at dette oppfører seg likt, gjør at det blir så godt som sømløs overgang fra å si "få dette greiene jeg har lokalt i min mappe nå til å kjøre på Nais", til å si: "ta tilstanden i dette repositoriet til å kjøre på Nais". Altså: "kjør dette på Nais" ->
nais run
.Ønsket utfall:
nais/docker-build-push
deprecatednais/deploy/actions/deploy
deprecatedEksempel på ny GitHub Actions-syntaks:
2. Nais login
Ønsket utfall:
Både brukere og serviceAccounts bør ha en uniform login-mekanisme for å kunne utføre det CLI’et tilbyr av funksjonalitet.
nais login
autentiserer og autoriserer:Det er ikke ønskelig å avvikle dagens nøkkelløse deploy.
3. Hjelpe team i gang med nais (nais init)
Vi kan forenkle oppstartsreisen for nye team og applikasjoner ved å tilby CLI-funksjonalitet
nais init
starter en hjelper som stiller relevante spørsmål for å komme frem til "riktig" app eller job-specDet er viktig å unngå spørsmål som ikke er relevante for brukeren for å unngå spørsmålsfatigue.
Resultatet som presenteres er en ferdig
<workload>.yaml
som legges i ./naisEn annen utvidelse kan være å hjelpe til med å bygge workflow.yaml
Eksempel på deler av flyten
Hovedpoenget er å gruppere funksjonaliteten vår og presentere det på en naturlig måte for brukerene våre.
De viktigste grupperingene er:
Ressurser og skalering
Kommunikasjon
Disse spørsmålene kan struktureres i ett tre, og bør ende opp i ferdig konfigurasjon for bl.a. auth, ingresses og accessPolicies.
Persistens
Defaults
Bruker den nais standarder? port: 8080, metrikker på /metrics, isalive på /isalive, isready etc?
+Hemmeligheter? +Miljøvariabler?
4. Utvide med Nais console/API funksjonalitet
Det er naturlig å kunne gjøre en del av de tingene man gjør i Console gjennom CLI-et også, for eksempel:
Dette implementeres gjennom å gjøre kall til Nais API.
The text was updated successfully, but these errors were encountered: