# 인증

> Anthropic API, AWS Bedrock, GCP Vertex AI로 Claude Code 인증 설정 방법.

Claude Code는 여러 인증 방식을 지원합니다. 방식은 API에 직접 접근하는지, 클라우드 제공업체를 통하는지, API 키 헬퍼 스크립트를 통하는지에 따라 다릅니다.

## Claude.ai OAuth (기본)

API 키가 설정되지 않은 상태에서 `claude`를 처음 실행하면, Claude Code가 claude.ai 계정으로 OAuth 흐름을 시작합니다.

1. 터미널에서 실행: `claude`
2. URL이 표시되면 브라우저에서 열어 claude.ai 계정으로 로그인하고 권한 부여
3. 브라우저에서 인증 후 Claude Code가 자동으로 OAuth 토큰을 받아 저장합니다(macOS는 Keychain, 다른 플랫폼은 자격 증명 파일)

OAuth 토큰은 만료 전에 자동으로 갱신됩니다. 명시적으로 로그아웃하거나 접근을 취소하지 않는 한 재인증이 필요하지 않습니다.

## API 키

OAuth 대신 Anthropic API 키로 인증할 수 있습니다.

**환경 변수:**
```bash
export ANTHROPIC_API_KEY=sk-ant-...
```
이 변수가 설정되면 Claude Code가 직접 사용하고 OAuth를 요청하지 않습니다.

**설정 파일 apiKeyHelper:**
```json
{
  "apiKeyHelper": "cat ~/.anthropic/api-key"
}
```
Claude Code가 이 커맨드를 실행해 자격 증명을 동적으로 가져옵니다. 결과는 5분 동안 캐시됩니다(`CLAUDE_CODE_API_KEY_HELPER_TTL_MS`로 설정 가능). 커맨드는 API 키만 stdout에 출력하고 코드 0으로 종료해야 합니다.

> ⚠️ `ANTHROPIC_API_KEY`가 설정되거나 `apiKeyHelper`가 구성되면 OAuth 흐름이 비활성화됩니다.

## AWS Bedrock

AWS Bedrock을 통해 Claude를 사용하려면:

```bash
# 1. Bedrock 모드 활성화
export CLAUDE_CODE_USE_BEDROCK=1

# 2. AWS 자격 증명 설정 (표준 AWS 자격 증명 체인)
# - AWS 자격 증명 파일 (~/.aws/credentials)
# - 환경 변수: AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY, AWS_SESSION_TOKEN
# - IAM 역할(EC2 인스턴스 프로파일, ECS 태스크 역할 등)
# - AWS SSO (aws sso login)

# 3. 리전 설정 (선택사항)
export AWS_REGION=us-east-1
```

**자동 AWS 자격 증명 갱신:**
세션이 만료될 경우(예: 단기 SSO 토큰) `awsAuthRefresh`를 설정해 자동으로 자격 증명을 갱신합니다:

```json
{
  "awsAuthRefresh": "aws sso login --profile my-profile"
}
```

커맨드에서 자격 증명을 내보내려면 `awsCredentialExport`를 사용합니다:

```json
{
  "awsCredentialExport": "aws sts assume-role --role-arn arn:aws:iam::123456789012:role/MyRole --role-session-name claude-code --query Credentials --output json"
}
```

## GCP Vertex AI

Google Cloud Vertex AI를 통해 Claude를 사용하려면:

```bash
# 1. Vertex 모드 활성화
export CLAUDE_CODE_USE_VERTEX=1

# 2. GCP 자격 증명 설정
# - gcloud auth application-default login (대화형)
# - GOOGLE_APPLICATION_CREDENTIALS를 통한 서비스 계정 키 파일
# - 워크로드 아이덴티티(GKE용)

# 3. 프로젝트 및 리전 설정 (선택사항)
export ANTHROPIC_VERTEX_PROJECT_ID=my-gcp-project
export CLOUD_ML_REGION=us-central1
```

**자동 GCP 자격 증명 갱신:**
```json
{
  "gcpAuthRefresh": "gcloud auth application-default login"
}
```

## 계정 전환

**다른 계정으로 로그인:**
```
/login
```
새 OAuth 흐름을 시작합니다. 저장된 토큰이 새 계정의 토큰으로 교체됩니다.

**로그아웃:**
```
/logout
```
저장된 자격 증명을 제거합니다. 다음 실행 시 인증을 요청합니다.

## 토큰 만료 및 갱신

Claude Code가 조용히 토큰 갱신을 처리합니다:
- 각 API 요청 전에 액세스 토큰 만료 여부 확인
- 만료된 경우 저장된 갱신 토큰으로 잠금을 획득하고 갱신
- 여러 동시 Claude Code 인스턴스는 잠금 파일을 통해 중복 갱신 방지
- API에서 `401` 응답이 오면 즉시 강제 갱신

## 인증 우선순위

여러 인증 소스가 설정된 경우 이 순서로 해석됩니다:

1. `ANTHROPIC_AUTH_TOKEN` 환경 변수
2. `CLAUDE_CODE_OAUTH_TOKEN` 환경 변수
3. 파일 디스크립터의 OAuth 토큰(관리형 배포용)
4. 설정의 `apiKeyHelper`
5. 저장된 claude.ai OAuth 토큰(Keychain 또는 자격 증명 파일)
6. `ANTHROPIC_API_KEY` 환경 변수

> 💡 CI 및 비대화형 환경에서는 `ANTHROPIC_API_KEY` 또는 `CLAUDE_CODE_OAUTH_TOKEN`을 사용하세요. 이것들은 대화형 흐름보다 먼저 확인됩니다.
