Cloud9からIAM Roleの権限でAWS CLIを実行する

Cloud9は、ブラウザのみでコードを記述できるクラウドベースのIDE(統合開発環境)です。

Cloud9ではデフォルトで、AWS Managed Temporary Credentials(以降、AMTCと呼ぶ)が有効になっています。 これが有効になっていることで、AWSマネジメントコンソールへログインしたユーザーと同等の権限をもつ一時クレデンシャルキーが自動で発行され、すぐにCloud9上のシェルでAWS CLIを利用できます。
AMTCについて詳しく知りたい方は弊社ブログをご覧ください。

このブログの中でも触れられているのですが、AMTCを利用する場合、IAM等に対する一部のアクションが制限されています。

Cloud9からIAM系のサービスを構築したい場合もあると思います。
その解決策として、Cloud9からIAM Roleの権限でAWS CLIを実行する方法を紹介します。

Cloud9を構築する

Cloud9の構築はとても簡単です。Cloud9のコンソール画面からウィザードのとおり進めていけば、数分で構築できます。

適当な名前をつけて次へ進みます。今回は cloud9-sample という名前にしています。

デフォルトのままで問題ないので次へ進みます。

設定を確認してCloud9環境を作成します。

これだけでCloud9の環境構築は終了です。

Cloud9のAMTCを無効にする

Cloud9はデフォルトでAMTCが有効になっています。 有効になっていると、うまくIAM Roleの権限でAWS CLIが実行できません。無効にします。

構築できたCloud9のトップ画面から、左上のAWS Cloud9を選びます。

AWS SETTINGSAWS managed temporary credentialsの項目があるのでクリックして無効にします。

Cloud9のEC2にIAM Roleをアタッチする

Cloud9の環境からAWSのサービスを呼び出す方法として、EC2にIAM Roleをアタッチする方法があります。

Cloud9の実体はEC2です。Cloud9の環境を構築すると、同リージョンにEC2インスタンスが増えているのがわかります。

このEC2にIAM Roleをアタッチしたいので、そのためのIAM Roleを作成します。

IAMのコンソールの画面から、ロールの作成をします。

EC2で利用するIAM Roleですので、EC2を選択します。

今回はAdministratorのポリシーでIAM Roleを作ります。必要に応じて必要な権限をもつポリシーをつけてください。

タグは不要なのでそのまま次のステップへ進みます。

適当なロール名をつけて、ロールの作成をします。今回は cloud9-sample-role という名前にしています。

IAM Roleが作成できたら、EC2のコンソール画面からIAM Roleをアタッチします。

さきほど作成したIAM Roleを選択して、適用します。

これで、Cloud9のEC2にIAM Roleがアタッチできました。

Cloud9でAWS CLIを使用する

Cloud9のEC2にIAM Roleをアタッチしたことによって、Cloud9が一時的なクレデンシャルキーを自動的に取得します。 実際に aws configure list コマンドで状態を見てみるとわかりやすいです。

このままではリージョンが指定されていないので、リージョンを指定します。環境変数に、 AWS_DFAULT_REGION を設定するのが簡単です。

何度もCloud9を利用する場合は、毎回環境変数を設定するのがめんどくさいので、次のコマンドを実行して設定ファイルに記録しておくと便利です。

$ echo '[default]' >> ~/.aws/config
$ echo 'region = us-west-2' >> ~/.aws/config

これでIAM Roleの権限でAWS CLIの実行ができます。AMTCでは実行できないような、 aws iam create-user といったIAM系のコマンドも実行できます。

ちなみに、AMTCの権限で aws iam create-user を実行すると次のようなエラーが出ます。

終わりに

Cloud9からIAM Roleの権限でAWS CLIを実行する方法を紹介いたしました。

re:Invent等で公開されているAWSのワークショップで、Cloud9上でAWS CLIを使ってIAMを構築するようなものもあったりするので、そういったワークショップを実施する時に役立ちます。