はじめに

本記事の内容ですが、ローカル(検証)環境向けの操作と、本番環境向けの操作を明示的に分ける自分流の対策の共有となります。

ローカル(検証)環境に向けた操作だと思って操作したら誤って本番環境の操作を実施していました、のような気をつけていれば回避できるミスを、少しでも起こさないための自分なりの対策を記載します。仕事内容として本番環境への作業機会も多く、視覚的に、意識的に、ローカル環境と本番環境を区別できるようにしておくことでヒューマンエラーの可能性を少しでもへらせるような設定を心掛けています。

この記事は、私のMac端末のiTerm2設定についてがメインの議題になりますが、考え方については他の環境でも流用できると思っています。
また、弊社の仕事内容として、AWS環境への操作が多く、AWSアクセスキーを用いた本番環境への接続についてを記載しています。

本番環境触っていると意識を持つ

大前提として、本番環境を操作するときは細心の注意を払って作業します。
そのため、今本番環境を触っているんだぞ、と一目でわかるような設定を追加すると効果的に分けることができると考えています。

①SSH接続時にターミナルの色を変更する

改めてとなりますが私はiTerm2 を使って、AWS CLIコマンドによる操作もAWS環境にあるEC2へのSSH接続も、その他雑多な操作も実施しています。
そのため、今ローカル環境を触っているのか、本番環境に接続しているのかを、一目で認識できる設定を追加しています。

イメージとしては、以下のように視覚的にSSH接続時にターミナルの背景色を変更することで、今触っているターミナルは本番環境なんだぞ って明示することで設定操作先を確認しています。
(そもそも、SSH接続時の入力プロンプトに注意すればいいのですが…)

具体的な設定方法ですが、SSH接続のコマンド時にiTerm2の背景色を変更するスクリプトを呼びだし、接続を中断するときに背景色を元に戻す処理を実施しています。

あくまで自環境での設定の一例になりますが、
下記コードをssh-background.shなどの名前でスクリプトとして保存し、aliasコマンドでssh接続時にスクリプトを呼び出す処理alias ssh='~/tmp/ssh-change-bg'をprofileに登録することで背景色を変更させています。

#!/bin/bash

# Ctrl-C
trap 'echo -e "Interrupted.\033]1337;SetColors=bg=000\a"; exit;' INT

echo -ne '\033]1337;SetColors=bg=400\a' # to red
/usr/bin/ssh "$@"
echo -ne '\033]1337;SetColors=bg=000\a' # to black

SSH接続全般で色を変えていますが、特定の接続先IPで背景色の色を変える(10.0.x.xの本番セグメントは青、172.168.x.xの検証セグメントは緑)ような応用設定も有効かと思われます。

②ログイン情報の適用されているディレクトリを限定させる

本番環境のAWSの操作に当たり、AWS SSOを用いたログイン・アクセス権限の運用の方が便利かつ安全ですが、場面によってはIAMによるユーザーを直接払い出しAWSアクセスキーを使用してCLI操作をしたいことがあると思います。

IAMユーザーのアクセスキーをaws configureに登録することでAWSの操作を行えます。
ですが、このユーザーがAdmin権限を持っていてaws configureの適用範囲がターミナル全域に適用されている場合、CLIコマンドを実行しようとした際に想定していないAWS環境の操作してしまう可能性が考えられます。

そこで、direnvの機能を使って特定のディレクトリにアクセスした時のみアクセスキー・シークレットキーを有効にする設定を追加することで、aws configureの有効範囲を限定することができます。

具体的な設定方法ですが、
以下の例のようなディレクトリ構成の場合、hoge/fugaディレクトリ配下にある.envrcファイルにアクセスキーを登録することで、fugaディレクトリに移動した時にのみ.envrcに登録されたIAMユーザーによるアクセスキーが環境変数として有効化されるような設定をします。

hoge/
├── fuga/
│   ├── .envrc
│   └── fuga.json
├── piyo/
│   └── piyo.yaml
└── hoge.txt

.envrcの中身はアクセスキー、シークレットキーを環境変数になるように記載し、direnv allowでdirenvに登録します。

export aws_access_key_id=XXXXXXXXXXXXXXXXXXXXXX
export aws_secret_access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

また、アクセスキー・シークレットキーの管理も併せて実施する必要があります。
例えば、gitによるファイルの管理をする場合に.envrcファイルを誤ってアップロードしてしまうことが考えられます。
そこで、git-secretsを導入し.envrcファイルでgitの管理外に指定することでアクセスキーのアップロードを制限することができます。

③デスクトップでローカル・本番環境を分けて管理する。

1つのデスクトップでローカル環境もAWS環境も操作していると、どのターミナルやどのブラウザのタブがローカル(検証)向け・本番環境向けの操作かわからなくなります。
そこで操作したい環境毎にデスクトップを分けてターミナルやブラウザを管理することで、操作対象を明確化し誤操作を減らす努力を実施しております。

Macでのデスクトップ操作は、タッチパッドだと3本の指でスライド、キーボードだと【Control】 + 【←キー or →キー】で切り替えることができます。

まとめ

簡単にではありますが、自分が実施している本番環境を触るときの視覚的な設定と心構えとなります。
この内容がどなたかの参考になれば幸いです。