プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

コマンドラインツールの認証をIAMに切り替える

現在、Redmineを運用しているEC2のサーバーですが、ちょっと昔に運用を開始したので、EC2のコマンドラインツール利用時の認証がIAMではなく、いまでいうルートアクセスキーでの認証になっていました。当時はIAMなんてなかったですね。せっかくなので、IAMユーザーを作成して、こちらで認証するように切り替えてみましたので、作業時のメモを残しておきます。

なお、このサーバー上で、ルートアクセスキーを使っている作業は、下記のものになります。

先頭から3つがEC2のコマンドラインツールで、最後の一つがS3(s3cmd)ですので、両方の認証をIAMに切り替えます。

 

(参考) IAMへの移行に関して参考になりそうな記事がいくつかあったので、載せておきます。

 

EC2コマンドラインツールの認証をIAMに切り替え

作業前に、EC2コマンドラインツールの説明を確認すると、X.509証明書を使う方法が見当たりません。環境変数の設定方法も以前とは異なっているようです(以前は、EC2_PRIVATE, EC2_CERT を設定していたのが、AWS_ACCESS_KEY, AWS_SECRET_KEY を設定するようになってます)。少し、ネットを検索してみると、『EC2 API ToolsでアクセスキーIDとシークレットアクセスキーを使う』というブログ記事がありました。こちらを見ると、IAMユーザー用に作成したアクセスキーとシークレットアクセスキーを使えば、問題なく繋がりそうです。

では、実際にやってみます。

IAMユーザーの作成

IAMユーザーを作成します。『管理コンソール』から『IAM』を選択し、『ユーザー』の『新規ユーザーの追加』ボタンを押します。あとは、画面の指示に従って作れば問題ありません。

ユーザー作成後に、アクセスキーとシークレットアクセスキーが表示(およびCSV形式でのダウンロード)されるので、大切に保管しておきます。

作成したユーザーに対して、『ユーザー』→ユーザー名を選択→アクセス許可→『管理ポリシー』→『ポリシーのアタッチ』ボタンを押します。

このユーザーに割り当てる権限の一覧が表示覚ます。今回は、EC2での作業を行いたいので、『AmazonEC2FullAccess』を選択しておきます。

 

同様に、もう一名S3へのアクセス用のユーザーを作成します。ポリシーは、『AmazonS3FullAccess』としておきます。

 

EC2コマンドラインツールの認証情報の切り替え

やってみると、難しい話ではなく、EC2コマンドライン実行時の環境変数として、

# keys
export AWS_ACCESS_KEY=xxxxxxxx
export AWS_SECRET_KEY=xxxxxxxx

を追加するだけです(EC2作業呼び出し用の設定ファイルを書き換えてます)。

 設定後、コマンドラインから、

bitnami@ip-10-132-170-91:~$ ec2ver
1.6.5.2 2012-10-01
bitnami@ip-10-132-170-91:~$ 

 として、正しく認証されていることを確認します。

 

次に、実際にコマンドを呼び出しているところの認証情報の与え方を修正します。以前は、

ec2-create-snapshot --private-key ${EC2_PRIVATE_KEY} --cert ${EC2_CERT} --description "説明" ebs_vol番号

 と与えていたところを

ec2-create-snapshot --aws-access-key ${AWS_ACCESS_KEY} --aws-secret-key ${AWS_SECRET_KEY} --description "説明" ebs_vol番号

 のように修正します。

 

S3(s3cmd)の認証情報の切り替え

こちらの認証情報の切り替えも簡単です。s3cmd の初期設定を呼び出せばOKです。ただし、利用するIAM認証情報は、S3アクセス用のユーザーに対するアクセスキーとシークレットアクセスキーになります。

bitnami@ip-10-132-170-91:~$ s3cmd --configure

Enter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.

Access key and Secret key are your identifiers for Amazon S3
Access Key [old_xxxxxxxx]: new_xxxxxxxx
Secret Key [old_yyyyyyyy]: new_yyyyyyyy

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password [xxxxxxxx]: 
Path to GPG program [/usr/bin/gpg]: 

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP and can't be used if you're behind a proxy
Use HTTPS protocol [Yes]: 

New settings:
  Access Key: new_xxxxxxxx
  Secret Key: new_yyyyyyyy
  Encryption password: xxxxxxxx
  Path to GPG program: /usr/bin/gpg
  Use HTTPS protocol: True
  HTTP Proxy server name: 
  HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] y
Please wait...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Success. Encryption and decryption worked fine :-)

Save settings? [y/N] y
Configuration saved to '/home/bitnami/.s3cfg'
bitnami@ip-10-132-170-91:~$ 

 これで、S3へも問題なく接続できるようになりました。

 

ルートアクセスキーの削除

これで、問題なく動作すると思いますので、一通り設定した機能が問題なく動作することを確認しておきます。

問題なかったので、ルートアクセスキーとX.509証明書を削除します。

これで、IAMユーザーへの切り替えが完了しました。

 

余談

まったくの余談になるのですが、SecurityGroupの設定で、自宅のIPアドレスからのアクセスに制限しているのですが、この設定の自動更新を確認するため、自宅のルーターの電源を一旦切って再度いれなおしたところ、DDNSの更新が反映されるのに2時間ぐらいかかってました。こんなにかかるものなんでしたっけ?