マネジメントコンソールでスイッチロールができることは、皆さまご存知と思います。 IAM Userにsts:AssumeRoleの権限を与えることで、IAM Roleの権限を引き受けることができます。
AWS CLIでも、もちろん同じことができます。
1. credentialsファイルの編集
ファイル「~/.aws/credentials」が無ければ作成し、以下のように記述(追記)する。
[default] aws_access_key_id = AKIAXXXXXXXXXXXXXXXX aws_secret_access_key = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
※自分のIAM Userのクレデンシャルを記載
2. configファイルの編集
ファイル「~/.aws/config」が無ければ作成し、以下のように記述(追記)する。
[profile tempsession] role_arn = <引き受けるIAMロールのARNを記載> source_profile = default
※tempsessionはプロファイル名であり任意
※source_profile = 以降の内容は、元となるプロファイル名(「~/.aws/credentials」に記述されているもの)なのでdefault以外を指定も可
3. CLI実行
AssumeRoleしてAWS CLIを実行したいときは以下のように--profileオプションをつけて実行する。
aws s3 ls s3://bucketname --profile tempsession #もしくは aws --profile tempsession s3 ls s3://bucketname
あるいは環境変数AWS_DEFAULT_PROFILEを設定すれば、毎回--profileオプションを設定しなくてもよい
export AWS_DEFAULT_PROFILE=tempsession aws s3 ls s3://bucketname
4. Role側でMFAを必須としている場合
AssumeRole 先 IAM Role の信頼関係ポリシーで、Condition句を下記のように設定することで MFA を使っている場合だけ AssumeRole を許可するように設定できます。
IAM Roleがこのように設定してある場合には AWS CLI での AssumeRole 時にも MFA を用いる必要があります。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:root" }, "Action": "sts:AssumeRole", "Condition": { "Bool": { "aws:MultiFactorAuthPresent": "true" } } } ] }
こういった信頼関係ポリシーが設定された IAM Role はマネジメントコンソールで下記のように表示されます。
このような IAM Role を AssumeRole するには ファイル「~/.aws/config」の profile ブロックに下記のように mfa_serial という設定値を追記します。
[profile tempsession] role_arn = <引き受けるIAMロールのARNを記載> source_profile = default mfa_serial = <MFAデバイスのARNを記載>
MFA デバイスの ARN は IAM マネジメントコンソールの以下の画面で確認できます。
(IAM Userの所属するAWSアカウントにて自分の IAM User を選択し「認証情報」タブ)
profile に mfa_serial 値を設定しておけば AWS CLI の実行時に MFA のワンタイムトークン(OTP)を聞かれます。 一度 OTP を入力して認証してしまえば、IAM Role に設定してある最大セッション時間の間は、再度 OTP を聞かれることはありません。
杉村 勇馬 (記事一覧)
サーバーワークス → 株式会社G-gen 執行役員CTO
2021 Japan APN Ambassadors / 2021 APN All AWS Certifications Engineers
マルチAWSアカウント管理運用やネットワーク関係のAWSサービスに関するブログ記事を過去に執筆。
2021年09月から株式会社G-genに出向、Google Cloud(GCP)が専門に。G-genでもGoogle Cloud (GCP) の技術ブログを執筆中。