<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Phase 0: Infrastructure Foundation on Claude Code Wiki</title><link>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/</link><description>Recent content in Phase 0: Infrastructure Foundation on Claude Code Wiki</description><generator>Hugo</generator><language>en-us</language><atom:link href="http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/index.xml" rel="self" type="application/rss+xml"/><item><title>Amazon Bedrock Fundamentals</title><link>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/bedrock-fundamentals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/bedrock-fundamentals/</guid><description>&lt;h1 id="amazon-bedrock-fundamentals"&gt;Amazon Bedrock Fundamentals&lt;a class="anchor" href="#amazon-bedrock-fundamentals"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="what-is-amazon-bedrock"&gt;What Is Amazon Bedrock?&lt;a class="anchor" href="#what-is-amazon-bedrock"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Bedrock is AWS&amp;rsquo;s managed API gateway for foundation models. Instead of going directly to Anthropic for model access, Bedrock gives you a single AWS-native service that brokers access to foundation models through the same IAM, billing, networking, and compliance infrastructure you already use for everything else in AWS.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analogy for Cloud Foundry practitioners:&lt;/strong&gt; If Cloud Foundry abstracts away infrastructure for app developers, Bedrock does the same for model inference. Developers don&amp;rsquo;t think about where Claude is running &amp;ndash; they just call the API. The platform team controls the networking, access, cost, and compliance layer underneath.&lt;/p&gt;</description></item><item><title>Google Vertex AI Fundamentals</title><link>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/vertex-fundamentals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/vertex-fundamentals/</guid><description>&lt;h1 id="google-vertex-ai-fundamentals"&gt;Google Vertex AI Fundamentals&lt;a class="anchor" href="#google-vertex-ai-fundamentals"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="what-is-vertex-ai"&gt;What Is Vertex AI?&lt;a class="anchor" href="#what-is-vertex-ai"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Vertex AI is Google Cloud&amp;rsquo;s managed AI platform. Anthropic&amp;rsquo;s Claude models are available as partner models through Vertex AI, giving you a GCP-native API that uses the same IAM, billing, networking, and compliance infrastructure you already use for everything else in Google Cloud.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analogy for Cloud Foundry practitioners:&lt;/strong&gt; Same abstraction as Bedrock &amp;ndash; developers call an API, the platform team controls networking, access, cost, and compliance underneath. The difference is which cloud&amp;rsquo;s control plane you&amp;rsquo;re working with.&lt;/p&gt;</description></item><item><title>Azure Foundry Fundamentals</title><link>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/foundry-fundamentals/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/foundry-fundamentals/</guid><description>&lt;h1 id="azure-foundry-fundamentals"&gt;Azure Foundry Fundamentals&lt;a class="anchor" href="#azure-foundry-fundamentals"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="what-is-azure-ai-foundry"&gt;What Is Azure AI Foundry?&lt;a class="anchor" href="#what-is-azure-ai-foundry"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Azure AI Foundry (also called Microsoft Foundry) is Microsoft&amp;rsquo;s managed AI platform. Anthropic&amp;rsquo;s Claude models are available as partner models through Foundry, giving you an Azure-native API that uses the same Entra ID, billing, networking, and compliance infrastructure you already use for everything else in Azure.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Analogy for Cloud Foundry practitioners:&lt;/strong&gt; Same abstraction as Bedrock &amp;ndash; developers call an API, the platform team controls networking, access, cost, and compliance underneath. The difference is which cloud&amp;rsquo;s control plane you&amp;rsquo;re working with.&lt;/p&gt;</description></item><item><title>VPC Endpoint and PrivateLink Architecture</title><link>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/vpc-privatelink/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/vpc-privatelink/</guid><description>&lt;h1 id="vpc-endpoint-and-privatelink-architecture"&gt;VPC Endpoint and PrivateLink Architecture&lt;a class="anchor" href="#vpc-endpoint-and-privatelink-architecture"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="purpose"&gt;Purpose&lt;a class="anchor" href="#purpose"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Create a private connection between the corporate VPC and Amazon Bedrock. No internet gateway, no NAT, no public IPs needed. All traffic between the enterprise network and Bedrock stays within AWS&amp;rsquo;s private backbone.&lt;/p&gt;
&lt;h2 id="key-terraform-resources"&gt;Key Terraform Resources&lt;a class="anchor" href="#key-terraform-resources"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-hcl" data-lang="hcl"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# VPC Endpoint for Bedrock Runtime
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_vpc_endpoint&amp;#34; &amp;#34;bedrock_runtime&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; vpc_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; service_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;com.amazonaws.${var.region}.bedrock-runtime&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; vpc_endpoint_type&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Interface&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; private_dns_enabled&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="kt"&gt;true&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; subnet_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;private_subnet_ids&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; security_group_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;aws_security_group&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;bedrock_endpoint&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; policy&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;jsonencode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; Version&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;2012-10-17&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; Statement&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; Effect&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;Allow&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; Principal&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; Action&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bedrock:InvokeModel&amp;#34;&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="s2"&gt;&amp;#34;bedrock:InvokeModelWithResponseStream&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; Resource&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="p"&gt;]&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&lt;span class="c1"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="c1"&gt;# Security group: only allow traffic from developer subnets
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;aws_security_group&amp;#34; &amp;#34;bedrock_endpoint&amp;#34;&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; name_prefix&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;bedrock-endpoint-&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; vpc_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;aws_vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;main&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;id&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; &lt;span class="k"&gt;ingress&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; from_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; to_port&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="m"&gt;443&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; protocol&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;&amp;#34;tcp&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt; cidr_blocks&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;developer_subnet_cidrs&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;}&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="design-decisions"&gt;Design Decisions&lt;a class="anchor" href="#design-decisions"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="private-dns-enabled"&gt;Private DNS Enabled&lt;a class="anchor" href="#private-dns-enabled"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;With &lt;code&gt;private_dns_enabled = true&lt;/code&gt;, Claude Code&amp;rsquo;s standard Bedrock URLs resolve internally to the VPC endpoint&amp;rsquo;s private IP addresses. No application-level configuration changes needed beyond enabling Bedrock mode.&lt;/p&gt;</description></item><item><title>LLM Gateway Design</title><link>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/llm-gateway/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/llm-gateway/</guid><description>&lt;h1 id="llm-gateway-design"&gt;LLM Gateway Design&lt;a class="anchor" href="#llm-gateway-design"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="why-a-gateway"&gt;Why a Gateway?&lt;a class="anchor" href="#why-a-gateway"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The LLM gateway is the piece most enterprises skip and regret. Without it, you have 500 developer machines each holding AWS credentials and making direct Bedrock calls with no centralized visibility or control.&lt;/p&gt;
&lt;p&gt;Deploy &lt;strong&gt;LiteLLM&lt;/strong&gt; (open-source or enterprise cloud) or &lt;strong&gt;Kong AI Gateway&lt;/strong&gt; as an internal service between developers and Bedrock.&lt;/p&gt;
&lt;h2 id="what-the-gateway-provides"&gt;What the Gateway Provides&lt;a class="anchor" href="#what-the-gateway-provides"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id="per-userper-team-token-budgets-and-rate-limiting"&gt;Per-User/Per-Team Token Budgets and Rate Limiting&lt;a class="anchor" href="#per-userper-team-token-budgets-and-rate-limiting"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Set monthly token budgets per team or per user&lt;/li&gt;
&lt;li&gt;Default to Sonnet for routine work, gate Opus access to specific use cases&lt;/li&gt;
&lt;li&gt;Prevent a single developer from burning through the entire org&amp;rsquo;s budget&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="centralized-authentication"&gt;Centralized Authentication&lt;a class="anchor" href="#centralized-authentication"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The gateway holds AWS credentials for Bedrock &amp;ndash; developers don&amp;rsquo;t need AWS access&lt;/li&gt;
&lt;li&gt;Developers authenticate to the gateway via corporate SSO&lt;/li&gt;
&lt;li&gt;Eliminates 500 sets of AWS credentials on developer machines&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="requestresponse-logging-for-audit"&gt;Request/Response Logging for Audit&lt;a class="anchor" href="#requestresponse-logging-for-audit"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Log request metadata: who, when, which model, token count, latency&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t log prompt content if Zero Data Retention (ZDR) is active&lt;/li&gt;
&lt;li&gt;Feed metrics to CloudWatch or your observability stack&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="provider-abstraction"&gt;Provider Abstraction&lt;a class="anchor" href="#provider-abstraction"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Swap models or providers without touching developer configs&lt;/li&gt;
&lt;li&gt;Route to different models based on request characteristics&lt;/li&gt;
&lt;li&gt;A/B test model versions transparently&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="developer-facing-configuration"&gt;Developer-Facing Configuration&lt;a class="anchor" href="#developer-facing-configuration"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Once the gateway is deployed, the developer config becomes three environment variables:&lt;/p&gt;</description></item><item><title>Security Constraint Clarification</title><link>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/security-constraint-clarification/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>http://www.markalston.net/claude-code-wiki/enterprise-rollout/02-phase-0-infrastructure-foundation/security-constraint-clarification/</guid><description>&lt;h1 id="security-constraint-clarification"&gt;Security Constraint Clarification&lt;a class="anchor" href="#security-constraint-clarification"&gt;#&lt;/a&gt;&lt;/h1&gt;
&lt;h2 id="first-conversation-with-the-ciso"&gt;First Conversation with the CISO&lt;a class="anchor" href="#first-conversation-with-the-ciso"&gt;#&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&amp;ldquo;No code leaves the network&amp;rdquo; has three interpretations that lead to completely different architectures. &lt;strong&gt;Get written alignment before doing anything else.&lt;/strong&gt;&lt;/p&gt;
&lt;h3 id="level-1-no-code-to-anthropic-directly"&gt;Level 1: &amp;ldquo;No code to Anthropic directly&amp;rdquo;&lt;a class="anchor" href="#level-1-no-code-to-anthropic-directly"&gt;#&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;What it means:&lt;/strong&gt; Route through a cloud provider&amp;rsquo;s managed service (AWS Bedrock, Google Vertex AI). The enterprise&amp;rsquo;s contract is with AWS/GCP, not Anthropic directly. Data isn&amp;rsquo;t retained, isn&amp;rsquo;t used for training.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Architecture:&lt;/strong&gt; Claude Code → Bedrock (standard) or Vertex AI (standard)&lt;/p&gt;</description></item></channel></rss>