MFA必須のスイッチロールアカウントでaws cliを使う

公開日時
更新日時

AWSでセキュリティ強化のためにスイッチロールで権限を切り替えて作業を行うことがある。

この場合、MFAも必須になっていることが多い。

マネージメントコンソールのログインについては↓のChrome拡張をインストールしておくことで手軽にスイッチロールが可能になるが、aws cliでスイッチロールする際のやり方が分からなかったので調べた。

aws cliのcredentialsにproject-a用のprofileがあるとして、

# ~/.aws/credentials
[project-a]
aws_access_key_id = xxxx
aws_secret_access_key = xxxx

productionというロールが存在する場合、以下のようにconfigを設定する。

# ~/.aws/config
[profile project-a-prod]
mfa_serial = arn:aws:iam::{xxxxxxx}:mfa/{iam-user}
role_arn = arn:aws:iam::{xxxxxxx}:role/production
source_profile = project-a

重要

credentials ファイルでは、CLI config ファイルの名前付きプロファイルとは別の命名形式を使用します。config ファイルで名前付きプロファイルを設定する場合のみ、プレフィックス "profile" を含めてください。credentials ファイルにエントリを作成するときは、profile という単語を使用しないでください。

とあるのでconfigに書く場合はプレフィックスprofileが必須になる。

credentialsに直接設定を書いても動いたので、credentialsで一元管理してもいいかも。

credentialsに記述する場合は以下のようにプレフィックスを削る。

# ~/.aws/credentials
[project-a-prod]
mfa_serial = arn:aws:iam::{xxxxxxx}:mfa/{iam-user}
role_arn = arn:aws:iam::{xxxxxxx}:role/production
source_profile = project-a

この状態でaws cliを実行するとMFA認証コードが求められ、正しいコードを入力するとcliコマンドが実行できる。

aws s3 ls --profile project-a-prod
// s3 bucket list

参考


Related #aws

Alexaに気温と二酸化炭素濃度を教えてもらう

「Alexa、気温」でセンサー情報を教えてくれるようになった

CloudWatchのカスタムメトリクスを減らす

あまりチェックしないセンサー値の送信を止めた

AWS SAMで作ったLambdaアプリをCircleCIでデプロイする

circleci/aws-serverlessのOrbを使った

AWS SESの受信メールを暗号化してs3に保存しLambdaで読み込む

jsの場合、複合処理を独自実装する必要がある

Nodejs12のLambdaでawscliを使う

aws-lambda-layer-awscliを使う

s3の署名付きURLが有効期限より前に見れなくなってしまう

IAMロールではなくIAMユーザの権限でURLを生成する必要があった