目的
Heroku にアクセスする際のアカウントを管理する方法についてまとめます。
顧客毎のアカウントを一台のマシンで切り替えて利用する必要が有る場合を想定しています。
複数アカウントを管理/切り替え利用するための専用のアドオンがあるので使うと便利です。
- アドオンメインサイト - ddollar / heroku-accounts - GitHub
- 参考)herokuコマンドで複数アカウントを使いわける - Sooey
本ページで紹介している内容は、アドオンがやってくれることとほとんど変わりありません。
本ページの目的は、アカウント管理の本質的な理解です。アドオンを普通に利用できるのであれば、読む必要はありません。
アドオンを使っていて、起こっていることの意味が理解できなかった場合に参考になるでしょう。
このページの内容を理解すればアドオンなしでも複数アカウントの管理ができるようになります。
基礎
アカウント情報
Heroku にアクセスするためのアカウント情報には以下の種類があります。
詳しい解説を付記しますが、詳細は知らずともアカウントを管理するのに必要な管理対象の存在だけでも知っておくといいでしょう。
情報 | 説明 |
メールアドレス | アカウント名に相当します。各種通知がこのメールアドレスに届きます。 |
ログインパスワード | Heroku にアクセスする際のパスワードです。 |
SSH Key(RSA暗号用) | Heroku サーバとの通信を暗号化するために使うキーです*1。 |
SSH Key を保護するためのパスフレーズ | SSH Key を他人に盗み見られないために使うキーです。 |
API Key | Heroku API を使って機械的に操作を行う際に追加で必要になるキーです。自動発行されます。アカウント画面で確認できます。 |
これらの管理/利用がアカウントを管理するということです。
SSH Key は、秘密鍵暗号法による暗号化のためのキーです。
キーを作るには ssh-keygen コマンドを利用します。Windows では Heroku Toolbelt にこのコマンドが入っています*2。
ssh-keygen によって相互通信暗号化のための鍵を2つ作ります。標準では以下の2つのファイルができます。(~/ はアカウントのホームフォルダです。Windows の場合は、マイ ドキュメントフォルダなどがあるフォルダのことです。)
通称 | ファイル | 説明 |
秘密鍵 | ~/.ssh/id_rsa | こちらから Heroku への通信を暗号化するための鍵です。 |
公開鍵 | ~/.ssh/id_rsa.pub | Heroku からこちらへの通信を暗号化するための鍵です。 |
片方の鍵で暗号化したものは、もう片方の鍵でのみ復号化できます。秘密鍵で暗号化したものは公開鍵で復号化でき、公開鍵で暗号化したものは秘密鍵で復号化できます。互いに鍵を1つずつ持ちます。
公開鍵は、Heroku がこちらへの通信に使うため Heroku へと渡します。アカウント画面で確認できます。
秘密鍵は自分だけが持ちます。
ssh-keygen コマンドによってキーを作る際、パスフレーズというものを入力します。パスフレーズはなりすましを防ぐため秘密鍵を暗号化するものです。
秘密鍵ファイルを盗まれたとしても、パスフレーズを知らない人は正常な秘密鍵に復号化できません(=使えないということです)。だから、通信できないのです。
設定が完了すれば Heroku コマンドを使用する際、パスフレーズの入力要求を受けるようになります。
パスフレーズを知らない人は当然アクセスできません。
関連コマンド
アカウント管理に使うコマンドをまとめます。
コマンド名 | 説明 |
ssh-keygen | 相互通信暗号化のためのキーを作ります。 |
heroku auth | ログイン/ログアウトをする際に利用するコマンドです。 |
heroku keys | ログインアカウントのキーを管理するためのコマンドです。 |
heroku auth と heroku keys の説明は後でします。以下のコマンドでヘルプが見れることを覚えておくと良いです。
heroku help auth heroku help keys
ここでは ssh-keygen の説明だけします。
ssh-keygen は通常、そのままコマンドを打ち込んで使います。
ssh-keygen
標準では「~/.ssh/id_rsa」(秘密鍵)と「~/.ssh/id_rsa.pub」(公開鍵)が作られますが、ファイル名を指定したい場合は -f オプションを使います。
ssh-keygen -f taro
「./taro」(秘密鍵)と「./taro.pub」(公開鍵)が作れます。複数アカウントを切り替える場合に使います。
ssh-keygen の詳細な説明は以下を参照してください。
複数アカウントの管理
ここからが本題です。
まず最初にアカウントの登録は通常通り個別に行なったもので構いません。
複数アカウント管理のポイントは、
- 現在ログインアカウントの把握/変更
- 複数 SSH Key の管理
です。
それによって影響を受けるのは
- heroku コマンドによる各種操作
- git によるアプリケーションの操作
現在ログインアカウントの把握/変更
ログイン/ログアウトするには、以下のコマンドを実行してください。
heroku auth:login heroku auth:logout
以下のコマンドでも大丈夫です。
heroku login heroku logout
今、自分がどのアカウントとしてログインしているか把握するには以下のコマンドを実行します。
heroku auth:whoami
heroku コマンドによる各種操作は、ログインしているアカウントによって行われるので、必要に応じてログイン/ログアウトを実行してください。
次にキーの管理です。
ログインした状態で以下のコマンドを実行するとキーを追加できます。
heroku keys:add
「~/.ssh/」フォルダにあるキーが一覧表示され、どれを追加するか選択できます。
キーを削除したい場合は以下のコマンドを実行します。
heroku keys:clear
複数 SSH Key の管理
SSH の設定方法
標準ではキーのファイル名が「~/.ssh/id_rsa」と「~/.ssh/id_rsa.pub」になりますが、複数アカウントを切り替えるために -f オプションを使ってアカウント毎に別のファイルを作成してください。
次に複数キーを作りましたが「~/.ssh/config」を作り、必要に応じて利用するキーを切り替えられるようにします。
「~/.ssh/config」の詳細な説明は以下を参照してください。
ここでは、以下の方法で利用するキーを切り替えられるようにする方法を説明します。
- アカウント毎に仮想ホスト名(アカウントを識別するためだけの実在しないホスト名)を想定する。
- 仮想ホスト名へのアクセスによってアカウントを識別し、使用するキーを決定する。
- 実際のアクセス先は heroku.com とする。
以上の方法を具体化するには以下のように「~/.ssh/config」を書きます。
Host heroku.アカウント1の名前 HostName heroku.com IdentityFile ~/.ssh/アカウント1用のキーファイル名 IdentitiesOnly yes Host heroku.アカウント2の名前 HostName heroku.com IdentityFile ~/.ssh/アカウント2用のキーファイル名 IdentitiesOnly yes ... 以下、アカウント分 ...
例えば taro と jiro というアカウントがおり、それぞれの秘密鍵が「~/.ssh/taro」「~/.ssh/jiro」だった場合は以下のように書きます*3。
Host heroku.taro HostName heroku.com IdentityFile ~/.ssh/taro IdentitiesOnly yes Host heroku.jiro HostName heroku.com IdentityFile ~/.ssh/jiro IdentitiesOnly yes
この設定の意味は以下の通りです。
- Host でアカウント専用の「heroku.アカウント名」という名前の仮想ホストを定義する。
- HostName で実際のアクセス先を heroku.com と定義する。
- IdentifyFile で利用するアカウント毎のキーを定義する。
- IdentitiesOnly yes は安全性を上げるためのものぐらい。詳細はマニュアルを参照のこと。
この設定は git によるアプリケーションの操作の際に意味をなします。アプリケーションの管理の基礎的な知識は以下を参照してください。
アプリケーションの操作方法
git で Heroku のリポジトリにアクセスする際、 通常は heroku.com にアクセスしますが、該当アカウント用の仮想ホストに切り替えてアクセスすることでアカウント(=利用するキー)を識別します。
- アプリケーション作成/初期デプロイ時
heroku create でアプリケーションを作成した際に登録される heroku リモートリポジトリ heroku の接続先を以下のコマンドで変更します。
git remote set-url heroku git@heroku.アカウント名:アプリケーション名.git
- インストール済みアプリケーションのソースコード取得
基本は同じですが、接続先ホスト名の部分を変えます。以下、事例です。
git clone git@heroku.アカウント名:アプリケーション名.git
弊害
この方法を取ると各種 git リポジトリでの heroku コマンド操作時にアプリケーションIDの指定を省略できなくなります。
以下のエラーメッセージがそうです。
! No app specified. ! Run this command from an app folder or specify which app to use with --app APP.
回避方法を必ず --app オプションを使ってアプリケーションIDを指定すれば良いだけです。
頻繁に使うアカウント用の秘密鍵/公開鍵の名前は、
- id_rsa
- id_rsa.pub
として使った方が楽でしょう。
コメント
本ページの内容に関して何かコメントがある方は、以下に記入してください。
コメントはありません。 コメント/heroku/how/management/account