gke-security
google/skills
Обеспечивает защиту кластеров Google Kubernetes Engine (GKE) с помощью Workload Identity, Secret Manager, RBAC, бинарной авторизации, сетевых политик и стандартов безопасности под.
...Расширить всеБезопасность GKE
В данном справочнике рассматривается настройка безопасности кластеров GKE. «Золотой путь» по умолчанию обеспечивает усиленную защиту.
Инструменты MCP:
get_cluster,check_k8s_auth,get_k8s_resource,apply_k8s_manifest,update_cluster
Настройки безопасности по умолчанию «золотого пути»
| Параметр | Значение «золотого пути» | День 0/1 | Примечания |
|---|---|---|---|
workloadIdentityConfig.workloadPool |
|
День 0 | Федерация идентификаторов рабочих нагрузок для под |
secretManagerConfig.enabled |
true |
День-1 | Интеграция с Google Secret Manager |
secretManagerConfig.rotationConfig |
включено: true, интервал_ротации: 120 с |
День 1 | Автоматическая ротация секретов |
rbacBindingConfig.enableInsecureBindingSystemAuthenticated |
false |
День-0 | Блокировка привязок «system:authenticated» устаревшей системы |
rbacBindingConfig.enableInsecureBindingSystemUnauthenticated |
false |
День-0 | Блокировка устаревшей системы: неаутентифицированные привязки |
nodeConfig.shieldedInstanceConfig.enableSecureBoot |
true |
День-0 | Проверяемая целостность загрузки |
nodeConfig.shieldedInstanceConfig.enableIntegrityMonitoring |
true |
День-0 | Проверки целостности во время выполнения |
nodeConfig.workloadMetadataConfig.mode |
GKE_METADATA |
День-0 | Блокирует устаревший API метаданных, обеспечивает соблюдение идентификации рабочей нагрузки |
| Настройки частного кластера + Dataplane V2 | См. навык gke-networking |
День 0 | Частные узлы, принудительное использование частных конечных точек, ADVANCED_DATAPATH |
Федерация идентификаторов рабочих нагрузок
Workload Identity — это рекомендуемый способ доступа подсистем к API Google Cloud. Он устраняет необходимость в статических ключах учетных записей сервисов.
Настройка
# 1. Создайте учетную запись службы Google (GSA)
gcloud iam service-accounts create \
--project \
--display-name "Workload Identity SA" \
--quiet
# 2. Назначьте роли IAM учетной записи GSA
gcloud projects add-iam-policy-binding \
--member "serviceAccount:@.iam.gserviceaccount.com" \
--role "" \
--quiet
# 3. Создание учётной записи службы Kubernetes (KSA)
kubectl create namespace
kubectl create serviceaccount --namespace
# 4. Привязка KSA к GSA
gcloud iam service-accounts add-iam-policy-binding \
@.iam.gserviceaccount.com \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:.svc.id.goog[/]" \
--quiet
# 5. Добавление аннотации к KSA
kubectl annotate serviceaccount \
--namespace \
iam.gke.io/gcp-service-account=@.iam.gserviceaccount.com
См. файл assets/workload-identity-pod.yaml для тестового под.
Проверка
kubectl run workload-identity-test \
--image=gcr.io/google.com/cloudsdktool/cloud-sdk:slim \
--serviceaccount= --namespace= \
--rm -it -- gcloud auth list --quiet
Интеграция с Secret Manager
Стандартный сценарий включает Secret Manager с автоматической ротацией. Секреты синхронизируются с секретами Kubernetes.
# Проверьте, включен ли Secret Manager в кластере
gcloud container clusters describe --region \
--format="value(secretManagerConfig.enabled)" \
--quiet
# Включить, если ещё не включено (изменение на первый день)
gcloud container clusters update --region \
--enable-secret-manager \
--secret-manager-rotation-interval=120s \
--quiet
Подключение секретов через том CSI (пример развертывания)
После включения надстройки Secret Manager рабочие нагрузки могут монтировать секреты в качестве томов с помощью драйвера CSI хранилища секретов. Для этого необходимо выполнить два шага:
- Определить
SecretProviderClass, чтобы указать, какие секреты следует извлекать из Secret Manager. - Смонтировать том в
Deploymentсо ссылкой на этот класс.
[!ВАЖНО] Рекомендации для производственной среды: всегда демонстрируйте интеграцию рабочих нагрузок (таких как Secret Manager CSI) с использованием манифестов
развертывания, соответствующих стандартам производственной среды, а не исходных манифестовPod.
Шаг 1: Создание SecretProviderClass
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: app-secrets-provider
namespace: default
spec:
provider: gke # Указывает на управляемый GKE провайдер
parameters:
secrets: |
- resourceName: "projects//secrets/db-password/versions/latest"
fileName: "db-password.txt"
Шаг 2: Подключение секрета в Deployment
apiVersion: apps/v1
kind: Deployment
metadata:
name: secure-app
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: secure-app
template:
metadata:
labels:
app: secure-app
spec:
serviceAccountName: secure-ksa # Должен быть привязан к GSA с ролью Secret Accessor в Secret Manager
containers:
- name: app
image:
volumeMounts:
- name: secrets-volume
mountPath: "/var/secrets"
readOnly: true
тома:
- имя: secrets-volume
csi:
драйвер: secrets-store.csi.k8s.io
readOnly: true
атрибуты тома:
класс-поставщика-секретов: "app-secrets-provider"
Усиление безопасности RBAC
Рекомендуемый подход заключается в отключении небезопасных устаревших привязок RBAC, предоставляющих широкий доступ
группам system:authenticated и system:unauthenticated.
# Проверка отключения небезопасных привязок
gcloud container clusters describe --region \
--format="yaml(rbacBindingConfig)" \
--quiet
Рекомендации по RBAC:
- Используйте роли в пределах пространства имён вместо ClusterRoles, действующих во всём кластере
- Привязывайте к конкретным группам или ServiceAccounts, никогда — к
system:authenticated - Проверяйте права доступа с помощью MCP:
check_k8s_auth(parent="...", verb="list", resourceType="pods", namespace="...")(илиkubectl auth can-i --list --as=) - Проверяйте привязки с помощью MCP:
get_k8s_resource(parent="...", resourceType="clusterrolebinding")(илиkubectl get clusterrolebindings,rolebindings --all-namespaces)
См. навык
gke-multitenancyдля планирования корпоративной RBAC и https://docs.cloud.google.com/kubernetes-engine/docs/best-practices/rbac.md.txt
Бинарная авторизация
По умолчанию не включена в «золотом пути», но рекомендуется для производственной среды. Происхождение образа:
# Включение бинарной авторизации
gcloud container clusters update --region \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--quiet
Сетевые политики
Dataplane V2 (рекомендуемый путь) предоставляет встроенную поддержку сетевых политик. Применение по умолчанию — запрет для каждого пространства имён:
# MCP (предпочтительно)
apply_k8s_manifest(parent="...", yamlManifest="")
# Резервный вариант с использованием kubectl
kubectl apply -f ./assets/default-deny-netpol.yaml -n
Песочница GKE (gVisor)
Для запуска ненадежных рабочих нагрузок в изолированной песочнице:
# Включение в кластере (стандартные кластеры)
gcloud container clusters update --region --enable-gke-sandbox --quiet
# Использование в спецификации пода
# Добавить: runtimeClassName: gvisor
Стандарты безопасности подов (рекомендуемый подход)
Стандарты безопасности подов определяют три профиля, ограничивающих возможности подов.
Профильrestricted является «золотым стандартом» по умолчанию для производственных пространств имён.
| Профиль | Уровень | Сценарий использования |
|---|---|---|
привилегированный |
Без ограничений | Системные пространства имён (kube-system), |
| : : : контроллеры инфраструктуры : | ||
базовый |
Минимальные ограничения | Общие пространства имён /dev, устаревшие приложения |
| : : : переносящиеся : | ||
ограниченный |
Оптимальный вариант | Производственные рабочие нагрузки — блоки |
| : : : повышение привилегий, доступ к хосту, : | ||
| : : : root : |
Принудительное применение с помощью меток пространства имён (Pod Security Admission):
apiVersion: v1
kind: Namespace
metadata:
name: production
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/warn: restricted
pod-security.kubernetes.io/audit: restricted
Стратегия постепенного внедрения:
- Начните с
предупрежденийиаудитасуществующих пространств имён для выявления нарушений - Исправьте несоответствующие требованиям рабочие нагрузки (удалите
привилегированные,hostNetwork, пользователя root и т. д.) - Включить
принудительное соблюдение, как только все рабочие нагрузки пройдут проверку
ограничения: запуск от имени root, повышение привилегий, использование
сети хоста/PID/IPC, тома с путями хоста и большинство возможностей. «Золотой» вариант
файла workload-identity-pod.yaml уже соответствует требованиям.
Ведение журнала сетевой политики (рекомендуется)
С помощью Dataplane V2 (рекомендуемый сценарий) можно включить ведение журнала решений сетевой политики. Это не является настройкой по умолчанию для рекомендуемого сценария — рекомендуется для аудита безопасности.
gcloud container clusters update --region \
--enable-network-policy-logging \
--quiet
При этом в журнал записываются разрешённые и запрещённые соединения, что полезно для устранения неполадок в правилах сетевой политики и аудита потоков трафика.
Распространённые роли IAM
Пять наиболее распространённых предопределённых ролей IAM для GKE:
| Роль | Назначение | Когда использовать |
|---|---|---|
roles/container.admin |
Полный контроль над | администраторами платформы |
| : : кластерами и : управлением кластерами : | ||
| : : Kubernetes : жизненный цикл : | ||
| : : ресурсов : : | ||
роли/container.clusterAdmin |
Управление кластерами, но | операторы кластера |
| : : не на уровне проектов : которые создают/удаляют : | ||
| : : IAM : кластеры : | ||
роли/container.developer |
Развертывание рабочих нагрузок | Приложение |
| : : (поды, сервисы, : разработчики, развертывающие : | ||
| : : развёртывания) : в существующие кластеры : | ||
роли/контейнер.просмотрщик |
Доступ только для чтения к | мониторинга, |
| : : кластеров и : аудита, или : | ||
| : : Kubernetes : информационные панели только для чтения : | ||
| : : ресурсы : : | ||
роли/container.clusterViewer |
Список и получение | конвейеры CI/CD, которые |
| : : сведения о кластере : требуют кластера : | ||
| : : только : метаданные : |
Принцип минимальных привилегий: начните с
ролей roles/container.viewerилиroles/container.developerи повышайте уровень доступа только по мере необходимости. Избегайте широкого предоставленияролей roles/container.admin.
Служебные учётные записи и агенты
- Агент службы GKE
(
service-): Создаётся автоматически. Управляет узлами, сетью и операциями кластера от вашего имени. Не удаляйте и не изменяйте его права доступа.@container-engine-robot.iam.gserviceaccount.com - Учетная запись службы узла: по умолчанию узлы используют стандартную учетную запись службы Compute Engine. Для производственной среды создайте выделенную учетную запись службы с минимальными разрешениями и назначьте её через конфигурацию пула узлов.
- Идентификация рабочей нагрузки: рекомендуемый способ доступа подков к API Google Cloud. Осуществляет сопоставление учётной записи службы Kubernetes с учётной записью службы Google IAM — см. раздел «Настройка идентификации рабочей нагрузки» выше.
Шаблоны межсервисной аутентификации
Распространённые шаблоны предоставления рабочим нагрузкам GKE доступа к другим сервисам Google Cloud:
# Предоставление рабочей нагрузке GKE доступа к Cloud Storage
gcloud projects add-iam-policy-binding \
--member "serviceAccount:@.iam.gserviceaccount.com" \
--role "roles/storage.objectViewer" \
--quiet
# Предоставление рабочей нагрузке GKE доступа к Cloud SQL
gcloud projects add-iam-policy-binding \
--member "serviceAccount:@.iam.gserviceaccount.com" \
--role "roles/cloudsql.client" \
--quiet
# Предоставить рабочей нагрузке GKE доступ к Pub/Sub
gcloud projects add-iam-policy-binding \
--member "serviceAccount:@.iam.gserviceaccount.com" \
--role "roles/pubsub.subscriber" \
--quiet
Во всех случаях GSA должен быть привязан к KSA через Workload Identity (см. настройку выше). Затем под использует KSA для аутентификации от имени GSA.
---
name: gke-security
description: Hardens Google Kubernetes Engine (GKE) clusters with Workload Identity, Secret Manager, RBAC, Binary Authorization, Network Policies, and Pod Security Standards.
---
# GKE Security
This reference covers security configuration for GKE clusters. The golden path
enforces a hardened security posture by default.
> **MCP Tools:** `get_cluster`, `check_k8s_auth`, `get_k8s_resource`,
> `apply_k8s_manifest`, `update_cluster`
## Golden Path Security Defaults
Setting | Golden Path Value | Day-0/1 | Notes
-------------------------------------------------------------- | --------------------------------------- | ------- | -----
`workloadIdentityConfig.workloadPool` | `<PROJECT>.svc.id.goog` | Day-0 | Workload Identity Federation for Pods
`secretManagerConfig.enabled` | `true` | Day-1 | Google Secret Manager integration
`secretManagerConfig.rotationConfig` | `enabled: true, rotationInterval: 120s` | Day-1 | Automatic secret rotation
`rbacBindingConfig.enableInsecureBindingSystemAuthenticated` | `false` | Day-0 | Blocks legacy `system:authenticated` bindings
`rbacBindingConfig.enableInsecureBindingSystemUnauthenticated` | `false` | Day-0 | Blocks legacy `system:unauthenticated` bindings
`nodeConfig.shieldedInstanceConfig.enableSecureBoot` | `true` | Day-0 | Verifiable boot integrity
`nodeConfig.shieldedInstanceConfig.enableIntegrityMonitoring` | `true` | Day-0 | Runtime integrity checks
`nodeConfig.workloadMetadataConfig.mode` | `GKE_METADATA` | Day-0 | Blocks legacy metadata API, enforces Workload Identity
Private cluster + Dataplane V2 settings | See the `gke-networking` skill | Day-0 | Private nodes, private endpoint enforcement, ADVANCED_DATAPATH
## Workload Identity Federation
Workload Identity is the recommended way for pods to access Google Cloud APIs.
It eliminates the need for static service account keys.
### Setup
```bash
# 1. Create a Google Service Account (GSA)
gcloud iam service-accounts create <GSA_NAME> \
--project <PROJECT_ID> \
--display-name "Workload Identity SA" \
--quiet
# 2. Grant IAM roles to the GSA
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member "serviceAccount:<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
--role "<ROLE>" \
--quiet
# 3. Create Kubernetes Service Account (KSA)
kubectl create namespace <NAMESPACE>
kubectl create serviceaccount <KSA_NAME> --namespace <NAMESPACE>
# 4. Bind KSA to GSA
gcloud iam service-accounts add-iam-policy-binding \
<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com \
--role roles/iam.workloadIdentityUser \
--member "serviceAccount:<PROJECT_ID>.svc.id.goog[<NAMESPACE>/<KSA_NAME>]" \
--quiet
# 5. Annotate KSA
kubectl annotate serviceaccount <KSA_NAME> \
--namespace <NAMESPACE> \
iam.gke.io/gcp-service-account=<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com
```
> See [assets/workload-identity-pod.yaml](./assets/workload-identity-pod.yaml)
> for a test pod.
### Verification
```bash
kubectl run workload-identity-test \
--image=gcr.io/google.com/cloudsdktool/cloud-sdk:slim \
--serviceaccount=<KSA_NAME> --namespace=<NAMESPACE> \
--rm -it -- gcloud auth list --quiet
```
## Secret Manager Integration
The golden path enables Secret Manager with automatic rotation. Secrets are
synced to Kubernetes Secrets.
```bash
# Verify Secret Manager is enabled on cluster
gcloud container clusters describe <CLUSTER_NAME> --region <REGION> \
--format="value(secretManagerConfig.enabled)" \
--quiet
# Enable if not already (Day-1 change)
gcloud container clusters update <CLUSTER_NAME> --region <REGION> \
--enable-secret-manager \
--secret-manager-rotation-interval=120s \
--quiet
```
### Mounting Secrets via CSI Volume (Deployment Example)
Once the Secret Manager add-on is enabled, workloads can mount secrets as
volumes using the Secrets Store CSI driver. This requires two steps:
1. **Define a `SecretProviderClass`** to specify which secrets to retrieve from
Secret Manager.
2. **Mount the volume in a `Deployment`** referencing that class.
> [!IMPORTANT] **Production Best Practice**: Always demonstrate workload
> integrations (like Secret Manager CSI) using production-standard
> **`Deployment`** manifests rather than raw `Pod` manifests.
#### Step 1: Create the SecretProviderClass
```yaml
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
name: app-secrets-provider
namespace: default
spec:
provider: gke # Identifies GKE managed provider
parameters:
secrets: |
- resourceName: "projects/<PROJECT_ID>/secrets/db-password/versions/latest"
fileName: "db-password.txt"
```
#### Step 2: Mount the secret in a Deployment
```yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: secure-app
namespace: default
spec:
replicas: 2
selector:
matchLabels:
app: secure-app
template:
metadata:
labels:
app: secure-app
spec:
serviceAccountName: secure-ksa # Must be bound to GSA with Secret Manager Secret Accessor role
containers:
- name: app
image: <IMAGE>
volumeMounts:
- name: secrets-volume
mountPath: "/var/secrets"
readOnly: true
volumes:
- name: secrets-volume
csi:
driver: secrets-store.csi.k8s.io
readOnly: true
volumeAttributes:
secretProviderClass: "app-secrets-provider"
```
## RBAC Hardening
The golden path disables insecure legacy RBAC bindings that grant broad access
to `system:authenticated` and `system:unauthenticated` groups.
```bash
# Verify insecure bindings are disabled
gcloud container clusters describe <CLUSTER_NAME> --region <REGION> \
--format="yaml(rbacBindingConfig)" \
--quiet
```
**Best practices for RBAC:**
- Use namespace-scoped Roles over cluster-wide ClusterRoles
- Bind to specific Groups or ServiceAccounts, never to `system:authenticated`
- Audit permissions via MCP: `check_k8s_auth(parent="...", verb="list",
resourceType="pods", namespace="...")` (or `kubectl auth can-i --list
--as=<user>`)
- Review bindings via MCP: `get_k8s_resource(parent="...",
resourceType="clusterrolebinding")` (or `kubectl get
clusterrolebindings,rolebindings --all-namespaces`)
> See the `gke-multitenancy` skill for enterprise RBAC planning and
> https://docs.cloud.google.com/kubernetes-engine/docs/best-practices/rbac.md.txt
## Binary Authorization
Not enabled in golden path by default but recommended for production image
provenance:
```bash
# Enable Binary Authorization
gcloud container clusters update <CLUSTER_NAME> --region <REGION> \
--binauthz-evaluation-mode=PROJECT_SINGLETON_POLICY_ENFORCE \
--quiet
```
## Network Policies
Dataplane V2 (golden path) provides built-in Network Policy enforcement. Apply
default-deny per namespace:
```
# MCP (preferred)
apply_k8s_manifest(parent="...", yamlManifest="<contents of default-deny-netpol.yaml>")
# kubectl fallback
kubectl apply -f ./assets/default-deny-netpol.yaml -n <NAMESPACE>
```
## GKE Sandbox (gVisor)
For running untrusted workloads in an isolated sandbox:
```bash
# Enable on cluster (Standard clusters)
gcloud container clusters update <CLUSTER_NAME> --region <REGION> --enable-gke-sandbox --quiet
# Use in pod spec
# Add: runtimeClassName: gvisor
```
## Pod Security Standards (Golden Path)
Pod Security Standards define three profiles that restrict what pods can do. The
**`restricted` profile is the golden path default** for production namespaces.
| Profile | Level | Use Case |
| ------------ | --------------------- | ---------------------------------- |
| `privileged` | Unrestricted | System namespaces (`kube-system`), |
: : : infrastructure controllers :
| `baseline` | Minimally restrictive | Shared/dev namespaces, legacy apps |
: : : being migrated :
| `restricted` | **Golden path** | Production workloads -- blocks |
: : : privilege escalation, host access, :
: : : root :
**Enforce via namespace labels (Pod Security Admission):**
```yaml
apiVersion: v1
kind: Namespace
metadata:
name: production
labels:
pod-security.kubernetes.io/enforce: restricted
pod-security.kubernetes.io/warn: restricted
pod-security.kubernetes.io/audit: restricted
```
**Gradual rollout strategy:**
1. Start with `warn` + `audit` on existing namespaces to identify violations
2. Fix non-compliant workloads (remove `privileged`, `hostNetwork`, root user,
etc.)
3. Enable `enforce` once all workloads pass
`restricted` blocks: running as root, privilege escalation, host
networking/PID/IPC, host path volumes, and most capabilities. The golden path
`workload-identity-pod.yaml` already complies.
## Network Policy Logging (Recommended)
With Dataplane V2 (golden path), you can enable logging for Network Policy
decisions. **Not a golden path default** -- recommended for security auditing.
```bash
gcloud container clusters update <CLUSTER_NAME> --region <REGION> \
--enable-network-policy-logging \
--quiet
```
This logs allowed and denied connections, useful for troubleshooting Network
Policy rules and auditing traffic flows.
## Common IAM Roles
The five most common predefined IAM roles for GKE:
| Role | Purpose | When to Use |
| ------------------------------- | ------------------- | -------------------- |
| `roles/container.admin` | Full control over | Platform team admins |
: : clusters and : managing cluster :
: : Kubernetes : lifecycle :
: : resources : :
| `roles/container.clusterAdmin` | Manage clusters but | Cluster operators |
: : not project-level : who create/delete :
: : IAM : clusters :
| `roles/container.developer` | Deploy workloads | Application |
: : (pods, services, : developers deploying :
: : deployments) : to existing clusters :
| `roles/container.viewer` | Read-only access to | Monitoring, |
: : clusters and : auditing, or :
: : Kubernetes : read-only dashboards :
: : resources : :
| `roles/container.clusterViewer` | List and get | CI/CD pipelines that |
: : cluster details : need cluster :
: : only : metadata :
> **Principle of least privilege**: Start with `roles/container.viewer` or
> `roles/container.developer` and escalate only as needed. Avoid granting
> `roles/container.admin` broadly.
## Service Accounts & Agents
- **GKE Service Agent**
(`service-<PROJECT_NUMBER>@container-engine-robot.iam.gserviceaccount.com`):
Automatically created. Manages nodes, networking, and cluster operations on
your behalf. Do not remove or modify its permissions.
- **Node Service Account**: By default, nodes use the Compute Engine default
service account. For production, create a dedicated SA with minimal
permissions and assign it via node pool config.
- **Workload Identity**: The recommended way for pods to access Google Cloud
APIs. Maps a Kubernetes ServiceAccount to a Google IAM ServiceAccount — see
[Workload Identity setup](#workload-identity-federation) above.
## Cross-Service Authentication Patterns
Common patterns for granting GKE workloads access to other Google Cloud
services:
```bash
# Grant a GKE workload access to Cloud Storage
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member "serviceAccount:<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
--role "roles/storage.objectViewer" \
--quiet
# Grant a GKE workload access to Cloud SQL
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member "serviceAccount:<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
--role "roles/cloudsql.client" \
--quiet
# Grant a GKE workload access to Pub/Sub
gcloud projects add-iam-policy-binding <PROJECT_ID> \
--member "serviceAccount:<GSA_NAME>@<PROJECT_ID>.iam.gserviceaccount.com" \
--role "roles/pubsub.subscriber" \
--quiet
```
In all cases, the GSA must be bound to a KSA via Workload Identity (see setup
above). The pod then uses the KSA to authenticate as the GSA.
Все файлы
0 файловУстановить gke-security
Скачайте файлы навыков и распакуйте их в каталог .claude/skills/.
Скачать ZIPКлонируйте репозиторий и скопируйте файлы навыка в свой проект.
git clone https://github.com/google/skills/tree/main/skills/cloud/gke-security # Copy SKILL.md to your .claude/skills/ directory
Копировать





Дом
