アルパカログ

Webエンジニア兼マネージャーがプログラミングやマネジメント、読んだ本のまとめを中心に書いてます。

Python MFAアカウントでAWS SDK(Boto3)を使う方法(STS)

f:id:otoyo0122:20200814125628p:plain:w300

AWSアカウントにはMFA(多要素認証)を設定している場合が多いと思います。

そのため、MFAを設定したアカウントでAWS SDK for Python (Boto3)を使うには、先に認証情報を取得する必要があります。

このエントリでは、MFAアカウントでAWS SDK(Boto3)を使う方法を説明します。

MFAアカウントでBoto3を使う方法

まず、MFAを設定していない場合の例です。

例えばAWS SageMakerのクライアントは次のようにして取得します。

import boto3

client = boto3.client('sagemaker-runtime')

しかし、この方法だとMFAを設定しているアカウントでエラーになってしまいます。

MFAを設定しているアカウントでは次のようにします。

まずSTSクライアントを使って認証情報を取得し、認証情報を使って開始したセッションに対して任意のクライアントを取得します。

import boto3
from boto3.session import Session

sts_client = boto3.client('sts')

sts_res = sts_client.get_session_token(
    DurationSeconds=3600,
    SerialNumber='MFA_DEVICE_ARN',
    TokenCode='111111')

cred = sts_res['Credentials']

session = Session(
    aws_access_key_id=cred['AccessKeyId'],
    aws_secret_access_key=cred['SecretAccessKey'],
    aws_session_token=cred['SessionToken'],
    region_name='ap-northeast-1')

client = session.client('sagemaker-runtime')

MFA_DEVICE_ARNは、MFAデバイスのARNで、arn:aws:iam::123456789:mfa/usernameのような文字列です。

AWSマネジメントコンソールを開き、IAMのMFA設定ページで確認できます。

TokenCodeはMFAのワンタイムトークンです。

以上です。

参考になった方は、ぜひ「はてブ」やSNSでシェアしていただけると嬉しいです。