jpskill.com
💼 ビジネス コミュニティ

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本体の挙動とは独立した参考情報です。

⚡ おすすめ: コマンド1行でインストール(60秒)

下記のコマンドをコピーしてターミナル(Mac/Linux)または PowerShell(Windows)に貼り付けてください。 ダウンロード → 解凍 → 配置まで全自動。

🍎 Mac / 🐧 Linux
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
🪟 Windows (PowerShell)
$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. 1. 下の青いボタンを押して snowtower-admin.zip をダウンロード
  2. 2. ZIPファイルをダブルクリックで解凍 → snowtower-admin フォルダができる
  3. 3. そのフォルダを C:\Users\あなたの名前\.claude\skills\(Win)または ~/.claude/skills/(Mac)へ移動
  4. 4. Claude Code を再起動

⚠️ ダウンロード・利用は自己責任でお願いします。当サイトは内容・動作・安全性について責任を負いません。

🎯 このSkillでできること

下記の説明文を読むと、このSkillがあなたに何をしてくれるかが分かります。Claudeにこの分野の依頼をすると、自動で発動します。

📦 インストール方法 (3ステップ)

  1. 1. 上の「ダウンロード」ボタンを押して .skill ファイルを取得
  2. 2. ファイル名の拡張子を .skill から .zip に変えて展開(macは自動展開可)
  3. 3. 展開してできたフォルダを、ホームフォルダの .claude/skills/ に置く
    • · macOS / Linux: ~/.claude/skills/
    • · Windows: %USERPROFILE%\.claude\skills\

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 DROP statements
  • Mass REVOKE statements (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-plan uses -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