Mobil cihaz yönetimi (MDM) ile kodlama ajanlarını dağıtmak

Important

Bu özellik Beta sürümündedir. Bunu kullanmak için bir çalışma alanı yöneticisinin Previews sayfasından Unity Gateway Managed Configuration'ı açması gerekir. Bkz. Azure Databricks önizlemelerini yönetme.

Takımınızın kodlama ajanı kurulumunu dağıtmak için mobil cihaz yönetimi (MDM) ve Unity Gateway CLI'yi kullanın. Yöneticiler yapılandırmayı çalışma alanında yayınlar, geliştiriciler ise alışık oldukları ajanları yapılandırılmış modeller, MCP sunucuları ve becerilerle kullanır.

MDM yazılımınız, her cihazda yönetici ayrıcalıkları olan bir provisioning script çalıştırır. Betik, ug öğesini, yani Databricks CLI'yi ve kodlama ajanlarını makine genelinde yükler, ardından ug configure çalıştırır ve bu da tüm cihaz için çalışma alanının kodlama ajanı yapılandırmasını yükler. Geliştiriciler daha sonra yönetici ayrıcalıkları olmadan ajanlarını başlatır ve kendi Azure Databricks hesaplarıyla giriş yaparlar.

Note

MDM provisioning, makine genelinde ayarlara sahip Claude Code ve Codex'i yapılandırır. Visual Studio Code'da GitHub Copilot CLI veya GitHub Copilot'u yapılandırmaz. Geliştiriciler GitHub Copilot'u kendileri ug configure --agents copilot ile kurar.

MDM ile dağıtıma geçin

Kodlama ajanlarını yapılandırma

Ekibinizin kullandığı ajanları etkinleştirin ve yapılandırmayı çalışma alanınızda yayınlayın. Kodlama ajanlarını yapılandırma bölümünü inceleyin.

Her etkinleştirilmiş ajanın, bir sonraki adımdaki hizmet sorumlusunun kullanabileceği yapılandırmada en az bir modele ihtiyacı vardır. Örneğin, Claude Code Claude modellerine ihtiyaç duyar. ug configure Modeli olmayan herhangi bir ajanı yok sayar.

Bir sağlama hizmet sorumlusu oluştur

MDM politikası, yalnızca çalıştığı sırada yayımlanmış yapılandırmayı okumak için bir service principal kullanır. Geliştiriciler kendi kimlikleriyle kimlik doğrular.

  1. Çalışma alanınıza ug-mdm-provisioning, örneğin .

  2. Yalnızca Workspace erişim iznini etkin bırakın. service principal'in başka haklara ihtiyacı yoktur. Bkz. Yetkilendirmeleri yönetme.

  3. Yayınlanan yapılandırmadaki modellere, MCP sunucularına ve becerilere, gerekli Unity Kataloğu ayrıcalıkları dahil olmak üzere hizmet sorumlusuna erişim hakkı ver. Bkz. modele, MCP sunucularına ve becerilere erişim verme.

  4. Hizmet sorumlusunun Sırlar sekmesinde Gizli dizi oluştur seçeneğine tıklayın. Rotasyon politikanıza uygun bir geçerlilik süresi seçin. Kapsam altında Diğer API'lere tıklayın, unity-catalog ve ai-gateway kapsamlarını ekleyin ve her birini Read olarak ayarlayın. Bkz 1. Adım: OAuth gizli anahtarı oluşturma.

    Diğer API'ler altında eklenen ai-gateway ve unity-catalog kapsamlarıyla OAuth gizli diyalogu oluşturun, her biri Oku olarak ayarlanmış

  5. Müşteri kimliğini ve gizli anahtarını kopyalayın. Diyalogu kapattıktan sonra sırrı tekrar göremezsiniz.

MDM yazılımınızla dağıtın

Important

ug öğesini, kök kullanıcının ana dizininde değil, cihazdaki tüm kullanıcıların çalıştırabileceği paylaşılan bir konuma kur. ug configure, ug yolunu makine çapında ajan ayarlarına kaydeder ve her geliştiricinin ajanı, kimlik doğrulamak için ug uygulamasını bu yoldan çalıştırır.

Jamf Pro (macOS)

Bu adımlar, Claude Code ve Codex'i Jamf Pro ile macOS cihazlarına dağıtır. Her cihaz için gerekenler:

  • Çalışma alanı URL'nize ağ erişimi, PyPI (pypi.org ve files.pythonhosted.org), GitHub (github.com ve raw.githubusercontent.com), astral.shve downloads.claude.ai.
  • Xcode için Komut Satırı Araçları veya betiğin bunları softwareupdate ile yüklemesine izin verilmesi. ug GitHub'tan yüklenir ve bunun için git gerekir.

Komut dosyasını ekle

  1. Jamf Pro'da, Settings > Computer Management > Scripts > New bölümüne gidin ve komut dosyasını Unity Gateway provision olarak adlandırın.

  2. Script sekmesine aşağıdaki betiği yapıştırın:

    Provisioning script'i görüntüleyin
    #!/bin/bash
    #
    # macOS MDM provisioning script, written for Jamf Pro policies: install
    # ug, the Databricks CLI, Claude Code and Codex machine-wide and run
    # `ug configure` as root, which installs the workspace policy at
    # /etc/unitygateway/managed-settings.json.
    # Users then launch with no sudo:
    #
    #   UG_SKIP_OS_SETTINGS=1 ug claude    (or: ug codex)
    #
    # Jamf parameters ($1-$3 are reserved by Jamf):
    #   $4  Databricks workspace URL, starting with https://
    #   $5  Service principal OAuth client id
    #   $6  Service principal OAuth client secret
    #
    # The token is used for this run only; developers sign in with their own
    # OAuth. Needs access to PyPI, GitHub, astral.sh and downloads.claude.ai.
    
    set -euo pipefail
    umask 022
    export HOME=/var/root
    export PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
    WORKSPACE="${4%/}"
    PREFIX=/usr/local/unity-gateway
    CLAUDE_RELEASES=https://downloads.claude.ai/claude-code-releases
    CODEX_RELEASES=https://github.com/openai/codex/releases/latest/download
    UG_REPO=https://github.com/databricks/unity-gateway
    UV_URL=https://astral.sh/uv/install.sh
    CLI_URL=https://raw.githubusercontent.com
    CLI_URL="$CLI_URL/databricks/setup-cli/main/install.sh"
    CLT_MARKER=/tmp/.com.apple.dt.CommandLineTools
    CLT_MARKER="$CLT_MARKER.installondemand.in-progress"
    
    # ug must be in a shared path: the machine-wide agent settings
    # run it by absolute path for every user.
    export UV_TOOL_DIR="$PREFIX/tools"
    export UV_TOOL_BIN_DIR=/usr/local/bin
    export UV_PYTHON_INSTALL_DIR="$PREFIX/python"
    export UV_PYTHON_PREFERENCE=only-managed
    mkdir -p /usr/local/bin
    
    # Get ug from git
    if ! xcode-select -p >/dev/null 2>&1; then
      touch "$CLT_MARKER"
      clt="$(softwareupdate -l 2>/dev/null \
        | sed -n 's/^\* Label: \(Command Line Tools.*\)$/\1/p' \
        | tail -n1)"
      softwareupdate -i "$clt"
      rm -f "$CLT_MARKER"
    fi
    
    if ! command -v uv >/dev/null; then
      curl -LsSf "$UV_URL" \
        | env UV_INSTALL_DIR=/usr/local/bin UV_NO_MODIFY_PATH=1 sh
    fi
    uv tool install --force "git+$UG_REPO"
    
    if [ ! -x /usr/local/bin/databricks ]; then
      curl -fsSL "$CLI_URL" | sh
    fi
    
    # Download into a private temporary directory, not fixed /tmp paths
    tmp="$(mktemp -d)"
    trap 'rm -rf "$tmp"' EXIT
    
    # Install Claude Code
    if [ ! -x /usr/local/bin/claude ]; then
      case "$(uname -m)" in
        arm64) platform=darwin-arm64 ;;
        *) platform=darwin-x64 ;;
      esac
      version="$(curl -fsSL "$CLAUDE_RELEASES/latest")"
      base="$CLAUDE_RELEASES/$version"
      checksum="$(curl -fsSL "$base/manifest.json" \
        | plutil -extract "platforms.$platform.checksum" raw -o - -)"
      curl -fsSL -o "$tmp/claude" "$base/$platform/claude"
      echo "$checksum  $tmp/claude" | shasum -a 256 -c -
      install -m 755 "$tmp/claude" /usr/local/bin/claude
    fi
    
    # Install Codex
    if [ ! -x /usr/local/bin/codex ]; then
      case "$(uname -m)" in
        arm64) target=aarch64-apple-darwin ;;
        *) target=x86_64-apple-darwin ;;
      esac
      curl -fsSL "$CODEX_RELEASES/codex-$target.tar.gz" \
        | tar -xzf - -C "$tmp" "codex-$target"
      install -m 755 "$tmp/codex-$target" /usr/local/bin/codex
    fi
    
    # Get short lived credential; curl reads the client id and secret from
    # stdin (-K -) so they don't appear in its arguments.
    resp="$(printf 'user = "%s:%s"\n' "$5" "$6" \
      | curl -sS -K - \
          -d grant_type=client_credentials \
          --data-urlencode 'scope=ai-gateway:read unity-catalog:read' \
          "$WORKSPACE/oidc/v1/token")"
    if ! DATABRICKS_BEARER="$(printf '%s' "$resp" \
        | plutil -extract access_token raw -o - -)"; then
      echo "Token request to $WORKSPACE failed: $resp" >&2
      exit 1
    fi
    export DATABRICKS_BEARER
    
    ug configure --global --workspace "$WORKSPACE" \
      --agents claude,codex </dev/null
    
  3. Seçenekler sekmesinde Parametre 4Workspace URL, Parametre 5Client ID ve Parametre 6Client secret etiketleri.

  4. Kaydet'e tıklayın.

Script, Claude Code, Codex ve Databricks CLI'yı sadece eksik olduklarında yükler ve her çalışmada yeniden yükler ug . İlk kurulumdan sonra ajanları ve CLI'yı güncellemez. Güncel tutmak için, cihazlarınızdaki yazılımı güncelleme şeklinize uygun şekilde scripti değiştirin.

İlkeyi oluşturma

  1. Bilgisayarlar > İlkeler > Yeni öğesine gidin.

  2. Genel'de, Tetikleyici'yi Yinelenen check-in olarak ve Yürütme SıklığınıGünde bir kez olarak ayarlayın. Her cihaz her gün ug configure çalıştırır, bu da çalışma alanında yayınladığınız yapılandırma güncellemelerini uygular.

  3. Scripts'te, Priority değeri Unity Gateway provision olarak ayarlanmış ekleyin. Parametreleri girin:

    Parametre Değer
    4 (Çalışma Alanı URL’si) Çalışma alanı URL'niz https:// ile başlar.
    5 (İstemci Kimliği) Hizmet sorumlusunun istemci kimliği.
    6 (Müşteri gizli) service principal’ın gizli anahtarı.
  4. Scope'ta hedeflenecek cihazları seçin. Küçük bir pilot cihaz grubuyla başlayın.

  5. Kaydet'e tıklayın. Jamf Pro, bir sonraki check-in sırasında her hedef cihazda politikayı uygular.

Warning

Jamf Pro, politika parametrelerini komut satırı argümanları olarak script'e iletir. Herhangi bir yerel kullanıcı, örneğin betik çalışırken ps istemci kimliğini ve istemci sırrını okuyabilir; politikayı görebilen Jamf Pro yöneticileri de bunları okuyabilir. Script, kimlik bilgilerini veya tokenı diske yazmaz. Bir sızıntının etkisini sınırlamak için, hizmet sorumlusuna yalnızca Workspace erişim hakkı verin, gizli anahtar için kısa bir geçerlilik süresi kullanın ve gizli anahtarı düzenli olarak yenileyin.

Ajanları geliştirici makinelerinde başlatın

Politika bir cihazda çalıştıktan sonra, geliştiriciler ajanlarını yönetici ayrıcalığı olmayan bir terminalden başlatırlar:

UG_SKIP_OS_SETTINGS=1 ug claude
UG_SKIP_OS_SETTINGS=1 ug codex

UG_SKIP_OS_SETTINGS=1, ug'e MDM politikasının yüklediği ayarları kullanmasını söylüyor. Geliştiriciler, bunu her oturumda kullanmak için shell profillerinde UG_SKIP_OS_SETTINGS=1 ayarlayabilirler. İlk açılışta, geliştiricinin Azure Databricks'te oturum açtığı bir tarayıcı açılır. Kodlama ajanı etkinliği daha sonra hizmet prensibine değil, bireysel geliştiriciye atfedilir.

Başlatma komutunu kısaltmak için, geliştiricilere değişkeni ayarlayan ve ajanı başlatan takma adlar verin; örneğin MDM ile dağıtılan bir shell profilinde:

alias claude='UG_SKIP_OS_SETTINGS=1 ug claude'
alias codex='UG_SKIP_OS_SETTINGS=1 ug codex'

Claude masaüstünü dağıtın

Aynı ug configure çalıştırma ayrıca cihazdaki her kullanıcı için Claude masaüstü uygulamasını da yapılandırıyor. Claude masaüstünü desteklemek için, script çalışmadan ug configureönce onu provisioning scriptine yükleyin. Yukarıdaki Jamf Pro scripti Claude masaüstünü yüklemez.

Bir kullanıcı Claude masaüstünü ilk açtığında, kendi Azure Databricks hesabıyla giriş yapar. Kullanıcılar ayrıca claude.ai projelerini ve sohbetlerini de içe aktarabilirler.

Dağıtımı doğrulayın

Pilot cihazda, geliştiricinin işletim sistemi hesabıyla giriş yapın ve şu noktayı kontrol edin:

  • Ajan, yapılandırılmış bir model kullanarak başlatılır ve yanıt verir.
  • Yapılandırılmış MCP sunucuları ve becerileri mevcuttur ve geliştirici bunları kullanabilir.
  • İstekler Unity Gateway kullanım takibinde görünür ve izleme etkinse trace’ler görünür. Bkz. Kodlama ajan etkinliğini izlemek.

Bu kontrolleri sağlama betiklerini veya yayımlanan yapılandırmayı değiştirdikten sonra tekrarlayın.

Kimlik bilgilerini ve yapılandırmayı sürdürün

Service principal'ın gizli anahtarını döndürmek için:

  1. Hizmet sorumlusu için yeni bir sır oluşturun.
  2. MDM poliçenizdeki sırrı güncelleyin.
  3. İlke cihazlarınızda çalıştıktan sonra, eski gizli anahtarı silin.

Sır ele geçirilirse, hemen yenileyin ve eski sırrı silin. Script'in talep ettiği token kısa ömürlüdür ve script onu cihaza yazmaz, bu yüzden cihaz başına iptal edilecek bir kimlik bilgisi yoktur.

Yapılandırmayı güncellemek için çalışma alanında değişiklikleri yayınlayın. Cihazlar, ilke bir sonraki kez çalıştığında bunları uygular. Sync yapılandırma güncellemelerine bakın.

Troubleshooting

Error Cause
Token request to ... failed: {"error":"invalid_client"...} MDM poliçesindeki istemci kimliği veya gizli anahtar yanlıştır ya da gizli anahtarın süresi dolmuş.
Token request ... failed: ... Scopes ... are not assigned to the client Sırrın unity-catalog:read ve ai-gateway:read kapsamları yok.
None of the coding agents enabled by your workspace configuration are available Hiçbir etkinleştirilmiş ajan, servis sorumlusunun kullanabileceği modellere sahip değildir; örneğin, Claude Code Claude modelleri olmadan yapılandırılmıştır.