Izolacja bezpieczeństwa
Firewall sieciowy ogranicza dostęp zewnętrzny tylko do zatwierdzonych usług
Kontenery deweloperskie zapewniają idealną równowagę między potężnymi możliwościami automatyzacji Claude Code a wymaganiami bezpieczeństwa przedsiębiorstwa. Poprzez izolację Claude w konteneryzowanym środowisku, możesz bezpiecznie używać --dangerously-skip-permissions
dla operacji bez nadzoru, jednocześnie chroniąc system hosta i poświadczenia produkcyjne.
Izolacja bezpieczeństwa
Firewall sieciowy ogranicza dostęp zewnętrzny tylko do zatwierdzonych usług
Spójne środowisko
Identyczna konfiguracja dla wszystkich członków zespołu niezależnie od systemu hosta
Swoboda uprawnień
Pomiń bezpiecznie prompty o uprawnienia w izolowanym kontenerze
Szybkie wdrażanie
Nowi programiści produktywni w minuty, nie godziny
Zainstaluj wymagania
Sklonuj implementację referencyjną
git clone https://github.com/anthropics/claude-code.gitcd claude-code/.devcontainer
Otwórz w VS Code
code .
Otwórz ponownie w kontenerze
Remote-Containers: Reopen in Container
Claude Code automatycznie instaluje się i konfiguruje w kontenerze, gotowy do natychmiastowego użycia z zwiększonym bezpieczeństwem.
Implementacja referencyjna składa się z trzech głównych komponentów:
{ "name": "Claude Code Dev Container", "build": { "dockerfile": "Dockerfile", "context": ".." }, "features": { "ghcr.io/devcontainers/features/node:1": { "version": "20" } }, "customizations": { "vscode": { "extensions": [ "dbaeumer.vscode-eslint", "esbenp.prettier-vscode", "ms-azuretools.vscode-docker" ], "settings": { "terminal.integrated.defaultProfile.linux": "zsh", "editor.formatOnSave": true } } }, "postCreateCommand": ".devcontainer/init-firewall.sh", "remoteUser": "vscode", "mounts": [ "source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,consistency=cached", "source=claude-history,target=/home/vscode/.claude,type=volume" ], "runArgs": ["--cap-add=NET_ADMIN"]}
FROM mcr.microsoft.com/devcontainers/javascript-node:20
# Zainstaluj zależności systemoweRUN apt-get update && apt-get install -y \ git \ zsh \ fzf \ ripgrep \ iptables \ && rm -rf /var/lib/apt/lists/*
# Skonfiguruj ulepszenia shellRUN sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
# Zainstaluj Claude Code globalnieRUN npm install -g @anthropic-ai/claude-code
# Utwórz użytkownika non-rootARG USERNAME=vscodeARG USER_UID=1000ARG USER_GID=$USER_UID
RUN groupadd --gid $USER_GID $USERNAME \ && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME
USER $USERNAME
Skrypt init-firewall.sh
implementuje ścisły firewall domyślnie odmawiający:
#!/bin/bash
# Reset reguł firewallsudo iptables -Fsudo iptables -X
# Domyślne polityki: odmów wszystkiegosudo iptables -P INPUT DROPsudo iptables -P FORWARD DROPsudo iptables -P OUTPUT DROP
# Pozwól na loopbacksudo iptables -A INPUT -i lo -j ACCEPTsudo iptables -A OUTPUT -o lo -j ACCEPT
# Pozwól na ustanowione połączeniasudo iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Whitelist podstawowych usługALLOWED_DOMAINS=( "api.anthropic.com" # Claude API "statsig.anthropic.com" # Telemetria "registry.npmjs.org" # Pakiety npm "github.com" # Operacje Git "raw.githubusercontent.com" # Dostęp do surowych plików)
for domain in "${ALLOWED_DOMAINS[@]}"; do # Rozwiąż i pozwól na każde IP for ip in $(dig +short $domain A); do sudo iptables -A OUTPUT -d $ip -j ACCEPT donedone
# Pozwól na zapytania DNSsudo iptables -A OUTPUT -p udp --dport 53 -j ACCEPTsudo iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
# Pozwól na SSH dla gitsudo iptables -A OUTPUT -p tcp --dport 22 -j ACCEPT
echo "✅ Firewall skonfigurowany z ograniczonym dostępem"
Rozszerz Dockerfile o standardowy zestaw narzędzi twojego zespołu:
# Dodaj środowisko deweloperskie PythonRUN apt-get update && apt-get install -y \ python3 \ python3-pip \ python3-venv \ && rm -rf /var/lib/apt/lists/*
# Zainstaluj popularne narzędzia PythonRUN pip3 install --user \ black \ flake8 \ mypy \ pytest
# Zainstaluj GoRUN curl -OL https://go.dev/dl/go1.21.linux-amd64.tar.gz \ && sudo tar -C /usr/local -xzf go1.21.linux-amd64.tar.gz \ && rm go1.21.linux-amd64.tar.gz
ENV PATH=$PATH:/usr/local/go/bin
# Zainstaluj narzędzia GoRUN go install golang.org/x/tools/gopls@latestRUN go install github.com/go-delve/delve/cmd/dlv@latest
# Zainstaluj RustRUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y
ENV PATH="/home/vscode/.cargo/bin:${PATH}"
# Zainstaluj dodatkowe komponentyRUN rustup component add rustfmt clippy
Modyfikuj reguły firewall dla potrzeb twojej organizacji:
# Dodaj dostęp do prywatnego rejestruPRIVATE_REGISTRY="registry.company.com"for ip in $(dig +short $PRIVATE_REGISTRY A); do sudo iptables -A OUTPUT -d $ip -j ACCEPTdone
# Dodaj dostęp do wewnętrznych APIsudo iptables -A OUTPUT -d 10.0.0.0/8 -j ACCEPT # Sieć prywatnasudo iptables -A OUTPUT -d 172.16.0.0/12 -j ACCEPT # Sieci Docker
# Dodaj konkretne porty dla usługsudo iptables -A OUTPUT -p tcp --dport 5432 -j ACCEPT # PostgreSQLsudo iptables -A OUTPUT -p tcp --dport 6379 -j ACCEPT # Redis
Skonfiguruj trwałe przechowywanie dla różnych scenariuszy:
{ "mounts": [ // Klucze SSH dla operacji git "source=${localEnv:HOME}/.ssh,target=/home/vscode/.ssh,type=bind,readonly",
// Poświadczenia AWS (jeśli potrzebne) "source=${localEnv:HOME}/.aws,target=/home/vscode/.aws,type=bind,readonly",
// Trwała historia Claude "source=claude-history,target=/home/vscode/.claude,type=volume",
// Udostępniona konfiguracja zespołu "source=${localWorkspaceFolder}/.devcontainer/team-config,target=/home/vscode/.config/team,type=bind,readonly" ]}
Skonfiguruj ustawienia proxy w kontenerze:
# Dodaj do DockerfileARG HTTP_PROXYARG HTTPS_PROXYARG NO_PROXY
ENV HTTP_PROXY=${HTTP_PROXY}ENV HTTPS_PROXY=${HTTPS_PROXY}ENV NO_PROXY=${NO_PROXY}
# Skonfiguruj npm dla proxyRUN if [ -n "$HTTP_PROXY" ]; then \ npm config set proxy $HTTP_PROXY && \ npm config set https-proxy $HTTPS_PROXY; \ fi
Udostępnij spójne ustawienia Claude Code:
{ "permissions": { "allow": ["*"], // Bezpieczne w izolowanym kontenerze "deny": [] }, "env": { "CLAUDE_CODE_ENABLE_AUDIT_LOGGING": "1" }, "hooks": { "PreEdit": "npm run lint --fix", "PostEdit": "npm run format" }}
Montuj i zastosuj w postCreateCommand
:
# Skopiuj ustawienia zespołucp /home/vscode/.config/team/claude-settings.json ~/.claude/settings.json
Zarządzanie poświadczeniami
Nigdy nie umieszczaj poświadczeń w obrazach kontenerów. Używaj montowania woluminów lub zmiennych środowiskowych.
Skanowanie obrazów
Regularnie skanuj obrazy kontenerów pod kątem luk używając narzędzi takich jak Trivy lub Snyk.
Zasada najmniejszych uprawnień
Uruchamiaj kontenery jako użytkownicy non-root i ogranicz możliwości do minimum wymaganego.
Monitorowanie sieci
Loguj i monitoruj połączenia wychodzące aby wykryć nietypową aktywność.
Dodaj logowanie do śledzenia działań Claude:
# Dodaj do init-firewall.sh# Loguj wszystkie zaakceptowane połączeniasudo iptables -A OUTPUT -j LOG --log-prefix "CLAUDE-ALLOW: " --log-level 4
# Loguj wszystkie odrzucone połączeniasudo iptables -A OUTPUT -j LOG --log-prefix "CLAUDE-DENY: " --log-level 4
Wyświetl logi za pomocą:
sudo dmesg | grep CLAUDE-
Twórz izolowane środowiska dla różnych klientów:
# Kontener klienta Acd ~/projects/client-acode . # Otwiera z devcontainer specyficznym dla klienta-a
# Kontener klienta Bcd ~/projects/client-bcode . # Całkowicie odizolowany od klienta-a
Używaj devcontainers w CI/CD:
name: Claude Code Testing
on: [push, pull_request]
jobs: test: runs-on: ubuntu-latest container: image: your-registry/claude-devcontainer:latest options: --cap-add=NET_ADMIN
steps: - uses: actions/checkout@v3
- name: Run Claude Code tests run: | claude -p "Uruchom wszystkie testy i napraw wszelkie błędy"
Standaryzuj środowiska deweloperskie:
Utwórz kontener zespołu
FROM anthropic/claude-devcontainer:base
# Dodaj narzędzia specyficzne dla zespołuCOPY .devcontainer/team-tools.sh /tmp/RUN /tmp/team-tools.sh
Udokumentuj w README
## Pierwsze kroki1. Sklonuj to repozytorium2. Otwórz w VS Code3. Kliknij "Reopen in Container"4. Uruchom `claude` aby zacząć kodować!
Wszystko jest wstępnie skonfigurowane - żadna konfiguracja nie jest wymagana.
# Czyste przebudowaniedocker system prune -acode . # Ponów próbę otwarcia w kontenerze
# Sprawdź zasoby Dockerdocker system df# Zwiększ pamięć Docker Desktop jeśli potrzeba
# Testuj rozwiązywanie DNSdig api.anthropic.com
# Sprawdź reguły firewallsudo iptables -L -n -v
# Zweryfikuj rozwiązywanie dozwolonych domenfor domain in api.anthropic.com github.com; do echo "Testowanie $domain:" nc -zv $domain 443done
# Napraw problemy z własnościąsudo chown -R vscode:vscode /home/vscode
# Reset uprawnień Claude Coderm -rf ~/.claude/settings.jsonclaude logoutclaude login
Skonfiguruj zasoby kontenera w Docker Desktop lub docker-compose.yml
:
version: '3.8'services: devcontainer: build: . mem_limit: 8g cpus: 4 volumes: - /tmp/.X11-unix:/tmp/.X11-unix:rw
Przyspiesz przebudowy z mount cache BuildKit:
# Cache pobierania pakietówRUN --mount=type=cache,target=/var/cache/apt \ apt-get update && apt-get install -y git zsh
# Cache pakietów npmRUN --mount=type=cache,target=/root/.npm \ npm install -g @anthropic-ai/claude-code
Integracja CI/CD
Automatyzuj przepływy pracy z Claude w swoich potokach
Przepływy zespołowe
Skaluj użycie devcontainer w całej organizacji
Wzmocnienie bezpieczeństwa
Zaawansowane konfiguracje bezpieczeństwa dla kontenerów