Private key authentication has been deprecated from the CLI.

 

EC2上でAWSのコマンドラインツールを使うためには、アクセスキー(アクセスキー ID およびシークレットアクセスキー)が必要・・

そんな風に考えていた時期が俺にもありました。

 
昔、Webの情報を参考に書いたEC2のスナップショットを自動的に取得するスクリプト、今はもう動かないようです。

EBSタイプインスタンスのスナップショット取得、パージを自動化

シェルスクリプトを実行すると、CLIツールが実行できない。

[hogehoge@ip-XXX-XXX-XXX-XXX bin]$ ./create_and_purge_snapshot.sh
[creating…] Private key authentication has been deprecated from the CLI. Please refer to the following documentation for more details: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-soap-api.html
Private key authentication has been deprecated from the CLI. Please refer to the following documentation for more details: http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/using-soap-api.html

環境変数のEC2_PRIVATE_KEYとEC2_CERT、もう受け付けてくれない模様。

If you are using the Amazon EC2 CLI tools, you will be able to use the EC2_PRIVATE_KEY and EC2_CERT environment variables for versions up to and including version 1.6.13.0. Thereafter, you must use the AWS_ACCESS_KEY and AWS_SECRET_KEY variables instead. For more information, see Setting Up the Amazon EC2 CLI and AMI Tools.

セキュリティを考えると、極めて妥当な対応ですね。EC2のインスタンス毎に秘密鍵をいちいち配置するとか面倒だし。
AWS_ACCESS_KEYとAWS_SECRET_KEYを代わりに使え的なことが書いてありますが、IAMのRoleを活用するのが、ベストプラクティスだと思います。

ロールを活用して、EC2上でCLIツールを実行するには。

1、Management ConsoleでIAMにアクセス。

2、Rolesの画面で、”Create New Role”

3、Roleの名前をつける。

ec2_role_20141012_000001

4、AWS Service Rolesは”Amazon EC2″を選択。

ec2_role_20141012_000002

5、Select Policy Templateは”Amazon EC2 Full Access”を選択してみる。
無論、フルアクセスが必要なければ、Policy Generator等で権限を絞ることも可能(実運用環境ではそうすべき)。

ec2_role_20141012_000003

6、中身を確認してNext Step。次の画面でCreate Roleすれば完了。

ec2_role_20141012_000004

7、EC2起動時に、Instance Detailにて、作成したIAM Roleを付与する。
IAM Roleは、EC2インスタンス起動時や、Stopしている時に新規で付与することはできないので注意。
(一回Terminateして、再度Launchする時にRole設定してあげないとだめ)

参考:Amazon EC2のインスタンスタイプを変更

ec2_role_20141012_000006

以上でおしまい。

これで、OSユーザの環境変数やスクリプト中にEC2_PRIVATE_KEYやAWS_ACCESS_KEYを設定しなくても、CLIツール使えるようになる。

IAM Role、めちゃ便利ですね。