Автоматизация управления пользователями в компании
3 декабря 2022 г.Я постоянно задаю себе вопрос, что еще в процессах, в которых я участвую, можно автоматизировать? Многократный клик-клик-клик в интерфейсе приносит с собой массу ошибок, а если компания активно растет — то все, что вы будете делать со временем — это кликать в интерфейсе, перестаньте это делать и давайте автоматизировать.
Для построения повторно используемой инфраструктуры мы используем автоматизацию повторяющихся процессов, чаще это будет Terraform. Трудно отрицать удобство и популярность такого подхода. Особенно, когда уже есть много готовых и хорошо поддерживаемых большим сообществом провайдеров.
Введение
Представьте, что наша компания растет, к нам приходят новые разработчики и поддержка, и всем нужно создать учетную запись/электронную почту в google workspace и привязать ее к OpenVPN Cloud для доступа к внутренним ресурсам.
В самой классической версии, когда новый сотрудник
Кроме того, от нас уходят люди, надо не забывать запрещать доступ к системам. Здесь нужно действовать строго в порядке, обратном схеме (схема 1).
Терраформ
Помните, что у нас есть Terraform для автоматизации, мы будем использовать его для автоматизации выдачи и отзыва доступов.
Схемы прекрасно описывают процедуру, но чтобы понять, чем нам поможет Terraform, вспомним его способность сохранять и делиться выводом.
<цитата>Я использую app.terraform.io для запуска terraform и публикации результатов
Давайте создадим пользователя в нашей организации:
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
}
Заключение
Удобство этого подхода заключается в том, что у вас есть одна точка входа и одна точка выхода. Здесь действует принцип единой ответственности, если человек работает в компании — он всегда описан кодом в одном месте.
То, что я показал, является простым примером, я не использовал циклы намеренно, но я настоятельно рекомендую вам использовать их, чтобы избежать дублирования кода.
Поставщики, использованные в этой статье:
- TF: hashicorp/googleworkspace
- TF: OpenVPN/openvpn-cloud
- TF: anna-money/sendgrid< /li>
:::информация Также опубликовано здесь.
:::
Оригинал