Admin Future
241 subscribers
51 photos
1 video
4 files
120 links
Превращаем эникейщиков в System Architects.
🚀 Твой навигатор в мире IT-инфраструктуры:

▪️ Hard Skills: Linux, Windows, Network, Security
▪️ Tools: Лучший софт и скрытые фишки
▪️ Mindset: Как думать, чтобы платили много


Админ - @maksimshap
Download Telegram
Linux & API: Парсим JSON в терминале как боги с помощью jq

curl-нул API и получил в ответ стену текста в формате JSON? Пытаться разобрать это глазами или через grep — прошлый век. Для работы со структурированными данными в терминале есть свой sed и awk — это утилита jq.
jq — это легковесный и сверхмощный обработчик JSON для командной строки.
Установка: sudo apt install jq или brew install jq.
Практический пример с GitHub API:

Получаем и красиво форматируем JSON:

Bash

# Просто передаём вывод curl в jq с фильтром '.' (точка)
curl -s 'https://api.github.com/users/torvalds' | jq '.'
``
Извлекаем одно значение:

Bash

# Получаем значение ключа "name"
curl -s 'https://api.github.com/users/torvalds' | jq '.name'
# Результат: "Linus Torvalds"

Извлекаем несколько значений и создаем свой объект:

Bash

curl -s 'https://api.github.com/users/torvalds' | jq '{user: .login, company: .company, location: .location}'

Работаем с массивами (самое мощное):

Bash

# Получаем список репозиториев и выводим только их имена
curl -s 'https://api.github.com/users/torvalds/repos' | jq '.[ ].name'
`
[ ] — итератор по массиву.

Взгляд архитектора:
jq — это клей для современной автоматизации. Он позволяет строить сложные и надёжные пайплайны в bash-скриптах, которые работают с API облачных провайдеров, системами мониторинга и любыми другими сервисами, говорящими на JSON. Это превращает нечитаемые данные в полезную информацию прямо в терминале.

#linux #jq #json #api #bash #devops #команды
👍2
Kubernetes (Security): Аудит «привилегированных» Pod’ов и опасных контекстов

Боль: Кластер «зелёный», но в проде внезапно есть Pod’ы с privileged, hostNetwork и контейнеры, которые по факту бегут от root.
Реакция админа: «Они же работают».
Реакция архитектора: «Любая эскалация — это вопрос времени. Я хочу сигнал в моменте.»

Скрипт (Bash + kubectl + jq), выводит только рискованные контейнеры:

#!/usr/bin/env bash
# --- Kubernetes Risky Pods Audit ---
set -euo pipefail

command -v kubectl >/dev/null || { echo "[!!!] Требуется kubectl"; exit 2; }
command -v jq >/dev/null || { echo "[!!!] Требуется jq"; exit 2; }

echo "--- Начинаю аудит Pod'ов с опасными настройками ---"

data=$(kubectl get pods -A -o json)
echo "$data" | jq -r '
[.items[] as $p
| ($p.spec.containers + ($p.spec.initContainers // []))[]? as $c
| {
ns: $p.metadata.namespace,
pod: $p.metadata.name,
cont: $c.name,
img: $c.image,
privileged: ($c.securityContext.privileged // false),
hostNetwork: ($p.spec.hostNetwork // false),
hostPID: ($p.spec.hostPID // false),
runAsRoot:
((( $c.securityContext.runAsUser
// $p.spec.securityContext.runAsUser // null) == 0)
or ( ($c.securityContext.runAsNonRoot
// $p.spec.securityContext.runAsNonRoot // false) == false)),
capAdd: ($c.securityContext.capabilities.add // [])
}
]
| map(select(.privileged or .hostNetwork or .hostPID or .runAsRoot
or (.capAdd | index("SYS_ADMIN") or index("NET_ADMIN"))))
| if length==0
then "OK\tБезопасные настройки: нарушений не найдено"
else
(["NAMESPACE","POD","CONT","REASON","IMAGE"],
(.[] | [
.ns, .pod, .cont,
([
(if .privileged then "privileged" else empty end),
(if .hostNetwork then "hostNetwork" else empty end),
(if .hostPID then "hostPID" else empty end),
(if .runAsRoot then "runAsRoot" else empty end),
(if (.capAdd|index("SYS_ADMIN")) then "SYS_ADMIN" else empty end),
(if (.capAdd|index("NET_ADMIN")) then "NET_ADMIN" else empty end)
] | join(",")),
.img
]))
| @tsv
end
' | column -t

echo "--- Аудит завершен ---"
echo "Рекомендация: навесьте PSP/PSa, OPA/Gatekeeper/Kyverno и зафиксируйте политику по умолчанию (runAsNonRoot=true, drop ALL)."

Взгляд архитектора: Вы не охотитесь на последствия, вы контролируете «плоскость допуска» (admission). Скрипт — датчик, политика — предохранитель.

#kubernetes #security #sre #devops #bash #jq #скрипты
🧠 Skill: JSON — универсальный клей админа

Раньше мы грепали текст (grep | awk).
В 2026 году, когда вокруг Docker, Kubernetes и REST API, вывод почти всегда можно получить в JSON.
Парсить JSON как текст — это путь к ошибкам.

Учимся работать с объектами, а не строками:

🐧 Linux (jq): Не делайте grep "status", делайте:

curl -s https://api.site.com/health | jq '.services[] | select(.status=="down") | .name'

(Выведет имена только упавших сервисов).

🪟 PowerShell: Здесь JSON становится родным объектом .NET автоматически:

$data = curl https://api.site.com/health | ConvertFrom-Json $data.services | Where-Object { $_.status -eq 'down' } | Select-Object name

Совет: Если консольная утилита имеет флаг --json (как kubectl, aws cli, docker), всегда используйте его для скриптов. Это делает вашу автоматизацию неубиваемой при смене форматирования вывода разработчиками.

#skills #json #jq #powershell #bash #devops #api
👍2🔥2👏1