0
0

【AWS】CLIでスイッチロールする際MFA認証を強制する方法

Last updated at Posted at 2024-04-30

前置き

コンソールからログインする際、MFA認証をするよう設定しているのですが、
CLIからアクセスする際、コンソールに合わせてMFA認証を強制した場合、
スイッチロールする時のコマンド分からなかったので調べてみました。

前提条件

・IAMの多要素認証(MFA)でデバイスの割り当てが完了していること
image.png
・AWS CLIがローカルPCにインストール済みであること
(以下のコマンドで確認。バージョンが表示されればインストール済み。)

aws --version

設定方法

まずはスイッチロールの設定から。スイッチロール先(アカウントBとする)のIAMで
ロールを作成してアタッチします。許可ポリシーは任意で設定してください。
image.png
信頼関係タブをクリックし、信頼ポリシーを以下のように編集します。
image.png
スイッチロール元(アカウントAとする)のIAMでポリシーを作成してアタッチします。
image.png
~/.aws/configを以下のように編集します。

[profile アカウントA]
region = ap-northeast-1
output = json

[profile アカウントB]
source_profile = アカウントA
role_arn = arn:aws:iam::【アカウントBのアカウントID】:role/【作成したロール名】
mfa_serial = arn:aws:iam::【アカウントAのアカウントID】:mfa/【MFA認証デバイス名】
region = ap-northeast-1
output = json

~/.aws/credentialsを以下のように編集します。

[アカウントA]
aws_access_key_id = 【アクセスキー】
aws_secret_access_key = 【シークレットアクセスキー】

これでスイッチロールをするための権限の付与と、MFA認証の強制が設定できました。
次にCLIでアクセスしてみます。

コマンド

MFA認証をパスし、一時認証情報を取得します。

aws sts assume-role --role-arn arn:aws:iam::【アカウントBのアカウントID】:role/【アカウントBで作成したロール】 --role-session-name 【任意のセッション名】 --profile 【アカウントAのProfile名】 --serial-number arn:aws:iam::【アカウントAのアカウントID】:mfa/【アカウントAのMFAデバイス名】--token-code 【6桁のMFA認証コード】

※アカウントA = スイッチロール元のアカウント
※アカウントB = スイッチロール先のアカウント

出力結果

{
    "Credentials": {
        "AccessKeyId": "XXXXXXXX",
        "SecretAccessKey": "XXXXXXXX",
        "SessionToken": "XXXXXXXX",
        "Expiration": "XXXX-XX-XXTXX:XX:XXZ"
    },
    "AssumedRoleUser": {
        "AssumedRoleId": "XXXXXXXX:スイッチロール先のプロファイル名",
        "Arn": "arn:aws:sts::アカウントBのアカウントID:assumed-role/アカウントBで作成したロール/XXXXXXXX"
    }
}

環境変数に出力された情報を設定します。

export AWS_PROFILE=【スイッチロール先のプロファイル名】
export AWS_ACCESS_KEY_ID=【出力されたAccessKeyId】
export AWS_SECRET_ACCESS_KEY=【出力されたSecretAccessKey】
export AWS_SESSION_TOKEN=【出力されたSessionToken】

以下のコマンドでスイッチロールできたか確認します。
(Accountがスイッチロール先のアカウントIDになっており、
アカウントBのS3バケットが表示されればOK)

aws sts get-caller-identity
aws s3 ls --profile 【アカウントBのProfile名】

踏み台アカウント(アカウントA)を操作する場合

以下のコマンドで一時トークン発行し、アクセスできます。

aws sts get-session-token --serial-number arn:aws:iam::【アカウントAのアカウントID】:mfa/【MFA認証デバイス名】 --token-code 【6桁のMFA認証コード】 --profile 【アカウントAのProfile名】
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0