この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
boto3 で楽しむ AWS PythonLife 一人AdventCalendarです。
boto3のドキュメントを通して、サービス別にどういった事が出来るのかを理解したり、管理コンソールを通さずにTerminalだけで完結できるように検証していくことが目的になります。
6日目はIAMを使ってユーザの作成及びAccessKeyId等の情報生成をしてみました。
目次
boto3を通してIAMで出来ること
ドキュメントは下記リンク先です。
ざっくりと以下のことができます。
- ユーザの操作(作成・削除)
- アクセスキーの操作(作成・削除)
- ロールの操作(作成・削除・付与)
他にも多数の操作が出来ますが、一覧化がし難いため興味のある方は上記リンクから辿ってみてください。
今回の操作
指定した名前でユーザを作成し、 AccessKeyIdとSecretAccessKeyを合わせて取得してみます。
- ユーザの作成
- AccessKeyIdとSecretAccessKeyの取得
% python main.py --user_name test
Input Profile name [default]>> advent_calendar
test:
AccessKey:XXXXXXXXXXXXXXXXXXXX
SecretAccessKey:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
main.py
import boto3
import os
import re
import argparse
class IAMAccessStatusWizard:
_client_name = 'iam'
_session = None
def __init__(self, profile_name):
elf._session = boto3.Session(profile_name=profile_name)
@property
def session(self):
return self._session
def get_client(self, client_name=None):
if not client_name:
client_name = self._client_name
return self.session.client(client_name)
@property
def client_name(self):
return self._client_name
def create_user(self, user_name):
params = {
'UserName': user_name,
}
return self.get_client().create_user(**params)
def create_access_status(self, user_name):
params = {
'UserName': user_name
}
return self.get_client().create_access_key(**params)
@classmethod
def prompt_user_name(cls):
user_name = None
while True:
user_name = input('\nInput user name >>')
if user_name and len(user_name) != 0:
break
return user_name
@staticmethod
def prompt(user_name):
default_profile_name = 'default'
profile_name = input('Input Profile name [{}]>> '.format(default_profile_name))
if len(profile_name) == 0:
profile_name = default_profile_name
wizard = IAMAccessStatusWizard(profile_name)
if (not user_name) or len(user_name) == 0:
user_name = wizard.prompt_user_name()
user = wizard.create_user(user_name)
access_status = wizard.create_access_status(user['User']['UserName'])
print_template = '{UserName}:\n AccessKey:{AccessKeyId}\n SecretAccessKey:{SecretAccessKey}'
print_params = access_status['AccessKey']
print(print_template.format(**print_params))
if __name__ == '__main__':
parser = argparse.ArgumentParser()
parser.add_argument('--user_name')
args = parser.parse_args()
IAMAccessStatusWizard.prompt(args.user_name)
UserNameとAccessKeyId
各種発行及び更新操作で必要になることが多いパラメータでした。
MFA
二段階認証に関して、以下の操作を行うための呼び出し手段があります。
- MFAデバイスの有効化
- MFAデバイスの同期
いずれもTeminalでの実行で完結させる場合は、1Password CLI等が別途必要になります。
まとめ
開発用のユーザ及びAccessKeyIDをまとめて発行する場合には有効な手段になると思われます。
IAMの操作で出力される情報には秘匿性を高く求められるものもあるため、取扱には十分注意しましょう。