Автоматизация управления пользователями в компании

Автоматизация управления пользователями в компании

3 декабря 2022 г.

Я постоянно задаю себе вопрос, что еще в процессах, в которых я участвую, можно автоматизировать? Многократный клик-клик-клик в интерфейсе приносит с собой массу ошибок, а если компания активно растет — то все, что вы будете делать со временем — это кликать в интерфейсе, перестаньте это делать и давайте автоматизировать.

Для построения повторно используемой инфраструктуры мы используем автоматизацию повторяющихся процессов, чаще это будет Terraform. Трудно отрицать удобство и популярность такого подхода. Особенно, когда уже есть много готовых и хорошо поддерживаемых большим сообществом провайдеров.


Введение

Представьте, что наша компания растет, к нам приходят новые разработчики и поддержка, и всем нужно создать учетную запись/электронную почту в google workspace и привязать ее к OpenVPN Cloud для доступа к внутренним ресурсам.

В самой классической версии, когда новый сотрудник

Scheme 1

Кроме того, от нас уходят люди, надо не забывать запрещать доступ к системам. Здесь нужно действовать строго в порядке, обратном схеме (схема 1).

Терраформ

Помните, что у нас есть Terraform для автоматизации, мы будем использовать его для автоматизации выдачи и отзыва доступов.

Scheme 2

Scheme 3

Схемы прекрасно описывают процедуру, но чтобы понять, чем нам поможет Terraform, вспомним его способность сохранять и делиться выводом.

<цитата>

Я использую app.terraform.io для запуска terraform и публикации результатов

Scheme 4

Давайте создадим пользователя в нашей организации:

terraform {
  backend "remote" {
    hostname     = "app.terraform.io"
    organization = "EXAMPLE"

    workspaces {
      name = "google-workspace"
    }
  }
}

provider "googleworkspace" {
  # Use GOOGLEWORKSPACE_CREDENTIALS env
  # More settings: https://registry.terraform.io/providers/hashicorp/googleworkspace/latest/docs
  customer_id = "XXXXXXX"
}

resource "googleworkspace_user" "arslanbekov" {
  primary_email  = "arslanbekov@example.com"
  org_unit_path = "developer"
  name {
    family_name = "Denis"
    given_name  = "Arslanbekov"
  }
}

output "email" {
  value = googleworkspace_user.arslanbekov.primary_email
}

output "name" {
  value = googleworkspace_user.arslanbekov.name
}

Если пользователь уже существует, просто импортируйте его

terraform import googleworkspace_user.arslanbekov arslanbekov@example.com

Далее мы будем взаимодействовать с выводом, который будет содержать адрес электронной почты и имя нашего нового сотрудника. Можем перейти к следующему репозиторию, в котором описываем пользователей OpenVPN Cloud:

terraform {
  backend "local" {}
  required_providers {
    openvpncloud = {
      source  = "OpenVPN/openvpn-cloud"
      version = "0.0.7"
    }
  }
}

provider "openvpncloud" {
  base_url = "https://company-name.api.openvpn.com"
}

data "terraform_remote_state" "google_workspace_email" {
  backend = "remote"
  config = {
    organization = "EXAMPLE"
    workspaces = {
      name = "google-workspace"
    }
  }
}

resource "openvpncloud_user" "arslanbekov" {
  username   = "arslanbekov"
  email      = data.terraform_remote_state.google_workspace_email.outputs.arslanbekov
  first_name = data.terraform_remote_state.google_workspace_email.outputs.name.family_name
  last_name  = data.terraform_remote_state.google_workspace_email.outputs.name.given_name
  role       = "USER"
}

Применение этого кода создаст пользователя в облаке OpenVPN и отправит ему приглашение по электронной почте. Пользователь сможет сначала войти в систему, установить пароль и создать сертификаты VPN.

Стоит отметить, что через этого провайдера мы также можем полностью настроить OpenVPN Cloud (создавать группы и описывать маршруты). ** Это действительно потрясающе. Мы можем очень легко пригласить его в любые другие системы (используя провайдеров, которые есть в terraform).

Например, SendGrid:

terraform {
  required_providers {
    sendgrid = {
      version = "1.0.0"
      source  = "anna-money/sendgrid"
    }
  }
}

provider "sendgrid" {
  api_key = "SECRET_API_KEY"
}

data "terraform_remote_state" "google_workspace_email" {
  backend = "remote"
  config = {
    organization = "EXAMPLE"
    workspaces = {
      name = "google-workspace"
    }
  }
}

resource "sendgrid_teammate" "arslanbekov" {
  email    = data.terraform_remote_state.google_workspace_email.outputs.arslanbekov
  scopes   = [
    "alerts.create",
    "alerts.read",
    "alerts.update",
    "alerts.delete",
  ]
  is_admin = false
}

Заключение

Удобство этого подхода заключается в том, что у вас есть одна точка входа и одна точка выхода. Здесь действует принцип единой ответственности, если человек работает в компании — он всегда описан кодом в одном месте.

То, что я показал, является простым примером, я не использовал циклы намеренно, но я настоятельно рекомендую вам использовать их, чтобы избежать дублирования кода.

Поставщики, использованные в этой статье:

  1. TF: hashicorp/googleworkspace
  2. TF: OpenVPN/openvpn-cloud
  3. TF: anna-money/sendgrid< /li>

:::информация Также опубликовано здесь.

:::


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE