✨
AWS CLIでMFA認証を行ってコマンドを実行できるようにする
AWS CLIコマンドでリソースを操作しようとしたらエラー
該当のサービスに対してポリシーをアタッチして権限を付与しAWS CLI
でコマンドを実行すると、以下のようなエラーが発生しました。
An error occurred (AccessDenied) when calling the xxxx operation: User: arn:aws:iam::1111:user/xxxx is not authorized to perform: xxxx:xxxx on resource: arn:aws:xxxx:::xxxx/xxxx with an explicit deny in an identity-based policy
権限は付与しているのになんでだろうと調べていて時間を溶かしつつあったので、チームの人に相談しました。
すると、MFA(多要素認証、二段階認証)をしていないんじゃない?と指摘をもらって原因に気づけました。
MFAの設定をしていると、AWS CLI
でもMFA認証をしないといけません。
認証方法
認証するには、MFAのトークンを取得するコマンド叩きます。arn
はIAMユーザーページの「MFAデバイスの割り当て」の値を入れます。
$ aws sts get-session-token --serial-number [arn] --token-code 123456
{
"Credentials": {
"AccessKeyId": "ASIAWLAVRUB24SJWQDVA",
"SecretAccessKey": "DamTJRajFVQj0S87eW8ReUL03p4Ay0POorao5JcT",
"SessionToken": "IQoJb3JpZ2luX2VjEDgaDmFwLW5vcnRoZWFzdC0xIkYwRAIga/t6wYLaijV5PN7dN42tA1GejtAJst02NDFVFb6pr44CIF5po14ZMktnMcvdVmP2v5oWXQmJUZbyxtffkORD4ClQKu8BCBEQAhoMNDM1OTg0Mzc1OTI1IgyzAQneWrulkRhSIGUqzAHYYI2IuaLLcuo+65kGAdqIyJbq5g3sjnVhiVcG5tA0KvsgZ/DCkh5Nt0C/49uLseqAkEvAX0pPJ1Ql5xuU5dF6hpr7up+oYMY/QtdwZu+N1lRVN3LmizrGDozHSd2HWUvH4qJLL54/AiMMUZv7S+sPOKLdSTy0bbDKYHaYRJqFVXA0ijvmZXLi0HBAKgzaO62mRDnbSOVK55BFPP1eXSTUF9UZhBTm/0gFRyjqWHOMy0/uieffF70vM4enAIN6l7nyMjqJ7J1t4cYXISMwz77okwY6mQHRaxD5IaDkorZorGaKrycenZq3t0YPtH5XiU/oP/c+qOByRSjjno1j03/WWRCLqUztiSkfPURCl/tm5yKEaFToRXqVqbG0vtQxUbGlzoX0OJQgH+vv8BXqd86DHJ0r+7zzVczO4T/0nb8A7CKXJ6gCUuNpwaA31zD55UaKTn5X+VxnNv8SvVfS94cdoYnSnMsyJMUMh2+PIYU=",
"Expiration": "2022-05-10T20:16:15+00:00"
}
}
そうするとCredentials
の情報が帰ってくるので、export
するとAWS CLI
でサービスの操作ができます。
$ export AWS_ACCESS_KEY_ID=xxxxxxxxxxxx
$ export AWS_SECRET_ACCESS_KEY=xxxxxxxxxxxxxxx
$ export AWS_SESSION_TOKEN=xxxxxxxxxxxxxxx
頻繁にコマンド実行してexport
するようなら、シェルスクリプトでトークンコード入れたらexport
までする処理を書いて面倒さの軽減もできそうですね。
Discussion