At the organization level Claude Code stops being a personal tool and becomes a deployment that has a provider, a network, a policy and telemetry. It can work through the direct Anthropic API or a subscription, Claude Platform on AWS, Amazon Bedrock, Google Cloud Agent Platform, Microsoft Foundry or a compatible LLM gateway. The provider choice is not cosmetic: it determines identity, billing, model identifiers, regional availability, caching and the audit surface - and so it is made consciously.
Each option has its own bundle of credentials, billing and the team's area of responsibility. It helps to gather them into a table once: a subscription answers for seats and limits, the Anthropic API for the key lifecycle and spend limits, Bedrock and Agent Platform for IAM, regions and model access, Foundry for RBAC and endpoints, a gateway for protocol fidelity and logging. You return to this map when choosing or switching a provider, to understand who is responsible for what.
| Option | Credentials / billing | Team responsibility |
|---|---|---|
| Claude subscription | claude.ai login | Seats, org policy, limits |
| Anthropic API | Console key / workload identity | Key lifecycle, spend limits |
| AWS / Bedrock | AWS identity / IAM | Regions, model access, IAM |
| Google Agent Platform | Google identity / IAM | Project, region, model permissions |
| Microsoft Foundry | Azure identity / RBAC | Endpoint, deployments, RBAC |
| LLM gateway | Gateway auth + upstream | Protocol fidelity, logs, availability |
A provider is rolled out in order, not enabled all at once. First you create a separate non-production pilot identity; enable the needed model access and region, pinning full versions if required; configure the provider variables per the official page; check /status, /doctor, a simple prompt and a tool call; separately check streaming, prompt caching, thinking blocks, token counting and error behavior. And only then do you enable managed settings and telemetry - on an already verified base.
Two provider operation rules matter more than the rest. Do not mix several providers' variables in one shell - otherwise a request goes to the wrong place; /status here is mandatory evidence of where the traffic really goes. And remember that dynamic model aliases like sonnet and opus may resolve differently through a provider or gateway. For production automation the model and provider are better pinned after a test, with a pre-thought migration cadence, rather than relying on the alias's stability.
Gateway fidelity is a separate and underrated topic. A gateway must correctly support the Messages API semantics: streaming events, tool use and results, thinking blocks, prompt caching, token counting, beta headers and model mapping. Simple compatibility of one text prompt is not enough - it is exactly on the complex capabilities that things break. Tool search requires preserving the corresponding protocol blocks, and its logs must not store secrets, full prompts or thinking without an explicit data policy, and an upstream error must not be turned into an empty successful response.
The network in an enterprise is two different levels that must not be confused. A corporate proxy or firewall must allow the documented endpoints of Anthropic and the provider, updates, authentication and optional telemetry; HTTP_PROXY, custom CAs and mTLS are configured per the official page. Disabling TLS verification as a permanent solution to a certificate error is not allowed - you install the corporate CA correctly. And importantly: the sandbox network allowlist is subprocess egress, while the corporate proxy is the egress of Claude Code's and the provider's own traffic. Different levels.
Managed policy centrally cements the mandatory. Through it you set permission deny and ask, disabling dangerous modes, allowed models, providers and the login organization, managed-only MCP and marketplace restrictions, sandbox domains and credentials, the update channel and minimum version, the telemetry destination and privacy choices. It is deployed to a canary group first: invalid entries may be stripped with a warning, and security-sensitive allowlists fail closed by documented rules, and /doctor on a reference machine is a mandatory part of the rollout.
Claude Code exports telemetry via OpenTelemetry, and it too is configured wisely. It helps to see a minimal configuration once: enable telemetry and set the OTLP exporters and endpoint. You limit cardinality - dimensions by user, session and project create both cost and privacy risk; Claude Code itself removes OTEL variables from spawned subprocesses, including hooks, so they do not accidentally export to the same collector. You observe adoption, cost, latency, tool errors, permission denials and version distribution - but not source content without a documented necessity.
# Minimal telemetry via OpenTelemetry
export CLAUDE_CODE_ENABLE_TELEMETRY=1
export OTEL_METRICS_EXPORTER=otlp
export OTEL_LOGS_EXPORTER=otlp
export OTEL_EXPORTER_OTLP_ENDPOINT=https://otel.example.com
claude
# limit cardinality (user/session/project); OTEL_* is removed from subprocesses