IAMユーザーのマネジメントコンソールログインパスワードを変更してDynamoDBに記録するLambda(Python)
2020/01/19
目次
やりたいこと
IAMユーザーのマネジメントコンソールへのサインインパスワードを動的に変更したくて、上記のアーキテクチャにしました。
Lambda(Python3.8)で実行しています。
- SecretsManagerでランダムパスワードを生成します。
- IAMユーザーのログインプロファイルをアップデートします。
- 結果をDynamoDBに書きこみます。
AWS複数アカウントのリソースをLambda(Python)から一括操作したくてのLambda関数に追加して呼び出してます。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
def iam_user_password(session, user_name): try: sm = session.client('secretsmanager') password = sm.get_random_password( PasswordLength=16, ExcludeCharacters='lI0O1', ExcludeNumbers=False, ExcludePunctuation=False, ExcludeUppercase=False, ExcludeLowercase=False, IncludeSpace=False, RequireEachIncludedType=True ) iam = session.resource('iam') login_profile = iam.LoginProfile(user_name) response = login_profile.update( Password=password['RandomPassword'], PasswordResetRequired=False ) logger.info(response) return password['RandomPassword'] except: logger.error(traceback.format_exc()) raise Exception(traceback.format_exc()) def password_putitem(account_id, user_name, password, table_name): try: dynamodb = boto3.resource('dynamodb') table = dynamodb.Table(table_name) table.put_item( Item={ 'account_id': account_id, 'iam_user': user_name, 'password': password } ) except: logger.error(traceback.format_exc()) raise Exception(traceback.format_exc()) |
SecretsManagerでのランダムパスワードの生成
|
1 2 3 4 5 6 7 8 9 10 11 12 |
sm = session.client('secretsmanager') password = sm.get_random_password( PasswordLength=16, ExcludeCharacters='lI0O1', ExcludeNumbers=False, ExcludePunctuation=False, ExcludeUppercase=False, ExcludeLowercase=False, IncludeSpace=False, RequireEachIncludedType=True ) |
boto3 SecretsManagerのクライアントAPIで、get_random_passwordを使ってパスワードを生成しています。
- PasswordLength パスワードの長さ。
- ExcludeCharacters 除外する文字。見分けがつきにくい文字を除外しました。
- ExcludeNumbers 数字を除外するか。含めるのでFalseにしてます。
- ExcludePunctuation 記号を除外するか。含めるのでFalseにしてます。
- ExcludeUppercase 大文字を除外するか。含めるのでFalseにしてます。
- ExcludeLowercase 小文字を除外するか。含めるのでFalseにしてます。
- IncludeSpace スペースを含めるか。含めないのでFalseにしてます。
- RequireEachIncludedType すべての文字種を1つ以上含めるか。含めるのでTrueにしてます。
IAMユーザーのログインプロファイルをアップデート
|
1 2 3 4 5 6 7 8 9 |
iam = session.resource('iam') login_profile = iam.LoginProfile(user_name) response = login_profile.update( Password=password['RandomPassword'], PasswordResetRequired=False ) logger.info(response) return password['RandomPassword'] |
IAMのリソースAPIで指定したユーザーのログインプロファイルが操作できました。
updateにパスワードを含めます。
ログイン時にユーザーへのパスワード変更は、今回の要件では必要ないので、PasswordResetRequired=False としてます。
結果をDynamoDBへの書き込み
|
1 2 3 4 5 6 7 8 9 10 |
dynamodb = boto3.resource('dynamodb') table = dynamodb.Table(table_name) table.put_item( Item={ 'account_id': account_id, 'iam_user': user_name, 'password': password } ) |
今回は1アイテムしか扱いませんので、batch_writerは使わずに、put_itemで書き込んでます。
DynamoDBのパーティションキーはaccount_id、ソートキーは iam_userで、課金方式はたまに書き込むだけなので オンデマンド方式です。
できました!
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
Systems Manager デフォルトのホスト管理設定(Default Host Management Configuration)を確認しました
2023/2/17のアップデートAWS Systems Manager をアカウ …
-
-
Amazon Quantum Ledger Database(QLDB)でサンプル台帳の作成と検証
Quantum Ledger Database(QLDB)を触ったことなかったの …
-
-
「JAWS-UG朝会 #18」で主にAWSなブログについて発表をしました
ラジオ体操 いつものラジオ体操から。 今日はラーニングセンターから配信の日でした …
-
-
AWS 認定クラウドプラクティショナーのサンプル問題
AWS認定クラウドプラクティショナのサンプル問題2018年9月25日現在で、英語 …
-
-
RDSインスタンス作成時にEC2に接続設定するオプション
EC2 インスタンスと RDS データベース を自動的に接続するの動作を確認した …
-
-
AWS Organizations組織の移動
AWS Organizations組織の移動 やりたいことは、Organizat …
-
-
AWS LambdaでS3 Select
RDSスナップショットをS3にエクスポートした、Parquetフォーマットのデー …
-
-
JAWS-UG Osaka 第14回勉強会 「DIY」 〜自社内システムを作る側からの物申す〜に参加、運営、登壇しました
先日、JAWS-UG Osaka 第14回勉強会 「DIY」 〜自社内システムを …
-
-
EC2とRDSのMySQLを他のAWSアカウントへ移設する
他のAWSアカウントへシステムごと移設した場合の手順です。 構成はEC2とRDS …
-
-
Amazon Location Service入門ワークショップの前提環境準備
Amazon Location Service入門ワークショップの前提環境を構築 …


