6 6
7> 配置 Claude Code 以使用 Anthropic 运营的 Claude API,支持 AWS 身份验证、IAM 访问控制和 AWS Marketplace 计费。7> 配置 Claude Code 以使用 Anthropic 运营的 Claude API,支持 AWS 身份验证、IAM 访问控制和 AWS Marketplace 计费。
8 8
9export const ContactSalesCard = ({surface}) => {
10 const utm = content => `utm_source=claude_code&utm_medium=docs&utm_content=${surface}_${content}`;
11 const iconArrowRight = (size = 13) => <svg width={size} height={size} viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.5" strokeLinecap="round" strokeLinejoin="round" aria-hidden="true">
12 <line x1="5" y1="12" x2="19" y2="12" />
13 <polyline points="12 5 19 12 12 19" />
14 </svg>;
15 const STYLES = `
16.cc-cs {
17 --cs-slate: #141413;
18 --cs-clay: #d97757;
19 --cs-clay-deep: #c6613f;
20 --cs-gray-000: #ffffff;
21 --cs-gray-700: #3d3d3a;
22 --cs-border-default: rgba(31, 30, 29, 0.15);
23 font-family: inherit;
24}
25.dark .cc-cs {
26 --cs-slate: #f0eee6;
27 --cs-gray-000: #262624;
28 --cs-gray-700: #bfbdb4;
29 --cs-border-default: rgba(240, 238, 230, 0.14);
30}
31.cc-cs-card {
32 display: flex; align-items: center; justify-content: space-between;
33 gap: 16px; padding: 14px 16px; margin: 0;
34 background: var(--cs-gray-000); border: 0.5px solid var(--cs-border-default);
35 border-radius: 8px; flex-wrap: wrap;
36}
37.cc-cs-text { font-size: 13px; color: var(--cs-gray-700); line-height: 1.5; flex: 1; min-width: 240px; }
38.cc-cs-text strong { font-weight: 550; color: var(--cs-slate); }
39.cc-cs-actions { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
40.cc-cs-btn-clay {
41 display: inline-flex; align-items: center; gap: 8px;
42 background: var(--cs-clay-deep); color: #fff; border: none;
43 border-radius: 8px; padding: 8px 14px;
44 font-size: 13px; font-weight: 500;
45 transition: background-color 0.15s; white-space: nowrap;
46}
47.cc-cs-btn-clay:hover { background: var(--cs-clay); }
48.cc-cs-btn-ghost {
49 display: inline-flex; align-items: center; gap: 8px;
50 background: transparent; color: var(--cs-gray-700);
51 border: 0.5px solid var(--cs-border-default);
52 border-radius: 8px; padding: 8px 14px;
53 font-size: 13px; font-weight: 500;
54}
55.cc-cs-btn-ghost:hover { background: rgba(0, 0, 0, 0.04); }
56.dark .cc-cs-btn-ghost:hover { background: rgba(255, 255, 255, 0.04); }
57@media (max-width: 720px) {
58 .cc-cs-actions { width: 100%; }
59}
60`;
61 return <div className="cc-cs not-prose">
62 <style>{STYLES}</style>
63 <div className="cc-cs-card">
64 <div className="cc-cs-text">
65 <strong>Deploying Claude Code across your organization?</strong> Talk to sales about enterprise plans, SSO, and centralized billing.
66 </div>
67 <div className="cc-cs-actions">
68 <a href={`https://claude.com/pricing?${utm('view_plans')}#plans-business`} className="cc-cs-btn-ghost">
69 View plans
70 </a>
71 <a href={`https://claude.com/contact-sales?${utm('contact_sales')}`} className="cc-cs-btn-clay">
72 Contact sales {iconArrowRight()}
73 </a>
74 </div>
75 </div>
76 </div>;
77};
78
79export const Experiment = ({flag, treatment, children}) => {
80 const VID_KEY = 'exp_vid';
81 const CONSENT_COUNTRIES = new Set(['AT', 'BE', 'BG', 'HR', 'CY', 'CZ', 'DK', 'EE', 'FI', 'FR', 'DE', 'GR', 'HU', 'IE', 'IT', 'LV', 'LT', 'LU', 'MT', 'NL', 'PL', 'PT', 'RO', 'SK', 'SI', 'ES', 'SE', 'RE', 'GP', 'MQ', 'GF', 'YT', 'BL', 'MF', 'PM', 'WF', 'PF', 'NC', 'AW', 'CW', 'SX', 'FO', 'GL', 'AX', 'GB', 'UK', 'AI', 'BM', 'IO', 'VG', 'KY', 'FK', 'GI', 'MS', 'PN', 'SH', 'TC', 'GG', 'JE', 'IM', 'CA', 'BR', 'IN']);
82 const fnv1a = s => {
83 let h = 0x811c9dc5;
84 for (let i = 0; i < s.length; i++) {
85 h ^= s.charCodeAt(i);
86 h += (h << 1) + (h << 4) + (h << 7) + (h << 8) + (h << 24);
87 }
88 return h >>> 0;
89 };
90 const bucket = (seed, vid) => fnv1a(fnv1a(seed + vid) + '') % 10000 < 5000 ? 'control' : 'treatment';
91 const [decision] = useState(() => {
92 const params = new URLSearchParams(location.search);
93 const preBucketed = document.documentElement.dataset['gb_' + flag.replace(/-/g, '_')];
94 const force = params.get('gb-force');
95 if (force) {
96 for (const p of force.split(',')) {
97 const [k, v] = p.split(':');
98 if (k === flag) return {
99 variant: v || 'treatment',
100 track: false
101 };
102 }
103 }
104 if (navigator.globalPrivacyControl) {
105 return {
106 variant: 'control',
107 track: false
108 };
109 }
110 const prefsMatch = document.cookie.match(/(?:^|; )anthropic-consent-preferences=([^;]+)/);
111 if (prefsMatch) {
112 try {
113 if (JSON.parse(decodeURIComponent(prefsMatch[1])).analytics !== true) {
114 return {
115 variant: 'control',
116 track: false
117 };
118 }
119 } catch {
120 return {
121 variant: 'control',
122 track: false
123 };
124 }
125 } else {
126 const country = params.get('country')?.toUpperCase() || (document.cookie.match(/(?:^|; )cf_geo=([A-Z]{2})/) || [])[1];
127 if (!country || CONSENT_COUNTRIES.has(country)) {
128 return {
129 variant: 'control',
130 track: false
131 };
132 }
133 }
134 let vid;
135 try {
136 const ajsMatch = document.cookie.match(/(?:^|; )ajs_anonymous_id=([^;]+)/);
137 if (ajsMatch) {
138 vid = decodeURIComponent(ajsMatch[1]).replace(/^"|"$/g, '');
139 } else {
140 vid = localStorage.getItem(VID_KEY);
141 if (!vid) {
142 vid = crypto.randomUUID();
143 }
144 document.cookie = `ajs_anonymous_id=${vid}; domain=.claude.com; path=/; Secure; SameSite=Lax; max-age=31536000`;
145 }
146 try {
147 localStorage.setItem(VID_KEY, vid);
148 } catch {}
149 } catch {
150 return {
151 variant: 'control',
152 track: false
153 };
154 }
155 const variant = preBucketed === '1' ? 'treatment' : preBucketed === '0' ? 'control' : bucket(flag, vid);
156 return {
157 variant,
158 track: true,
159 vid
160 };
161 });
162 useEffect(() => {
163 if (!decision.track) return;
164 fetch('https://api.anthropic.com/api/event_logging/v2/batch', {
165 method: 'POST',
166 headers: {
167 'Content-Type': 'application/json',
168 'x-service-name': 'claude_code_docs'
169 },
170 body: JSON.stringify({
171 events: [{
172 event_type: 'GrowthbookExperimentEvent',
173 event_data: {
174 device_id: decision.vid,
175 anonymous_id: decision.vid,
176 timestamp: new Date().toISOString(),
177 experiment_id: flag,
178 variation_id: decision.variant === 'treatment' ? 1 : 0,
179 environment: 'production'
180 }
181 }]
182 }),
183 keepalive: true
184 }).catch(() => {});
185 }, []);
186 return decision.variant === 'treatment' ? treatment : children;
187};
188
189<Experiment flag="docs-contact-sales-cta" treatment={<ContactSalesCard surface="claude_platform_on_aws" />} />
190
191AWS 上的 Claude Platform 是 Anthropic 运营的 Claude API,支持 AWS 身份验证、IAM 访问控制和 AWS Marketplace 计费。请求直接到达 Anthropic 的 API,因此您获得与 [Claude API](https://platform.claude.com/docs) 相同的模型和功能,并遵循相同的发布计划。您可以使用 AWS 凭证或工作区 API 密钥进行身份验证,并通过 AWS Marketplace 付款。9AWS 上的 Claude Platform 是 Anthropic 运营的 Claude API,支持 AWS 身份验证、IAM 访问控制和 AWS Marketplace 计费。请求直接到达 Anthropic 的 API,因此您获得与 [Claude API](https://platform.claude.com/docs) 相同的模型和功能,并遵循相同的发布计划。您可以使用 AWS 凭证或工作区 API 密钥进行身份验证,并通过 AWS Marketplace 付款。
192 10
193使用本指南将 Claude Code 指向您已通过 AWS 上的 Claude Platform 配置的工作区。有关在此之前的 AWS 订阅和工作区设置,请参阅 [AWS 上的 Claude Platform 文档](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws)。11使用本指南将 Claude Code 指向您已通过 AWS 上的 Claude Platform 配置的工作区。有关在此之前的 AWS 订阅和工作区设置,请参阅 [AWS 上的 Claude Platform 文档](https://platform.claude.com/docs/en/build-with-claude/claude-platform-on-aws)。
196 通过 AWS Marketplace 订阅会配置一个与您的 AWS 账户关联的新 Anthropic 组织。此组织与您已有的任何 Anthropic 组织分开,凭证不会在它们之间转移。使用来自 AWS 关联组织的工作区 ID 和 API 密钥,而不是来自预先存在的 Claude Console 账户的凭证。14 通过 AWS Marketplace 订阅会配置一个与您的 AWS 账户关联的新 Anthropic 组织。此组织与您已有的任何 Anthropic 组织分开,凭证不会在它们之间转移。使用来自 AWS 关联组织的工作区 ID 和 API 密钥,而不是来自预先存在的 Claude Console 账户的凭证。
197</Note>15</Note>
198 16
199## 前置条件17<h2 id="prerequisites">
18 前置条件
19</h2>
200 20
201在配置 Claude Code 之前,您需要:21在配置 Claude Code 之前,您需要:
202 22
205* 具有调用 Anthropic 服务权限的 IAM 主体,或限定于工作区的 API 密钥25* 具有调用 Anthropic 服务权限的 IAM 主体,或限定于工作区的 API 密钥
206* 您环境中的 AWS 凭证、`~/.aws/credentials` 中的凭证,或来自附加 IAM 角色的凭证(如果您想要 SigV4 身份验证)。AWS CLI 仅在 SSO 登录流程中是必需的。26* 您环境中的 AWS 凭证、`~/.aws/credentials` 中的凭证,或来自附加 IAM 角色的凭证(如果您想要 SigV4 身份验证)。AWS CLI 仅在 SSO 登录流程中是必需的。
207 27
208## 设置28<h2 id="setup">
29 设置
30</h2>
209 31
210### 1. 配置 AWS 凭证32<h3 id="1-configure-aws-credentials">
33 1. 配置 AWS 凭证
34</h3>
211 35
212Claude Code 支持两种 AWS 上的 Claude Platform 身份验证方法。选择适合您的团队如何管理访问的方法。36Claude Code 支持两种 AWS 上的 Claude Platform 身份验证方法。选择适合您的团队如何管理访问的方法。
213 37
248 `/login` 和 `/logout` 命令不会改变 AWS 上的 Claude Platform 身份验证。身份验证通过您的 AWS 凭证或工作区 API 密钥运行,而不是通过 Claude.ai 订阅。72 `/login` 和 `/logout` 命令不会改变 AWS 上的 Claude Platform 身份验证。身份验证通过您的 AWS 凭证或工作区 API 密钥运行,而不是通过 Claude.ai 订阅。
249</Note>73</Note>
250 74
251### 2. 配置 Claude Code75<h3 id="2-configure-claude-code">
76 2. 配置 Claude Code
77</h3>
252 78
253设置环境变量,将 Claude Code 路由通过 AWS 上的 Claude Platform,而不是默认的 Anthropic API。79设置环境变量,将 Claude Code 路由通过 AWS 上的 Claude Platform,而不是默认的 Anthropic API。
254 80
262 88
263即使您的环境中存在 AWS 凭证,AWS 上的 Claude Platform 也是可选的。Bedrock 和 Foundry 在提供程序路由中优先,因此如果设置了 `CLAUDE_CODE_USE_BEDROCK` 和 `CLAUDE_CODE_USE_FOUNDRY`,请取消设置它们。89即使您的环境中存在 AWS 凭证,AWS 上的 Claude Platform 也是可选的。Bedrock 和 Foundry 在提供程序路由中优先,因此如果设置了 `CLAUDE_CODE_USE_BEDROCK` 和 `CLAUDE_CODE_USE_FOUNDRY`,请取消设置它们。
264 90
265### 3. 固定模型版本91<h3 id="3-pin-model-versions">
92 3. 固定模型版本
93</h3>
266 94
267AWS 上的 Claude Platform 使用与直接 Claude API 相同的模型 ID。默认别名 `opus`、`sonnet` 和 `haiku` 解析为您工作区中可用的最新版本。95AWS 上的 Claude Platform 使用与直接 Claude API 相同的模型 ID。默认别名 `opus`、`sonnet` 和 `haiku` 解析为您工作区中可用的最新版本。
268 96
276 104
277有关模型 ID 和别名的完整列表,请参阅 [Models overview](https://platform.claude.com/docs/en/about-claude/models/overview)。有关其他与模型相关的变量,请参阅 [Model configuration](/zh-CN/model-config)。105有关模型 ID 和别名的完整列表,请参阅 [Models overview](https://platform.claude.com/docs/en/about-claude/models/overview)。有关其他与模型相关的变量,请参阅 [Model configuration](/zh-CN/model-config)。
278 106
279[Prompt caching](https://platform.claude.com/docs/en/build-with-claude/prompt-caching) 会自动启用。1 小时缓存写入的计费率高于 5 分钟写入。要请求 1 小时缓存 TTL 而不是 5 分钟默认值,请设置 `ENABLE_PROMPT_CACHING_1H=1`。107[Prompt caching](/zh-CN/prompt-caching) 会自动启用。要请求 1 小时缓存 TTL 而不是 5 分钟默认值,请设置 `ENABLE_PROMPT_CACHING_1H=1`。API 按更高的费率对 1 小时缓存写入进行计费。有关费率,请参阅 [prompt caching pricing](https://platform.claude.com/docs/en/build-with-claude/prompt-caching#pricing)。
280 108
281## 使用 Agent SDK109<h2 id="use-the-agent-sdk">
110 使用 Agent SDK
111</h2>
282 112
283[Agent SDK](/zh-CN/agent-sdk/overview) 读取与 CLI 相同的环境变量,因此任何生成 Claude Code 子进程的程序都可以通过在调用前导出 `CLAUDE_CODE_USE_ANTHROPIC_AWS`、`ANTHROPIC_AWS_WORKSPACE_ID` 和 `ANTHROPIC_AWS_API_KEY` 或 AWS 凭证来针对 AWS 上的 Claude Platform。113[Agent SDK](/zh-CN/agent-sdk/overview) 读取与 CLI 相同的环境变量,因此任何生成 Claude Code 子进程的程序都可以通过在调用前导出 `CLAUDE_CODE_USE_ANTHROPIC_AWS`、`ANTHROPIC_AWS_WORKSPACE_ID` 和 `ANTHROPIC_AWS_API_KEY` 或 AWS 凭证来针对 AWS 上的 Claude Platform。
284 114
296 126
297此示例依赖于环境 AWS 凭证链进行 SigV4。要改为使用工作区 API 密钥进行身份验证,请以相同方式设置 `ANTHROPIC_AWS_API_KEY`。有关更广泛的 Agent SDK 表面,请参阅 [Agent SDK overview](/zh-CN/agent-sdk/overview)。127此示例依赖于环境 AWS 凭证链进行 SigV4。要改为使用工作区 API 密钥进行身份验证,请以相同方式设置 `ANTHROPIC_AWS_API_KEY`。有关更广泛的 Agent SDK 表面,请参阅 [Agent SDK overview](/zh-CN/agent-sdk/overview)。
298 128
299## 通过企业代理路由129<h2 id="route-through-a-corporate-proxy">
130 通过企业代理路由
131</h2>
300 132
301要通过代理或 [LLM gateway](/zh-CN/llm-gateway) 路由流量,请将 `ANTHROPIC_AWS_BASE_URL` 设置为代理的地址。Claude Code 将请求发送到该 URL,并使用相同的工作区和身份验证标头,因此任何转发它们不变的网关都可以工作。133要通过代理或 [LLM gateway](/zh-CN/llm-gateway) 路由流量,请将 `ANTHROPIC_AWS_BASE_URL` 设置为代理的地址。Claude Code 将请求发送到该 URL,并使用相同的工作区和身份验证标头,因此任何转发它们不变的网关都可以工作。
302 134
315export ANTHROPIC_AWS_BASE_URL=https://anthropic-proxy.example.com147export ANTHROPIC_AWS_BASE_URL=https://anthropic-proxy.example.com
316```148```
317 149
318## 故障排除150<h2 id="troubleshooting">
151 故障排除
152</h2>
319 153
320运行 `/status` 以查看已解析的提供程序以及任何显式配置的工作区 ID、区域、基础 URL 覆盖和身份验证跳过设置。这是确认 Claude Code 是否针对 AWS 上的 Claude Platform 的最快方法。154运行 `/status` 以查看已解析的提供程序以及任何显式配置的工作区 ID、区域、基础 URL 覆盖和身份验证跳过设置。这是确认 Claude Code 是否针对 AWS 上的 Claude Platform 的最快方法。
321 155
322### 每个请求都出现 `403 Forbidden` 或 `AccessDenied`156<h3 id="403-forbidden-or-accessdenied-on-every-request">
157 每个请求都出现 `403 Forbidden` 或 `AccessDenied`
158</h3>
323 159
324Claude Code 解析的 IAM 主体可能缺少在您的工作区中调用 Anthropic 服务的权限。检查附加到您的 AWS 配置文件或启动 Claude Code 的运行程序的角色,并验证它具有 [IAM action reference](https://platform.claude.com/docs/en/api/claude-platform-on-aws-iam-actions) 中记录的 `aws-external-anthropic` 操作。160Claude Code 解析的 IAM 主体可能缺少在您的工作区中调用 Anthropic 服务的权限。检查附加到您的 AWS 配置文件或启动 Claude Code 的运行程序的角色,并验证它具有 [IAM action reference](https://platform.claude.com/docs/en/api/claude-platform-on-aws-iam-actions) 中记录的 `aws-external-anthropic` 操作。
325 161
326如果您设置了 `ANTHROPIC_AWS_API_KEY`,该密钥优先于 SigV4,过期的密钥会产生相同的错误。在 AWS Console 中的 **Claude Platform on AWS → API keys** 下重新生成密钥,或取消设置变量以回退到您的 AWS 凭证。162如果您设置了 `ANTHROPIC_AWS_API_KEY`,该密钥优先于 SigV4,过期的密钥会产生相同的错误。在 AWS Console 中的 **Claude Platform on AWS → API keys** 下重新生成密钥,或取消设置变量以回退到您的 AWS 凭证。
327 163
328### 请求失败,出现缺少工作区错误164<h3 id="requests-fail-with-a-missing-workspace-error">
165 请求失败,出现缺少工作区错误
166</h3>
329 167
330`ANTHROPIC_AWS_WORKSPACE_ID` 可能未设置或为空。每个 AWS 上的 Claude Platform 请求都必须包含工作区 ID。它不是由您的 AWS 凭证隐含的。在 AWS Console 服务页面上的 **Workspaces** 下找到 ID,并在启动 Claude Code 之前导出它。168`ANTHROPIC_AWS_WORKSPACE_ID` 可能未设置或为空。每个 AWS 上的 Claude Platform 请求都必须包含工作区 ID。它不是由您的 AWS 凭证隐含的。在 AWS Console 服务页面上的 **Workspaces** 下找到 ID,并在启动 Claude Code 之前导出它。
331 169
332### 请求仍然转到 `api.anthropic.com`170<h3 id="requests-still-go-to-api-anthropic-com">
171 请求仍然转到 `api.anthropic.com`
172</h3>
333 173
334`CLAUDE_CODE_USE_ANTHROPIC_AWS` 可能未设置或设置为不解析为真值的值。将其设置为 `1` 并运行 `/status` 以确认已解析的提供程序。如果还设置了 `CLAUDE_CODE_USE_BEDROCK` 或 `CLAUDE_CODE_USE_FOUNDRY`,这些会优先于 AWS 上的 Claude Platform。174`CLAUDE_CODE_USE_ANTHROPIC_AWS` 可能未设置或设置为不解析为真值的值。将其设置为 `1` 并运行 `/status` 以确认已解析的提供程序。如果还设置了 `CLAUDE_CODE_USE_BEDROCK` 或 `CLAUDE_CODE_USE_FOUNDRY`,这些会优先于 AWS 上的 Claude Platform。
335 175
336## 其他资源176<h2 id="additional-resources">
177 其他资源
178</h2>
337 179
338配置 Claude Code 之前的 AWS 上的 Claude Platform 订阅、工作区和 IAM 设置在平台文档中介绍:180配置 Claude Code 之前的 AWS 上的 Claude Platform 订阅、工作区和 IAM 设置在平台文档中介绍:
339 181