본문 바로가기
C.W.K.
Stream
Lesson 03 of 08 · published

인증 경로는 API 키·OAuth·Bedrock·Vertex 네 갈래야

~18 min · auth, api-key, oauth, bedrock, vertex

Level 0Observer
0 XP0/64 lessons0/13 achievements
0/150 XP to next level150 XP to go0% complete

자격 증명은 곧 제품 경로야

Claude에 닿는 방법은 Anthropic Console의 API 키, Pro/Max 구독으로 Claude Code가 쓰는 OAuth, AWS 자격 증명을 따르는 Amazon Bedrock, GCP 자격 증명을 따르는 Google Vertex AI로 나뉘어. 서로 바꿔 끼우는 비밀 문자열 정도가 아니야. 경로마다 할당량과 과금, 지역 제한, 먼저 제공되는 기능이 달라.

운영 방식도 함께 달라져

API 키는 ANTHROPIC_API_KEY 환경변수를 두고 Client SDK에서 직접 호출하는 가장 단순한 길이야. OAuth는 Claude Code 로그인 토큰을 Agent SDK도 함께 쓰는 방식이라 cwkPippa의 Claude 브레인이 아빠의 Max 구독 위에서 움직일 수 있어. Bedrock과 Vertex는 각 클라우드 전용 클라이언트와 할당량·데이터 거주 정책을 얻는 대신, 직접 API의 새 기능이 늦게 들어올 수 있어.

예비 경로가 있는지도 설계해야 해

운영 시스템은 주 경로가 실패했을 때 어디로 갈지, 혹은 왜 다른 길로 가지 않을지 미리 정해야 해. cwkPippa의 Gemini 브레인은 OAuth가 막히면 유료 API 키로 전환하고 그 사실을 화면에 알려. Claude 브레인은 반대로 OAuth만 허용해. Anthropic API 키 자리는 미래 확장용 골격일 뿐, 현재 실행 프로세스에는 값 자체가 들어오지 않아. 새벽 장애 때 즉흥적으로 인증을 섞지 않게 만드는 정책이야.

원칙: 인증은 배포의 사소한 설정이 아니야. 환경마다 주 경로와 예비 경로, 의도적으로 막은 경로까지 문서화해.

Code

API 키 인증 (Python)·python
import os
from anthropic import Anthropic

# 키는 env에서, 절대 하드코딩 X.
client = Anthropic(api_key=os.environ["ANTHROPIC_API_KEY"])

response = client.messages.create(
    model="claude-sonnet-4-6",
    max_tokens=512,
    messages=[{"role": "user", "content": "One sentence on why pinning model ids matters."}],
)
print(response.content[0].text)
Claude Code OAuth 인증 (Agent SDK)·python
# Claude Agent SDK는 `claude` CLI 로그인 OAuth 토큰을 그대로 재사용.
# `claude login` 한 번 하면 SDK가 keychain에서 토큰을 자동으로 집어.
import asyncio
from claude_agent_sdk import query, ClaudeAgentOptions

async def main():
    options = ClaudeAgentOptions(
        cwd="/tmp",
        # api_key 안 줌; 인증은 keychain의 OAuth 토큰으로 흐름.
    )
    async for event in query(prompt="What model are you?", options=options):
        print(event)

asyncio.run(main())
Bedrock 인증 (TypeScript)·typescript
import AnthropicBedrock from '@anthropic-ai/bedrock-sdk';

// 인증은 표준 AWS credential chain (profile, env, IAM role).
const client = new AnthropicBedrock({ awsRegion: 'us-east-1' });

const message = await client.messages.create({
  model: 'anthropic.claude-sonnet-4-6-v1:0',
  max_tokens: 256,
  messages: [{ role: 'user', content: 'One-line summary of Bedrock vs direct API.' }],
});
console.log(message.content);

External links

Exercise

관리하는 프로젝트의 인증 정책을 세 문장 안에 적어. 주 경로와 예비 경로 또는 예비 경로가 없는 이유, 비밀을 담는 환경변수 이름까지 써.
Hint
예비 경로가 없다면 빠뜨리지 말고 “설계상 없음”이라고 적어. 부재도 정책이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.