mcpField
O
onepassword-cli-coder

onepassword-cli-coder

github.com/majesticlabs-devセキュリティ5056 回インストール7 週間前に更新
リポジトリ

onepassword-cli-coder について

プロジェクトやデプロイのワークフローで1Password CLIを使ってシークレットを管理する開発者向けのスキルです。参照形式、Vaultやアイテムの整理、環境変数への注入、安全対策を扱います。

主な機能

  1. 01シークレット参照と命名規則
  2. 02環境ファイルの設定とコマンドへの注入
  3. 03Makefile、Docker Compose、デプロイの例
  4. 04Vault、アイテム、アカウントの管理パターン
  5. 05セキュリティ指針とトラブルシューティング用コマンド

活用シーン

  1. 01ローカル開発コマンドへの認証情報の読み込み
  2. 02デプロイ環境ごとのシークレット整理
  3. 03CI/CDによる認証情報取得の設定
  4. 041Password CLIのアクセスやフィールド問題の調査

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/majesticlabs-dev/majestic-marketplace --skill onepassword-cli-coder

インストール後、Claude Code で/onepassword-cli-coderを入力して読み込まれたか確認します。

同梱ファイルreferences/multiple-accounts.md

詳細

基本パターン

シークレット参照形式
op://<vault>/<item>/<field>

例:

op://Development/AWS/access_key_id
op://Production/Database/password
op://Shared/Stripe/secret_key
項目の命名規則

形式:{environment}-{service}(kebab-case)。環境ごとに項目を1つ作成します。

パターン例避けるべき例
{env}-{service}production-railsProduction Rails
{env}-{provider}production-dockerhubAPI Key
{env}-{provider}-{resource}production-hetzner-s3環境が混在した項目
フィールドの命名

認証情報の種類を示す、意味が明確なフィールド名を使用します。

推奨例避けるべき例理由
access_tokenvalue名前から内容がわかる
master_keysecret具体的な用途が明確
secret_access_keykeyAWS の命名に一致
api_tokentoken他のトークンと区別できる

フィールドの命名規則:

  • 可能な場合はプロバイダーの用語に合わせます(AWS では access_key_id、secret_access_key を使用します)
  • 一貫性を保つため、snake_case を使用します
  • 具体的な名前を付けます。項目に複数の認証情報がある場合は、単に password とせず database_password とします
環境ファイル(.op.env)

プロジェクトのルートに .op.env を作成します。

AWS_ACCESS_KEY_ID=op://Infrastructure/AWS/access_key_id
AWS_SECRET_ACCESS_KEY=op://Infrastructure/AWS/secret_access_key
DIGITALOCEAN_TOKEN=op://Infrastructure/DigitalOcean/api_token
DATABASE_URL=op://Production/PostgreSQL/connection_string
STRIPE_SECRET_KEY=op://Production/Stripe/secret_key

重要: .gitignore に追加します。

# 1Password - NEVER commit
.op.env
*.op.env
シークレットを使ったコマンドの実行
op run --env-file=.op.env -- terraform plan
op run --env-file=.op.env -- rails server

統合パターン

Makefile との統合
OP ?= op
OP_ENV_FILE ?= .op.env

# Prefix for all commands needing secrets
CMD = $(OP) run --env-file=$(OP_ENV_FILE) --

deploy:
	$(CMD) kamal deploy

console:
	$(CMD) rails console

migrate:
	$(CMD) rails db:migrate
Docker Compose
op run --env-file=.op.env -- docker compose up
Kamal のデプロイ
# config/deploy.yml
env:
  secret:
    - RAILS_MASTER_KEY
    - DATABASE_URL
    - REDIS_URL
# .kamal/secrets
RAILS_MASTER_KEY=$(op read "op://Production/Rails/master_key")
DATABASE_URL=$(op read "op://Production/PostgreSQL/url")
REDIS_URL=$(op read "op://Production/Redis/url")
CI/CD(GitHub Actions)
# .github/workflows/deploy.yml
jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - uses: 1password/load-secrets-action@v2
        with:
          export-env: true
        env:
          OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }}
          AWS_ACCESS_KEY_ID: op://CI/AWS/access_key_id
          AWS_SECRET_ACCESS_KEY: op://CI/AWS/secret_access_key

      - run: terraform apply -auto-approve

CLI コマンド

シークレットの読み取り
op read "op://Vault/Item/field"
op read "op://Vault/Item/field" --format json
op read "op://Vault/TLS/private_key" > /tmp/key.pem && chmod 600 /tmp/key.pem
コマンドへの注入
DATABASE_URL=$(op read "op://Production/DB/url") rails db:migrate
op run --env-file=.op.env -- ./deploy.sh
op run --account my-team --env-file=.op.env -- terraform apply
項目の管理
op vault list
op item list --vault Infrastructure
op item get "AWS" --vault Infrastructure
op item create --category login --vault Infrastructure \
  --title "New Service" --field username=admin --field password=secret123

プロジェクトのセットアップ

初期設定
op signin
op vault list

cat > .op.env << 'EOF'
AWS_ACCESS_KEY_ID=op://Infrastructure/AWS/access_key_id
AWS_SECRET_ACCESS_KEY=op://Infrastructure/AWS/secret_access_key
DATABASE_URL=op://Production/Database/url
REDIS_URL=op://Production/Redis/url
EOF

op run --env-file=.op.env -- env | grep -E '^(AWS|DATABASE|REDIS)'
プレースホルダーのワークフロー

事前にプレースホルダー値で項目を作成し、後から実際の認証情報を設定します。

op item create --vault myproject --category login \
  --title "production-rails" --field master_key="PLACEHOLDER_UPDATE_BEFORE_DEPLOY"

cat > .kamal/secrets << 'EOF'
RAILS_MASTER_KEY=$(op read "op://myproject/production-rails/master_key")
EOF

# Later: update with real value
op item edit "production-rails" --vault myproject \
  master_key="actual_secret_value_here"
Vault の整理

単一 Vault 方式(よりシンプル)

環境を区別する命名規則を使って、1つの Vault を使用します。

Vault: myproject
Items:
  - production-rails
  - production-dockerhub
  - production-hetzner-s3
  - staging-rails
  - staging-dockerhub
  - development-rails

複数 Vault 方式(チーム規模) -- チームごとに異なるアクセス制御が必要な場合に使用します。

Vault用途アクセス権
Infrastructureクラウドプロバイダーの認証情報DevOps チーム
Production本番アプリのシークレットデプロイシステム
Stagingステージング環境開発チーム
Developmentローカル開発用シークレット各開発者

セキュリティルール

  • .op.env と *.op.env を .gitignore に追加し、決してコミットしないでください
  • CI/CD では個人アカウントではなく、サービスアカウントを使用してください
  • op read の出力をログにパイプしたり、echo で出力したりしないでください
  • セッショントークンをスクリプトに保存しないでください
  • 自動化では Vault 名と項目名に変数を使用してください

トラブルシューティング

op signin                  # Re-authenticate expired session
op whoami                  # Check current session
op vault list              # Verify vault access
op item list --vault Infrastructure | grep -i aws   # Search for items
op item get "AWS" --vault Infrastructure --format json | jq '.fields[].label'  # Check field names

複数アカウント

自動化では必ずアカウントを指定してください。「最後にサインインしたアカウント」に依存しないでください。

op vault list --account acme.1password.com
export OP_ACCOUNT=acme.1password.com
op run --account acme.1password.com --env-file=.op.env -- ./deploy.sh

複数環境のパターン

環境ごとに env ファイルを使用します:.op.env.production、.op.env.staging、.op.env.development

ENV ?= development
OP_ENV_FILE = .op.env.$(ENV)

deploy:
	op run --env-file=$(OP_ENV_FILE) -- kamal deploy
# Usage: make deploy ENV=production

参考資料

コメント