Vault Basic Setup: различия между версиями

Материал из noname.com.ua
Перейти к навигацииПерейти к поиску
Строка 320: Строка 320:
   
   
==Политики===
+
==Политики==
   
   

Версия 19:33, 7 февраля 2022


Установка и базовая настройка Hashicorm Vault

Consul

Базовая настойка Vault

Устновка

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install vault

Подготовка Consul

Есть разные способы - тут привожу пример с использованием терраформ

export CONSUL_TOKEN="4f6037ed-5f62-5463-d165-cbb984791ef1"
  • Установить терраформ (если не установлен)
apt install terraform
  • Файл с описанием ACL cat acl.tf
variable "consul_datacenter" {
    type = string
    default = "kilda-fred"
}
provider "consul" {
  address    = "http://127.0.0.1:8500"
  datacenter = var.consul_datacenter
}
resource "consul_acl_policy" "vault_policy" {
  name        = "vault_policy"
  datacenters = [var.consul_datacenter]
  rules       = <<-RULE
    {
        "key_prefix": {
            "kilda-fred-vault/": {
                "policy": "write"
            }
        },
        "node_prefix": {
            "": {
              "policy": "write"
            }
        },
        "service": {
            "vault": {
                "policy": "write"
            }
        },
        "agent_prefix": {
            "": {
                "policy": "write"
            }
        },
        "session_prefix": {
            "": {
                "policy": "write"
            }
        }
    }
    RULE
}

resource "consul_acl_role" "vault_role" {
    name = "vault_role"
    description = "Role assignet to the Hasicorp Vault service"
    policies = [
        consul_acl_policy.vault_policy.id
    ]
    service_identities {
        service_name = "vault"
    }
}
resource "consul_acl_token" "vault_token" {
    description = "Token for Vault Server"
    roles = [
        consul_acl_role.vault_role.name
    ]
    local = true
}

data "consul_acl_token_secret_id" "vault_token" {
    accessor_id = consul_acl_token.vault_token.accessor_id
}

output "consul_acl_token_secret_id" {
    value = data.consul_acl_token_secret_id.vault_token.secret_id
    sensitive = true
}

output "consul_token_for_vault_server_accessor_id" {
    value = consul_acl_token.vault_token.accessor_id
    sensitive = true
}

* Инициализировать терраформ и применить ACL
<PRE>
terraform init
terraform apply -auto-approve
  • Вывод (все токены для примера)
Changes to Outputs:
  + consul_acl_token_secret_id                = (sensitive value)
  + consul_token_for_vault_server_accessor_id = (sensitive value)
consul_acl_policy.vault_policy: Creating...
consul_acl_policy.vault_policy: Creation complete after 0s [id=6746941f-5928-65e9-76f1-9653b294ccac]
consul_acl_role.vault_role: Creating...
consul_acl_role.vault_role: Creation complete after 0s [id=5e56be99-8a8a-865e-50cc-dfa512051d03]
consul_acl_token.vault_token: Creating...
consul_acl_token.vault_token: Creation complete after 0s [id=5a4ae5cd-8391-f735-e067-4404d859448b]
data.consul_acl_token_secret_id.vault_token: Reading...
data.consul_acl_token_secret_id.vault_token: Read complete after 0s [id=5a4ae5cd-8391-f735-e067-4404d859448b]

Apply complete! Resources: 3 added, 0 changed, 0 destroyed.

Outputs:

Посмотреть спрятанные "секретные" значения можно terraform output -json, для дальнейшей работы нужен токен 8ea89f62-e928-06e8-379b-9b1eebb92a67

{
  "consul_acl_token_secret_id": {
    "sensitive": true,
    "type": "string",
    "value": "8ea89f62-e928-06e8-379b-9b1eebb92a67"
  },
  "consul_token_for_vault_server_accessor_id": {
    "sensitive": true,
    "type": "string",
    "value": "5a4ae5cd-8391-f735-e067-4404d859448b"
  }
}

Конфигурация Vault

  • /etc/vault.d/vault.hcl
  • Токен 5a4ae5cd-8391-f735-e067-4404d859448b получен на предыдущем шаге
  • Префикс kilda-fred-vault/ должен совпадать в ACL и конфиге
storage "consul" {
    address     = "127.0.0.1:8500"
    path        = "kilda-fred-vault/"
    token       = "8ea89f62-e928-06e8-379b-9b1eebb92a67"
    # Register the service at Consul
    service     = "vault"
    service_tags = "home"
}

telemetry {
  statsite_address = "127.0.0.1:8125"
  disable_hostname = true
}

disable_mlock   = true
ui = true
#mlock = true
#disable_mlock = true

#}

# HTTPS listener
listener "tcp" {
  address       = "0.0.0.0:8200"
  tls_cert_file = "/opt/vault/tls/tls.crt"
  tls_key_file  = "/opt/vault/tls/tls.key"
}

TLS/SSL

  • Не забыть установить правильные сертификаты и добавить CA как доверенный

Инициализация

  • vault.domain.tld (домен взят для примера) должен соответствовать записям в сертификатах!
export VAULT_ADDR=https://vault.domain.tld:8200
vault operator init
Unseal Key 1: bQjA3QKTHYc9X897PrRPN+wAFqVAYnmGyl2bMioKSYL8
Unseal Key 2: J5K1GVOmWRzP1En1O3h0cZ4Ra80jRDKB3GXmW4HqvJKi
Unseal Key 3: exQSVpnNSgVJehnfoYiQGZGyO0tVl3ieriJhsHHfZxci
Unseal Key 4: P0f2kd8YLg1mAQyhQNC/kIBcRmZFLER+989kQp0Y8jpP
Unseal Key 5: if5E98mspfrQyeCtkmHxJcGVDLrcgWQZpdVUALpn9xKP

Initial Root Token: s.pRFenxR9CANXqLtGI0b6fvy3

Ключи приведены для примера


Unseal / разблокирование

три раза запустить vault operator unseal (с разными ключами, любые три из пяти!)

vault operator unseal
Unseal Key (will be hidden):
Key                Value
---                -----
Seal Type          shamir
Initialized        true
Sealed             true
...
vault operator unseal
Unseal Key (will be hidden):
Key                Value
---                -----
Seal Type          shamir
Initialized        true
Sealed             true
...
vault operator unseal
Key                    Value
---                    -----
Seal Type              shamir
Initialized            true
Sealed                 false
...


Авторизация

Логин/Пароль

Удобно для тестов (другие применения под сомнением)
С рутовым токеном - включить авторизацию по паролю

vault auth enable userpass
Success! Enabled userpass auth method at: userpass/

Создать пользователя (в примере - рут с полными правами)

  • auth/userpass/users/root - имя пользователя
vault write auth/userpass/users/root \
    password=root \
    policies=default

Проверка

vault login -method=userpass     username=root     password=root
Success! You are now authenticated. The token information displayed below
is already stored in the token helper. You do NOT need to run "vault login"
again. Future Vault requests will automatically use this token.

K/V Secrets

  • Включить K/V
vault secrets enable -version=2 kv
 vault secrets  list
Path          Type         Accessor              Description
----          ----         --------              -----------
cubbyhole/    cubbyhole    cubbyhole_5da501f2    per-token private secret storage
identity/     identity     identity_ba162c0c     identity store
kv/           kv           kv_fbc9f78c           n/a
sys/          system       system_a62acf53       system endpoints used for control, policy and debugging
  • Проверить запись и чтение с рутовым токеном
vault kv  put kv/test a=b
Key                Value
---                -----
created_time       2022-02-07T15:46:37.731094732Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            1
vault kv  get   kv/test
======= Metadata =======
Key                Value
---                -----
created_time       2022-02-07T15:46:37.731094732Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false
version            1

== Data ==
Key    Value
---    -----
a      b
  • Создать ветки для для дальнейшего тестирования
ault kv  put kv/k8s/kilda cert1=certdata1
Key                Value
---                -----
created_time       2022-02-07T15:50:05.911522071Z
custom_metadata    <nil>
deletion_time      n/a
destroyed          false


Политики

По сути политики определяют права доступа ТОКЕНА к определнному пути.
Токен же выдается при логине - т е в простейшем случае политики должны назначаться на пользователя (авторизация по логину/паролю)

Для доступа к ролям создаем 2 файла с политиками: Политика для серверных сертефикатов[править] example-dot-home-server-crt-policy.hlc path "pki_intermediate_ca/issue/example-dot-home-server-crt" {

 capabilities = ["read", "create", "list", "update"]