Vault PKI Intermediate ca etcd Roles and permissions for real cluster Kubernetes the hard way v2: различия между версиями
Материал из noname.com.ua
Перейти к навигацииПерейти к поискуSirmax (обсуждение | вклад) |
Sirmax (обсуждение | вклад) |
||
Строка 317: | Строка 317: | ||
======== |
======== |
||
</PRE> |
</PRE> |
||
− | |||
− | ==Получение клиентского сертефиката== |
||
− | ====Проверка прав (негативный сценарий)==== |
||
− | С "серверным" пользователем - нет прав |
||
− | <PRE> |
||
− | source ./00_env |
||
− | |||
− | |||
− | vault \ |
||
− | login \ |
||
− | -method=userpass \ |
||
− | username=example-dot-home-server-crt-user \ |
||
− | password=server |
||
− | </PRE> |
||
− | <PRE> |
||
− | 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. |
||
− | |||
− | Key Value |
||
− | --- ----- |
||
− | token s.P9nYzZ3Pev2IeNKaUYvDIDdt |
||
− | token_accessor AbXtLIzNhYJRvv6paZr3U6cn |
||
− | token_duration 768h |
||
− | token_renewable true |
||
− | token_policies ["default" "example-dot-home-server-crt-policy"] |
||
− | identity_policies [] |
||
− | policies ["default" "example-dot-home-server-crt-policy"] |
||
− | token_meta_username example-dot-home-server-crt-user |
||
− | </PRE> |
||
− | <PRE> |
||
− | vault \ |
||
− | write \ |
||
− | -format=json \ |
||
− | ${PKI_NAME}/issue/example-dot-home-client-crt \ |
||
− | common_name="vault.example.home" \ |
||
− | alt_names="pki.example.home" \ |
||
− | ttl="43800h" > vault.example.home-client.crt |
||
− | </PRE> |
||
− | <PRE> |
||
− | Error writing data to k8s_pki_intermediate_ca_for_service_etcd/issue/example-dot-home-client-crt: Error making API request. |
||
− | |||
− | URL: PUT http://127.0.0.1:8200/v1/k8s_pki_intermediate_ca_for_service_etcd/issue/example-dot-home-client-crt |
||
− | Code: 403. Errors: |
||
− | |||
− | * 1 error occurred: |
||
− | * permission denied |
||
− | |||
− | </PRE> |
||
− | Результат соответствует ожидаемому. |
Версия 20:14, 11 октября 2022
Вводная часть
Тут описывается создание сертификатов для etcd
Это продолжение Статьи про создание промежуточного СА
Упрощение работы
Путь к PKI (k8s_pki_intermediate_ca_for_service_etcd) встречается многократно, и он вынесен в переменную
cat 00_env
export PKI_NAME="k8s_pki_intermediate_ca_for_service_etcd"
Роли и пользователи для peer-to-peer сертификатов
В кластере участвуют три сервера, соответственно для каждого из них требуется отдельные настройки - роль, пользователь ...
Роли для получения peer-to-peer сертификатов
Три зоны - три роли, по одной для каждого сервера
client_flag=true server_flag=true enforce_hostnames=true key_usage="DigitalSignature,KeyEncipherment" ext_key_usage="ClientAuth,ServerAuth"
#!/bin/bash source ./00_env for AZ in $(seq 1 3); do DOMAIN="etcd.master.az${AZ}.k8s.cluster.home" NAME="${DOMAIN}-client-and-server" vault \ write \ ${PKI_NAME}/roles/${NAME}-role \ country="Ukraine" \ locality="Kharkov" \ street_address="Lui Pastera st 322 app. 311"\ postal_code="61172" \ organization="Home Network" \ ou="IT" \ allowed_domains="${DOMAIN}" \ allow_subdomains=false \ max_ttl="87600h" \ key_bits="2048" \ key_type="rsa" \ allow_any_name=false \ allow_bare_domains=true \ allow_glob_domain=false \ allow_ip_sans=true \ allow_localhost=false \ client_flag=true \ server_flag=true \ enforce_hostnames=true \ key_usage="DigitalSignature,KeyEncipherment" \ ext_key_usage="ClientAuth,ServerAuth" \ require_cn=true done
Success! Data written to: k8s_pki_intermediate_ca_for_service_etcd/roles/etcd.master.az1.k8s.cluster.home-client-and-server-role Success! Data written to: k8s_pki_intermediate_ca_for_service_etcd/roles/etcd.master.az2.k8s.cluster.home-client-and-server-role Success! Data written to: k8s_pki_intermediate_ca_for_service_etcd/roles/etcd.master.az3.k8s.cluster.home-client-and-server-role
Создание политики, пользователя и привязка политики к пользователю
#!/bin/bash source ./00_env for AZ in $(seq 1 3); do DOMAIN="etcd.master.az${AZ}.k8s.cluster.home" NAME="${DOMAIN}-client-and-server" cat << EOF > ${NAME}-policy.hlc path "${PKI_NAME}/issue/${NAME}-role" { capabilities = ["read", "create", "list", "update"] } EOF vault \ policy \ write \ ${NAME}-policy \ ${NAME}-policy.hlc vault \ write \ auth/userpass/users/${NAME}-user \ password=${NAME}-password \ policies=" ${NAME}-policy,default" done
Success! Uploaded policy: etcd.master.az1.k8s.cluster.home-client-and-server-policy Success! Data written to: auth/userpass/users/etcd.master.az1.k8s.cluster.home-client-and-server-user Success! Uploaded policy: etcd.master.az2.k8s.cluster.home-client-and-server-policy Success! Data written to: auth/userpass/users/etcd.master.az2.k8s.cluster.home-client-and-server-user Success! Uploaded policy: etcd.master.az3.k8s.cluster.home-client-and-server-policy Success! Data written to: auth/userpass/users/etcd.master.az3.k8s.cluster.home-client-and-server-user
Просмотр созданных политик
#!/bin/bash source ./00_env echo "---------ROLES---------------------" vault \ list \ ${PKI_NAME}/roles echo "---------USERS---------------------" vault \ list \ auth/userpass/users echo "------------------------------" for AZ in $(seq 1 3); do DOMAIN="etcd.master.az${AZ}.k8s.cluster.home" NAME="${DOMAIN}-client-and-server" vault \ policy \ read \ ${NAME}-policy vault \ read \ auth/userpass/users/${NAME}-user done
Получения сертефикатов
- Получать непосредственно на нодах
- на нодах меняются домены, роли и пользователи
Получение серверного сертефиката
#!/bin/bash source ./00_env mkdir -p /etc/etcd/server/ AZ=1 DOMAIN="etcd.master.az${AZ}.k8s.cluster.home" NAME="${DOMAIN}-client-and-server" vault \ login \ -method=userpass \ username="${NAME}-user" \ password="${NAME}-password" echo "========" vault \ write \ -format=json \ ${PKI_NAME}/issue/${NAME}-role \ common_name="${DOMAIN}" \ ttl="43800h" \ > /etc/etcd/server/${DOMAIN}.crt.json
Получение сертификата
#!/bin/bash PKI_NAME="k8s_pki_intermediate_ca_for_service_etcd" CERTS_PATH="/etc/etcd/certs/server" mkdir -p ${CERTS_PATH} AZ=1 DOMAIN="etcd.master.az${AZ}.k8s.cluster.home" NAME="${DOMAIN}-client-and-server" vault \ login \ -method=userpass \ username="${NAME}-user" \ password="${NAME}-password" echo "========" vault \ write \ -format=json \ ${PKI_NAME}/issue/${NAME}-role \ common_name="${DOMAIN}" \ ttl="43800h" \ > ${CERTS_PATH}/${DOMAIN}.crt.json cat \ ${CERTS_PATH}/${DOMAIN}.crt.json \ | jq -r '.data.private_key' > ${CERTS_PATH}/${DOMAIN}.key cat \ ${CERTS_PATH}/${DOMAIN}.crt.json \ | jq -r '.data.certificate' > ${CERTS_PATH}/${DOMAIN}.pem cat \ ${CERTS_PATH}/${DOMAIN}.crt.json \ | jq -r '.data.ca_chain[]' >> ${CERTS_PATH}/${DOMAIN}.pem ln -sf ${CERTS_PATH}/${DOMAIN}.key ${CERTS_PATH}/etcd-server-key.pem ln -sf ${CERTS_PATH}/${DOMAIN}.pem ${CERTS_PATH}/etcd-server-crt.pem
Key Value --- ----- token s.7DfyaDzZZOb9fkV4NU8xR0Gw token_accessor cChs7RffaXPyrtLVmV9VGW8b token_duration 768h token_renewable true token_policies ["default" "etcd.master.az1.k8s.cluster.home-client-and-server-policy"] identity_policies [] policies ["default" "etcd.master.az1.k8s.cluster.home-client-and-server-policy"] token_meta_username etcd.master.az1.k8s.cluster.home-client-and-server-user ========