概要
MFAを有効にしているユーザーを使い、CLIを使う方法について説明します。
かなり苦戦したので、記載します。
状況
AdministratorAccessとMFAを認証をクリアした場合のみ各種操作が可能なポリシーを付与したユーザーを利用して、通常通りCLIを使おうとすると、下記エラーになります。
An error occurred (AccessDenied) when calling the ListBuckets operation: User: arn:aws:iam::[アカウント番号]:user/[利用しているユーザー名] is not authorized to perform: s3:ListAllMyBuckets with an explicit deny in an identity-based policy
エラー文をストレートに取ると、s3:ListAllMyBucketsの実行権限がないと受け取れると思います。この状態で仮に別ポリシーでs3:ListAllMyBucketsを付与した場合でも同様のエラーが発生します。
これを解決するのが、STSを利用し一時的なアクセスキーを発行することになります。
STSについて
STS?なにそれという方もいると思います。
正式名称は「AWS Security Token Service」といいます。
ざっくり説明すると、「一時的な鍵を発行してそれを用いて接続する」という感じです。
実際のコマンド等について
aws sts get-session-token --serial-number [先ほどコピーしたARNを貼り付ける] --token-code [認証に使うワンタイムパスワード] --profile [プロファイル名]
成功すると、AccessKeyId,SecretAccessKey,SessionTokenが表示されます。
再度確認する方法がないので、控えておいてください。
4. キーをプロファイルに記載する
ホームディレクトリ配下に「.aws」というフォルダがあり、その中に「credentials」というファイルが入っています。
こちらに、先ほどのAccessKeyId,SecretAccessKey,SessionTokenを貼り付けて保存します。
5. ターミナルを再起動して、再度コマンドを入力すると閲覧可能になります。
まとめ
今回はプロファイルに対して直接記載する方法について説明しました。
コンソールを閉じると再設定が必要なのですが、下記コマンドでも可能です。
set AWS_ACCESS_KEY_ID=
set AWS_SECRET_ACCESS_KEY=
set AWS_SESSION_TOKEN=
また、通常有効期限が12時間ですので期限が切れたら再度発行する必要があります。
恐らくこれからMFAを推奨していく流れになりそうなので、この知識はあった方が楽できるかと思われます。