For oppfølging av Security Champions.
- Henter personer fra Teamkatalogen med rollen «Security champion» og gjør følgende:
- Melder nye champions inn i slack-gruppen
@security-champions
- Ønsker nye champions velkommen i slack-kanalen
#security-champion
- Gir beskjed om fjernede champions i slack-kanalen
#security-champion-admin
- Melder nye champions inn i slack-gruppen
Slackboten er foreløpig satt opp til å kjøre som en Naisjob
med et jevnt intervall.
- Secrets og annen konfigurasjon hentes fra GCP Secret Manager
- Listen av nåværende champions lagres i en GCP Storage Bucket for senere sammenligning
- Korrelerer Teamkatalog-personer med Slack-brukere basert på enten
navIdent
elleremail
- Slack-integrasjonen er satt opp mot en custom app «Security Champion Bot»
Flyt (mermaid -syntaks)
sequenceDiagram
participant Bot as Security Champion Bot<br/>(naisjob)
participant TK as Teamkatalogen
participant Slack
participant GCP as Google Cloud Bucket
Bot->>TK: Get all teams, areas, etc.
TK-->>Bot: [team, team, …]
Note left of Bot: Map to list of members<br/>with role SECURITY_CHAMPION:<br>[team_member, team_member, …]
Bot->>GCP: If exists, get previous list of team members<br/>with role SECURITY_CHAMPION
GCP-->>Bot: [team_member, team_member, …]
Note left of Bot: Calculate diff between<br/>current and previous list
Bot->>GCP: Store current list of champions for next time<br/>[team_member, team_member, …]
loop paginated
Bot->>Slack: Get all slack users
Slack-->>Bot: [slack_user, slack_user, …]
end
Note left of Bot: Map each team_member to<br/>the corresponding slack_user
Bot-)Slack: Update @security-champions<br/>group with new list of slack_users
alt Any security champions added?
Bot-)Slack: Notify channel "security-champion"
end
alt Any security champions removed?
Bot-)Slack: Notify channel "security-champion-admin"
end
Mesteparten av valgene er konfigurert gjennom GCP Secret Manager, og injisert som environment-variabler ved kjøring.
Environment-variabel | Forklaring | Obligatorisk | Default-verdi |
---|---|---|---|
TEAMKATALOG_API_URL |
URL til teamkatalog-APIet | Ja | https://teamkatalog.nais.adeo.no/api |
TEAMKATALOG_MRH_SESSION |
MRHSession-cookie for bruk av teamkatalog-APIet utenfor FSS | Nei | |
SLACK_BOT_TOKEN |
Slack bot token | Ja | |
SLACK_SIGNING_SECRET |
Slack signing secret | Ja | |
SECURITY_CHAMPION_CHANNEL |
ID til slack-kanal for varsler | Ja | |
SECURITY_CHAMPION_ADMIN_CHANNEL |
ID til slack-kanal for interne varsler | Ja | |
SECURITY_CHAMPION_SLACK_USERGROUP |
ID til slack-brukergruppe (f.eks. @security-champions) | Ja | |
GSC_BUCKET_NAME |
Navn på google-bucket for ekstern cache | Nei | |
DRY_RUN |
Dry-run-modus deaktiverer endringer | Nei | false |
FORCE_UPDATE |
Tvinger kjøring av oppdatering av Slack-gruppe, selv når det ikke er endringer | Nei | false |