snowtower-admin
SnowTowerのインフラ管理者が、SnowDDL操作、ユーザー管理、CI/CDデプロイ、トラブルシューティング、Snowflake管理などを、snowddl、deploy、ユーザー作成などのキーワードをトリガーにして実行するSkill。
📜 元の英語説明(参考)
Advanced skill for SnowTower infrastructure administrators. Use for SnowDDL operations, user provisioning, role management, CI/CD deployments, troubleshooting, and Snowflake administration. Triggers on mentions of snowddl, deploy, user creation, role grants, infrastructure changes, or admin operations.
🇯🇵 日本人クリエイター向け解説
SnowTowerのインフラ管理者が、SnowDDL操作、ユーザー管理、CI/CDデプロイ、トラブルシューティング、Snowflake管理などを、snowddl、deploy、ユーザー作成などのキーワードをトリガーにして実行するSkill。
※ jpskill.com 編集部が日本のビジネス現場向けに補足した解説です。Skill本体の挙動とは独立した参考情報です。
下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。
mkdir -p ~/.claude/skills && cd ~/.claude/skills && curl -L -o snowtower-admin.zip https://jpskill.com/download/18306.zip && unzip -o snowtower-admin.zip && rm snowtower-admin.zip
$d = "$env:USERPROFILE\.claude\skills"; ni -Force -ItemType Directory $d | Out-Null; iwr https://jpskill.com/download/18306.zip -OutFile "$d\snowtower-admin.zip"; Expand-Archive "$d\snowtower-admin.zip" -DestinationPath $d -Force; ri "$d\snowtower-admin.zip"
完了後、Claude Code を再起動 → 普通に「動画プロンプト作って」のように話しかけるだけで自動発動します。
💾 手動でダウンロードしたい(コマンドが難しい人向け)
- 1. 下の青いボタンを押して
snowtower-admin.zipをダウンロード - 2. ZIPファイルをダブルクリックで解凍 →
snowtower-adminフォルダができる - 3. そのフォルダを
C:\Users\あなたの名前\.claude\skills\(Win)または~/.claude/skills/(Mac)へ移動 - 4. Claude Code を再起動
⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。
🎯 このSkillでできること
下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。
📦 インストール方法 (3ステップ)
- 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
- 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
- 3. 展開してできたフォルダを、ホームフォルダの
.claude/skills/に置く- · macOS / Linux:
~/.claude/skills/ - · Windows:
%USERPROFILE%\.claude\skills\
- · macOS / Linux:
Claude Code を再起動すれば完了。「このSkillを使って…」と話しかけなくても、関連する依頼で自動的に呼び出されます。
詳しい使い方ガイドを見る →- 最終更新
- 2026-05-18
- 取得日時
- 2026-05-18
- 同梱ファイル
- 1
📖 Skill本文(日本語訳)
※ 原文(英語/中国語)を Gemini で日本語化したものです。Claude 自身は原文を読みます。誤訳がある場合は原文をご確認ください。
SnowTower 管理者ガイド
SnowTower を通じて Snowflake インフラストラクチャを管理する管理者向けの包括的なスキルです。
このスキルは誰のためか
- SnowDDL デプロイメントを管理するインフラストラクチャ管理者
- ユーザープロビジョニングとロールを処理するセキュリティ管理者
- CI/CD パイプラインを管理するDevOps エンジニア
- 本番環境の問題をトラブルシューティングするオンコールエンジニア
クイックコマンドリファレンス
# 必須コマンド
uv run snowddl-plan # 変更のプレビュー (常に最初に実行)
uv run deploy-safe # 変更を安全に適用
uv run manage-users # ユーザーライフサイクル管理
uv run manage-warehouses # ウェアハウス操作
uv run manage-costs # コスト分析
コアオペレーション
SnowDDL デプロイメントワークフロー
重要: 常に deploy-safe を使用し、生の snowddl-apply は絶対に使用しないでください
# 1. snowddl/ の YAML ファイルに変更を加えます
vim snowddl/user.yaml
# 2. 常に最初にプレビューします
uv run snowddl-plan
# 3. プランの出力を注意深く確認します
# CREATE、ALTER、DROP、GRANT、REVOKE ステートメントを探します
# 4. 安全なデプロイメントを使用して適用します (スキーマ権限を保持)
uv run deploy-safe
なぜ deploy-safe なのか?
SnowDDL は SCHEMA オブジェクトを管理から除外するため、スキーマレベルの権限を取り消す可能性があります。deploy-safe ラッパーは、すべてのデプロイメント後にこれらの権限を自動的に復元し、dbt やその他のツールが権限を失うのを防ぎます。
プラン出力の理解
[APPLY] CREATE USER "NEW_USER" ← 新しいオブジェクトが作成されます
[APPLY] ALTER USER "EXISTING_USER" ← オブジェクトが変更されます
[APPLY] DROP USER "OLD_USER" ← オブジェクトが削除されます (注意!)
[APPLY] GRANT ROLE "X" TO USER "Y" ← 権限が追加されます
[APPLY] REVOKE ROLE "X" FROM USER "Y" ← 権限が削除されます
注意すべき危険信号:
- 予期しない
DROPステートメント - 大量の
REVOKEステートメント (スキーマのずれの可能性) - 管理ロール (ACCOUNTADMIN, SECURITYADMIN) の変更
ユーザー管理
新しいユーザーの作成
オプション 1: インタラクティブウィザード (推奨)
uv run manage-users create
オプション 2: YAML を直接編集
# snowddl/user.yaml
NEW_USER:
comment: "データアナリスト - アナリティクスチーム"
type: PERSON
default_role: ANALYST_ROLE__B_ROLE
default_warehouse: MAIN_WAREHOUSE
email: user@company.com
authentication:
password: !decrypt |
gAAAAABl...encrypted...
rsa_public_key: |
-----BEGIN PUBLIC KEY-----
MIIBIjAN...
-----END PUBLIC KEY-----
オプション 3: 非インタラクティブ
uv run manage-users create \
--first-name Jane \
--last-name Smith \
--email jane@company.com \
--role ANALYST_ROLE
ユーザータイプ
| Type | Use For | MFA Required | Network Policy |
|---|---|---|---|
PERSON |
ヒューマンユーザー | Yes (2026年まで) | 適用 |
SERVICE |
サービスアカウント | No | 適用されない |
パスワードの暗号化
# Fernet キーの生成 (初回セットアップ)
uv run util-generate-key
# パスワードの暗号化
uv run snowddl-encrypt "MySecurePassword123!"
# 出力: gAAAAABl...
# YAML で !decrypt タグを使用
authentication:
password: !decrypt |
gAAAAABl...encrypted_output...
ユーザーの RSA キーのセットアップ
# ユーザーのキーを生成
uv run generate-rsa-batch --users NEW_USER
# または手動で:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -nocrypt -out user_key.p8
openssl rsa -in user_key.p8 -pubout -out user_key.pub
# 公開キーを user.yaml に追加
cat user_key.pub
ロール階層
SnowDDL ロール命名規則
ROLE_NAME__B_ROLE → ビジネスロール (ユーザーに割り当て)
ROLE_NAME__T_ROLE → テクニカルロール (ビジネスロールに割り当て)
DB__SCHEMA__S_ROLE → スキーマロール (SnowDDL によって自動作成)
ロール割り当てフロー
User → ビジネスロール (__B_ROLE) → テクニカルロール (__T_ROLE) → 権限
ロールの作成
ビジネスロール (snowddl/business_role.yaml):
ANALYST_ROLE:
comment: "読み取りアクセス権を持つビジネスアナリスト"
tech_roles:
- STRIPE_READER_ROLE
- ANALYTICS_READER_ROLE
warehouse_usage:
- MAIN_WAREHOUSE
schema_read:
- PROJ_STRIPE.ANALYTICS
テクニカルロール (snowddl/tech_role.yaml):
STRIPE_READER_ROLE:
grants:
DATABASE:USAGE:
- SOURCE_STRIPE
- PROJ_STRIPE
SCHEMA:USAGE:
- SOURCE_STRIPE.STRIPE_WHY
- PROJ_STRIPE.PROJ_STRIPE
TABLE:SELECT:
- SOURCE_STRIPE.STRIPE_WHY.*
データベースとスキーマの管理
データベースの作成
# ディレクトリを作成
mkdir snowddl/MY_NEW_DB
# params.yaml を追加
cat > snowddl/MY_NEW_DB/params.yaml << 'EOF'
comment: "分析プロジェクト用の新しいデータベース"
is_transient: false
EOF
# デプロイ
uv run snowddl-plan
uv run deploy-safe
スキーマの作成
# スキーマディレクトリを作成
mkdir snowddl/MY_DB/MY_SCHEMA
# params.yaml を追加
cat > snowddl/MY_DB/MY_SCHEMA/params.yaml << 'EOF'
comment: "生データ取り込み用のスキーマ"
is_transient: false
is_sandbox: false
EOF
スキーマタイプ
| Parameter | Effect |
|---|---|
is_transient: true |
タイムトラベルなし、フェイルセーフなし |
is_sandbox: true |
TRANSIENT スキーマとして作成 |
CI/CD オペレーション
GitHub Actions ワークフロー
| Workflow | Trigger | Purpose |
|---|---|---|
ci.yml |
PRs, pushes | Lint + テスト検証 |
release.yml |
Tags v* |
GitHub リリースの作成 |
labeler.yml |
PRs | ファイルタイプで自動ラベル |
changelog.yml |
Push to main | 変更履歴の更新 |
PR を介したインフラストラクチャの変更
# 1. フィーチャーブランチを作成
git checkout v0.2
git checkout -b feature/add-new-user
# 2. YAML を変更
vim snowddl/user.yaml
# 3. ローカルで検証
uv run pre-commit run --all-files
uv run pytest
# 4. コミットしてプッシュ
git add .
git commit -m "feat: Add new user JANE_DOE"
git push -u origin feature/add-new-user
# 5. PR を作成
gh pr create --base v0.2
# 6. CI が自動的に実行され、承認後にマージ
リリースプロセス
#
(原文がここで切り詰められています) 📜 原文 SKILL.md(Claudeが読む英語/中国語)を展開
SnowTower Administrator Guide
A comprehensive skill for administrators managing Snowflake infrastructure through SnowTower.
Who This Skill Is For
- Infrastructure administrators managing SnowDDL deployments
- Security admins handling user provisioning and roles
- DevOps engineers managing CI/CD pipelines
- On-call engineers troubleshooting production issues
Quick Command Reference
# Essential commands
uv run snowddl-plan # Preview changes (ALWAYS run first)
uv run deploy-safe # Apply changes safely
uv run manage-users # User lifecycle management
uv run manage-warehouses # Warehouse operations
uv run manage-costs # Cost analysis
Core Operations
SnowDDL Deployment Workflow
CRITICAL: Always use deploy-safe, never raw snowddl-apply
# 1. Make changes to YAML files in snowddl/
vim snowddl/user.yaml
# 2. ALWAYS preview first
uv run snowddl-plan
# 3. Review the plan output carefully
# Look for: CREATE, ALTER, DROP, GRANT, REVOKE statements
# 4. Apply using safe deployment (preserves schema grants)
uv run deploy-safe
Why deploy-safe?
SnowDDL excludes SCHEMA objects from management, which can cause it to revoke schema-level grants. The deploy-safe wrapper automatically restores these grants after every deployment, preventing dbt and other tools from losing permissions.
Understanding Plan Output
[APPLY] CREATE USER "NEW_USER" ← New object will be created
[APPLY] ALTER USER "EXISTING_USER" ← Object will be modified
[APPLY] DROP USER "OLD_USER" ← Object will be deleted (CAREFUL!)
[APPLY] GRANT ROLE "X" TO USER "Y" ← Permission will be added
[APPLY] REVOKE ROLE "X" FROM USER "Y" ← Permission will be removed
Red flags to watch for:
- Unexpected
DROPstatements - Mass
REVOKEstatements (might be schema drift) - Changes to admin roles (ACCOUNTADMIN, SECURITYADMIN)
User Management
Creating a New User
Option 1: Interactive wizard (recommended)
uv run manage-users create
Option 2: Edit YAML directly
# snowddl/user.yaml
NEW_USER:
comment: "Data Analyst - Analytics Team"
type: PERSON
default_role: ANALYST_ROLE__B_ROLE
default_warehouse: MAIN_WAREHOUSE
email: user@company.com
authentication:
password: !decrypt |
gAAAAABl...encrypted...
rsa_public_key: |
-----BEGIN PUBLIC KEY-----
MIIBIjAN...
-----END PUBLIC KEY-----
Option 3: Non-interactive
uv run manage-users create \
--first-name Jane \
--last-name Smith \
--email jane@company.com \
--role ANALYST_ROLE
User Types
| Type | Use For | MFA Required | Network Policy |
|---|---|---|---|
PERSON |
Human users | Yes (by 2026) | Applied |
SERVICE |
Service accounts | No | Not applied |
Encrypting Passwords
# Generate Fernet key (one-time setup)
uv run util-generate-key
# Encrypt a password
uv run snowddl-encrypt "MySecurePassword123!"
# Output: gAAAAABl...
# Use in YAML with !decrypt tag
authentication:
password: !decrypt |
gAAAAABl...encrypted_output...
RSA Key Setup for Users
# Generate keys for a user
uv run generate-rsa-batch --users NEW_USER
# Or manually:
openssl genrsa 2048 | openssl pkcs8 -topk8 -inform PEM -nocrypt -out user_key.p8
openssl rsa -in user_key.p8 -pubout -out user_key.pub
# Add public key to user.yaml
cat user_key.pub
Role Hierarchy
SnowDDL Role Naming Convention
ROLE_NAME__B_ROLE → Business role (assigned to users)
ROLE_NAME__T_ROLE → Technical role (assigned to business roles)
DB__SCHEMA__S_ROLE → Schema role (auto-created by SnowDDL)
Role Assignment Flow
User → Business Role (__B_ROLE) → Technical Roles (__T_ROLE) → Permissions
Creating Roles
Business Role (snowddl/business_role.yaml):
ANALYST_ROLE:
comment: "Business analysts with read access"
tech_roles:
- STRIPE_READER_ROLE
- ANALYTICS_READER_ROLE
warehouse_usage:
- MAIN_WAREHOUSE
schema_read:
- PROJ_STRIPE.ANALYTICS
Technical Role (snowddl/tech_role.yaml):
STRIPE_READER_ROLE:
grants:
DATABASE:USAGE:
- SOURCE_STRIPE
- PROJ_STRIPE
SCHEMA:USAGE:
- SOURCE_STRIPE.STRIPE_WHY
- PROJ_STRIPE.PROJ_STRIPE
TABLE:SELECT:
- SOURCE_STRIPE.STRIPE_WHY.*
Database & Schema Management
Creating a Database
# Create directory
mkdir snowddl/MY_NEW_DB
# Add params.yaml
cat > snowddl/MY_NEW_DB/params.yaml << 'EOF'
comment: "New database for analytics project"
is_transient: false
EOF
# Deploy
uv run snowddl-plan
uv run deploy-safe
Creating a Schema
# Create schema directory
mkdir snowddl/MY_DB/MY_SCHEMA
# Add params.yaml
cat > snowddl/MY_DB/MY_SCHEMA/params.yaml << 'EOF'
comment: "Schema for raw data ingestion"
is_transient: false
is_sandbox: false
EOF
Schema Types
| Parameter | Effect |
|---|---|
is_transient: true |
No Time Travel, no Fail-safe |
is_sandbox: true |
Creates as TRANSIENT schema |
CI/CD Operations
GitHub Actions Workflows
| Workflow | Trigger | Purpose |
|---|---|---|
ci.yml |
PRs, pushes | Lint + test validation |
release.yml |
Tags v* |
Create GitHub release |
labeler.yml |
PRs | Auto-label by file type |
changelog.yml |
Push to main | Update changelog |
Making Infrastructure Changes via PR
# 1. Create feature branch
git checkout v0.2
git checkout -b feature/add-new-user
# 2. Make YAML changes
vim snowddl/user.yaml
# 3. Validate locally
uv run pre-commit run --all-files
uv run pytest
# 4. Commit and push
git add .
git commit -m "feat: Add new user JANE_DOE"
git push -u origin feature/add-new-user
# 5. Create PR
gh pr create --base v0.2
# 6. CI runs automatically, merge after approval
Release Process
# After all PRs merged to v0.2
git checkout main
git pull
git merge v0.2
git tag v0.2.0
git push origin main --tags
# Release workflow creates GitHub release automatically
Troubleshooting
Schema Grant Drift
Symptom: Plan shows hundreds of REVOKE statements for schema grants
Cause: SnowDDL doesn't manage SCHEMA objects directly; grants from dbt or other tools appear as drift
Solution:
# Always use deploy-safe which auto-applies schema grants
uv run deploy-safe
# Or manually apply schema grants
uv run apply-schema-grants
Authentication Failures
# Diagnose authentication issues
uv run util-diagnose-auth
# Fix common auth problems
uv run util-fix-auth
# Check specific user
snow sql -q "DESCRIBE USER USERNAME"
User Locked Out
-- Check user status
SHOW USERS LIKE 'USERNAME';
-- Unlock user (as ACCOUNTADMIN)
ALTER USER USERNAME SET MINS_TO_UNLOCK = 0;
-- Check login history
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.LOGIN_HISTORY
WHERE USER_NAME = 'USERNAME'
ORDER BY EVENT_TIMESTAMP DESC
LIMIT 10;
SnowDDL Errors
"Object does not exist"
- Run with ACCOUNTADMIN:
uv run snowddl-planuses-r ACCOUNTADMIN - Check object was created in correct database/schema
"Insufficient privileges"
- Verify SNOWFLAKE_ROLE is set to ACCOUNTADMIN
- Check the service account has required permissions
Exit code 8
- Means "changes applied successfully"
- Not an error, SnowDDL uses this to indicate modifications were made
Security Operations
Network Policies
# snowddl/network_policy.yaml
corporate_network_policy:
allowed_ip_list:
- 192.0.2.0/24
- 10.0.0.0/8
comment: "Corporate network access only"
MFA Compliance
Deadline: March 2026 for all human users
# Check MFA status
uv run manage-security --check-mfa
# List users without MFA
snow sql -q "
SELECT name, has_mfa_registered
FROM SNOWFLAKE.ACCOUNT_USAGE.USERS
WHERE type = 'PERSON' AND NOT has_mfa_registered
"
Emergency Access
The STEPHEN_RECOVERY account is configured without network policy for emergency access:
- Use only when primary access methods fail
- Requires password authentication
- Document all usage
Cost Management
# Analyze costs
uv run manage-costs --analyze
# Check warehouse usage
uv run manage-warehouses --status
# Suspend all warehouses (emergency)
uv run manage-warehouses --suspend-all
Warehouse Configuration
# snowddl/warehouse.yaml
MAIN_WAREHOUSE:
size: XSMALL
auto_suspend: 60 # seconds
auto_resume: true
min_cluster_count: 1
max_cluster_count: 1
resource_monitor: main_monitor
Key File Locations
| File | Purpose |
|---|---|
snowddl/user.yaml |
User accounts |
snowddl/business_role.yaml |
Business roles |
snowddl/tech_role.yaml |
Technical roles with grants |
snowddl/warehouse.yaml |
Warehouse configuration |
snowddl/*_policy.yaml |
Security policies |
snowddl/{DB}/params.yaml |
Database configuration |
snowddl/{DB}/{SCHEMA}/params.yaml |
Schema configuration |
Environment Variables
Required in .env:
SNOWFLAKE_ACCOUNT=your_account
SNOWFLAKE_USER=SNOWDDL
SNOWFLAKE_ROLE=ACCOUNTADMIN
SNOWFLAKE_WAREHOUSE=ADMIN
SNOWFLAKE_PRIVATE_KEY_PATH=~/.ssh/snowflake_rsa_key.p8
SNOWFLAKE_CONFIG_FERNET_KEYS=your_fernet_key
Emergency Procedures
Rollback Last Deployment
# Revert YAML changes
git checkout HEAD~1 -- snowddl/
# Re-apply
uv run deploy-safe
Complete Service Account Reset
# Regenerate RSA keys
uv run generate-rsa-batch --users SNOWDDL --force
# Update in Snowflake
snow sql -q "ALTER USER SNOWDDL SET RSA_PUBLIC_KEY='...'"
# Update GitHub secrets
gh secret set SNOWFLAKE_PRIVATE_KEY < new_key.p8
Health Check
# Quick health check
uv run monitor-health
# Full system audit
uv run manage-security --full-audit