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 和別名的完整清單,請參閱[模型概述](https://platform.claude.com/docs/en/about-claude/models/overview)。有關其他模型相關變數,請參閱[模型設定](/zh-TW/model-config)。105有關模型 ID 和別名的完整清單,請參閱[模型概述](https://platform.claude.com/docs/en/about-claude/models/overview)。有關其他模型相關變數,請參閱[模型設定](/zh-TW/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-TW/prompt-caching) 會自動啟用。若要要求 1 小時快取 TTL 而不是 5 分鐘預設值,請設定 `ENABLE_PROMPT_CACHING_1H=1`。API 以更高的費率計費 1 小時快取寫入。有關費率,請參閱 [prompt caching 定價](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-TW/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-TW/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 概述](/zh-TW/agent-sdk/overview)。127此範例依賴環境 AWS 認證鏈進行 SigV4。若要改用工作區 API 金鑰進行驗證,請以相同方式設定 `ANTHROPIC_AWS_API_KEY`。有關更廣泛的 Agent SDK 表面,請參閱 [Agent SDK 概述](/zh-TW/agent-sdk/overview)。
298 128
299## 透過公司代理路由129<h2 id="route-through-a-corporate-proxy">
130 透過公司代理路由
131</h2>
300 132
301若要透過代理或 [LLM gateway](/zh-TW/llm-gateway) 路由流量,請將 `ANTHROPIC_AWS_BASE_URL` 設定為代理的位址。Claude Code 將請求傳送至該 URL,並使用相同的工作區和驗證標頭,因此任何轉發它們不變的閘道都有效。133若要透過代理或 [LLM gateway](/zh-TW/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## Troubleshooting150<h2 id="troubleshooting">
151 Troubleshooting
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 動作參考](https://platform.claude.com/docs/en/api/claude-platform-on-aws-iam-actions)中記錄的 `aws-external-anthropic` 動作。160Claude Code 解析的 IAM 主體可能缺少在您的工作區中叫用 Anthropic 服務的權限。檢查附加到您的 AWS 設定檔或啟動 Claude Code 的執行器的角色,並驗證它具有 [IAM 動作參考](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