はじめに
terraformからrole作成時に下記のエラーが出たので調査してみました。
creating IAM Role (): InvalidClientTokenId: The security token included in the request is invalid
実行環境
- cloud9
- terraform
結論
CLIクレデンシャルが設定できていませんでした。
。。。。がオチだと思っていたのですが、
実際のところ、
『Cloud9 インスタンスプロファイルをデフォルトから他のIAMロールに変更』が必要だったみたいです。
でもせっかく調査したので、CLIクレデンシャルのアレコレまとめ
-
マネコンからログインしているIAMユーザのアクセスキーID&シークレットアクセスキーの取得
-
cloud9のターミナル上で設定
$ aws configure
AWS Access Key ID [None]: {アクセスキーID}
AWS Secret Access Key [None]: {シークレットアクセスキー}
Default region name [None]: ap-northeast-1
Default output format [None]: json
- defaultの認証情報プロファイルの確認
$ cat credentials
[default]
aws_access_key_id = {アクセスキーID}
aws_secret_access_key = {シークレットアクセスキー}
➡接続できない場合は、credentialsにaws_session_token=XXXXXXXXXを追記する
- ~/.aws/configに認証情報のプロファイルを設定
[profile sample]
region=ap-northeast-1
mfa_serial={MFAが有効になっている個人アカウントのiamロール}
role_arn={スイッチしたい別アカウントのiamロール}
source_profile=default
解決策
-
cloud9のインスタンスプロファイルの確認
デフォルトのインスタンスプロファイル(AWSCloud9SSMInstanceProfile)が割り当てられている。
➡デフォルトのIAMロールだと権限が足りないためIAM権限の設定ができない -
Cloud9からAWS managed temporary credentialsのスイッチを「OFF」
-
IAMロールを作成
EC2タイプの『AdministratorAccess』を選択 -
EC2インスタンス(Cloud9)のIAMロールを2で作ったものに変更
-
ロールの変更を反映させるためにEC2インスタンスを再起動
(追記)
あるいは、既存のIAMロールに以下のポリシーを追加してもよさそうです。
- PowerUserAccess
- IAMFullAccess
強い権限を与えているため、セキュリティ的にはアレですが、ひとまずこれが動くようになりました。適切な権限付与等は今後引き続き勉強してみようと思います。
参考
https://dev.classmethod.jp/articles/aws-cli_initial_setting/
https://qiita.com/mokkos/items/7de9793ea37528e11e3e
https://go-journey.club/archives/17029