about summary refs log tree commit diff
path: root/corp/ops/yandex/main.tf
# Terraform configuration for TVL corp infrastructure (on Yandex
# Cloud).

terraform {
  required_providers {
    yandex = {
      source = "yandex-cloud/yandex"
    }
  }

  # Credentials need to be sourced from creds.fish
  backend "s3" {
    endpoint = "storage.yandexcloud.net"
    bucket   = "su-tvl-terraform-state"
    region   = "ru-central1"
    key      = "corp/ops/terraform.tfstate"

    skip_region_validation      = true
    skip_credentials_validation = true
  }
}

provider "yandex" {
  zone = "ru-central1-b"
}

locals {
  tvl_cloud_id  = "b1ggu5m1btue982app12"
  tvl_folder_id = "b1gmbeqt9o5kbl7rclln"
  rih_cloud_id  = "b1glccvcqggi2ruibgvt"
  rih_folder_id = "b1gsavcrsjn059d1sbh9"
}

# Storage state bucket configuration

resource "yandex_iam_service_account" "tf_state_sa" {
  folder_id = local.tvl_folder_id
  name      = "terraform-state"
}

resource "yandex_resourcemanager_folder_iam_member" "tf_state_sa_storage" {
  folder_id = local.tvl_folder_id
  role      = "storage.editor"
  member    = "serviceAccount:${yandex_iam_service_account.tf_state_sa.id}"
}

resource "yandex_iam_service_account_static_access_key" "tf_state_sa_key" {
  service_account_id = yandex_iam_service_account.tf_state_sa.id
  description        = "Static access key for Terraform state"
}

resource "yandex_storage_bucket" "tf_state" {
  access_key = yandex_iam_service_account_static_access_key.tf_state_sa_key.access_key
  secret_key = yandex_iam_service_account_static_access_key.tf_state_sa_key.secret_key
  bucket     = "su-tvl-terraform-state"
}

# Secret management configuration

resource "yandex_kms_symmetric_key" "tvl_credentials_key" {
  name              = "tvl-credentials"
  folder_id         = local.tvl_folder_id
  default_algorithm = "AES_256"
  rotation_period   = "2160h" # 90 days
}

resource "yandex_kms_secret_ciphertext" "tf_state_key" {
  key_id    = yandex_kms_symmetric_key.tvl_credentials_key.id
  plaintext = yandex_iam_service_account_static_access_key.tf_state_sa_key.secret_key
}