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 SETTINGSにAWS 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を構築するようなものもあったりするので、そういったワークショップを実施する時に役立ちます。