Security best practices for CoCo CLI
Security best practices for CoCo CLI (보안 모범 사례)
CoCo CLI의 필수 보안 관행은 안전한 인증 방법 사용, 구성 파일 보호, 역할·접근 적절한 관리, 대화 이력 안전 처리, MCP 서버 무결성 보장, 프로덕션 안전 프로토콜 준수를 포함해요.
본문
중요
관리 환경에서는 조직이 시스템 수준 managed settings 파일을 배포해 정책을 강제할 수 있어요(예: 도구 접근 제한, 허용 계정 제한, 우회 기능 비활성화). 자세한 내용은 Managed settings (organization policy)를 참고해요.
자격 증명
[권장] 가능하면 브라우저 기반 인증을 사용해요. CoCo CLI의 기본 인증 방법은 브라우저 기반 인증이에요. connections.toml 파일에서 authenticator = "externalbrowser"를 사용해 이 옵션을 수동으로 설정해요.
특정 역할로 접근을 범위를 정할 때는 프로그래밍 접근 토큰(PAT)을 사용해요. Snowsight에서 전용 PAT를 생성해요(인증을 위해 프로그래밍 접근 토큰 사용 참고). 만료 ≤ 90일로 설정하고, 설명적인 이름을 사용하고, 정기적으로 교체해요.
구성 파일 보호 — 구성 파일에는 mode 600, 디렉터리에는 700을 사용해 접근을 내 사용자로만 제한해요.
chmod 600 ~/.snowflake/connections.toml
chmod 700 ~/.snowflake/cortex
자격 증명을 절대 커밋하지 마요 — 민감한 구성 파일을 .gitignore에 추가해요.
echo "~/.snowflake/connections.toml" >> ~/.gitignore
환경 변수로 자격 증명과 토큰을 보관하고, \${VARIABLE_NAME} 구문으로 구성 파일에 넣어요.
역할과 접근
환경별로 적절한 역할을 사용해요. 예를 들어 프로덕션에서는 읽기 전용 역할, 개발에서는 더 광범위한 역할을 사용해요.
[dev]
role = "DEVELOPER"
[prod_readonly]
role = "ANALYST"
일상 작업에 ACCOUNTADMIN을 절대 사용하지 마요. 최소 권한을 부여해요.
대화 이력
대화는 ~/.snowflake/cortex/conversations/에 저장돼요. 민감한 작업에서는 cortex --private로 CoCo를 시작해 세션 저장을 비활성화해요. 또는 CoCo CLI를 종료하기 전에 /clear 명령으로 현재 세션을 지워요.
대화 이력에 대한 접근을 내 사용자로만 제한하려면 mode 700을 사용해요.
chmod 700 ~/.snowflake/cortex/conversations
MCP 보안
신뢰할 수 있는 MCP 서버만 설치해요 — 추가하기 전에 MCP 서버의 소스와 무결성을 검증해요. 서버 목록을 얻고 신뢰하지 않는 것을 제거하려면 다음 명령을 사용해요.
cortex mcp list
cortex mcp remove <server>
MCP 자격 증명을 절대 하드코딩하지 마요 — 환경 변수를 사용해요. 먼저 내 셸에서 설정해요.
export GITHUB_TOKEN="your_token"
그런 다음 MCP 구성에서 참조해요.
{
"mcpServers": {
"github": {
"env": { "GITHUB_TOKEN": "${GITHUB_TOKEN}" }
}
}
}
프로덕션 안전
계획 모드를 켜요 — 실행 전에 의도한 동작을 검토하려면 /plan 명령을 사용해요.
/plan
Drop and recreate the ANALYTICS schema
개인 접근 토큰이 손상되었다면
Snowsight에서 PAT를 즉시 폐기해요! 그런 다음 새 토큰을 생성하고 그것을 사용하기 시작해요. 토큰을 구성 파일에 사용하지 말고 환경 변수를 사용해요.
의심스러운 활동을 식별하려면 쿼리 이력을 검토해요. 실시간 결과에는 INFORMATION_SCHEMA.QUERY_HISTORY_BY_USER를 사용해요(자신의 이력을 보는 데 특별한 권한이 필요 없어요).
SELECT *
FROM TABLE(INFORMATION_SCHEMA.QUERY_HISTORY_BY_USER(
USER_NAME => '<username>',
RESULT_LIMIT => 1000
))
ORDER BY START_TIME DESC;
계정 관리자는 계정 전체 보기를 위해 SNOWFLAKE.ACCOUNT_USAGE.QUERY_HISTORY도 쿼리할 수 있지만, 그 뷰는 최대 45분의 지연 시간이 있어요.
Managed settings (enterprise policy)
일부 조직에서 관리자는 CoCo CLI에 대한 정책을 강제하는 managed settings를 배포해요. Managed settings는 사용자 수준 구성을 제한하거나 재정의할 수 있어요(권한 프롬프트와 우회 동작 포함).
자세한 내용은 Managed settings (organization policy)를 참고해요.
권한
CoCo에는 세 가지 운영 모드가 있어요.
| 모드 | 표시기 | 슬래시 명령 | 설명 |
|---|---|---|---|
| Confirm actions | 파란색 ⏵⏵ | 기본 모드 | 잠재적으로 위험한 동작 전에 권한을 프롬프트. |
| Plan | 주황색 ⏸ | /plan, /plan-off | 어떤 동작을 취하기 전에 계획을 제시. |
| Bypass | 빨간색 >> | /bypass, /bypass-off | 모든 도구 호출이 승인됨. |
CoCo CLI에서 Shift-Tab을 눌러 이 모드들을 순환해요.
경고
Bypass 모드는 모든 확인 프롬프트를 비활성화해요. 신뢰하는 환경에서만 사용해요.
권한 유형
다음 권한 수준이 CoCo 도구 호출에 적용돼요.
| 유형 | 설명 |
|---|---|
| EXECUTE_COMMAND | bash/셸 명령 실행 |
| FILE_READ | 파일 내용 읽기 |
| FILE_WRITE | 파일 생성/수정 |
| FILE_EDIT | 기존 파일 편집 |
| WEB_ACCESS | 웹 검색/가져오기 작업 |
신뢰 모델
이 기능에 대한 지원은 실험적이며 변경될 수 있어요. CoCo는 다음 표처럼 명령과 작업을 위험도로 분류하려고 시도해요.
| 수준 | 예시 | 동작 |
|---|---|---|
| SAFE | ls, cat, echo, grep | 자동 승인 |
| LOW | 새 파일 생성(예: touch file.txt) | 보통 자동 승인 |
| MEDIUM | 파일 편집(예: nano file.txt), 중간 bash | Confirm 모드에서 프롬프트 |
| HIGH | rm, curl, wget, sudo | 항상 프롬프트 |
| CRITICAL | rm -rf, 파괴적 작업 | 추가 확인 |
SQL 쿼리
SQL은 작업 유형별로 분류돼요.
| 카테고리 | 작업 | 동작 |
|---|---|---|
| READ_ONLY | SELECT, SHOW, DESCRIBE | 자동 승인 |
| WRITE | INSERT, UPDATE, DELETE, CREATE | 프롬프트 |
| USE_ROLE | USE ROLE, USE WAREHOUSE | 프롬프트 |
샌드박스
CoCo CLI는 명령 실행을 격리하는 샌드박싱을 지원해요. 샌드박스 구성·사용에 대한 전체 세부 정보는 Sandbox를 참고해요.
훅 통합
훅으로 권한 정책을 사용자 지정할 수 있어요. 다음은 bash 명령을 자동 승인하는 사전 실행 훅 예시예요.
{
"hooks": {
"PreToolUse": [
{
"matcher": "bash",
"hooks": [
{
"type": "command",
"command": "bash .claude/hooks/auto-approve.sh"
}
]
}
]
}
}
이 훅은 bash 명령을 자동 승인하기 위해 다음과 같은 JSON 응답을 반환할 수 있어요.
{
"hookSpecificOutput": {
"hookEventName": "PreToolUse",
"permissionDecision": "allow",
"permissionDecisionReason": "Approved by policy"
}
}
권한 프롬프트와 캐싱
CoCo가 작업을 진행하기 위해 내 권한이 필요하면, 요청에 대한 세부 정보와 함께 프롬프트해요. 요청을 승인하거나 거부할 수 있어요. 미래의 유사 요청에 대한 내 선택을 기억하도록 선택할 수도 있어요.
- "Always allow (this session)"은 CoCo CLI를 종료할 때까지 기억해요.
- "Always allow (persist)"는 무기한 기억해요.
이 응답들은 캐시되고 적절히 프로젝트 디렉터리, 도구 유형, 또는 명령 패턴으로 범위가 정해져요.
지속 권한은 ~/.snowflake/cortex/permissions.json에 저장돼요. 다음은 캐시 예시예요.
{
"/path/to/project": {
"Bash": {
"npm test": "allow",
"make build": "allow"
},
"Write": {
"*": "allow"
}
}
}
이 파일을 삭제하면 모든 지속 권한을 초기화해요. 특정 프로젝트의 권한을 초기화하려면 해당 항목을 삭제해요.
세션 캐시를 초기화하려면 /new 명령을 사용해 새 세션을 시작하거나, CoCo CLI를 종료하고 다시 시작해요.
구성
권한 동작을 제어하려면 아래 설명된 환경 변수를 설정해요.
| 변수 | 설명 |
|---|---|
CORTEX_PERMISSION_CACHE_TTL_SECONDS |
세션 권한 캐시의 기본 타임아웃 설정(초 단위). |
COCO_DANGEROUS_MODE_REQUIRE_SQL_WRITE_PERMISSION=true |
1로 설정하면 우회 모드에서도 SQL 쓰기 작업에 항상 프롬프트. |
보안 체크리스트
- 최대 90일 만료의 PAT 사용
- 파일 권한을 600/700으로 설정
- git에 자격 증명 절대 커밋
- 최소 권한 역할 사용
- 일상 작업에 ACCOUNTADMIN 절대 사용 안 함
- 프로덕션에는 계획 모드 활성화, 우회 모드는 신뢰 환경용으로 아껴 둠
- 신뢰할 수 있는 MCP 서버만 설치
- 자격 증명을 환경 변수에 저장
- 사용자 지정 보안 검사를 자동화해 정책을 강제하는 훅 사용
- 권한을 주기적으로 감사
더 알아보기
- Managed settings — 조직 정책
- Permission modes — 데스크톱 승인 모드
- Sandbox — 샌드박스