はじめに
こんにちは、クラウド事業部の飯島です。先日書いた AWS Lambda で IAM ユーザーを作ってみる の続編です。IAM ユーザーのパスワードポリシーに沿ったランダムなパスワードを生成してみます。
IAM ユーザーのデフォルトのパスワードポリシー
以下が IAM ユーザーの デフォルトのパスワードポリシー です。
- パスワードの文字数制限: 8~128 文字
- 大文字、小文字、数字、英数字以外の文字 (! @ # $ % ^ & * ( ) _ + - = [ ] { } | ') のうち、最低 3 つの文字タイプの組み合わせ
- AWS アカウント 名または E メールアドレスと同じでないこと
- 有効期限のないパスワード
今回は上記の 3 点目と 4 点目のポリシーは考慮せずにランダムな文字列を生成するだけにします。小文字、数字、英数字以外の文字列を組み合わせて 8 文字のパスワードを生成します。
コードの編集
早速コードを書いていきます。
ライブラリのインポート
今回のパスワード生成に必要なライブラリをインポートします。
import random # ランダムな文字列を生成するために使用 import string # 大文字、小文字、数字などを指定するために使用
ランダムな文字列を生成
小文字、数字、英数字以外の文字列を組み合わせて 8 文字のパスワードを生成します。以下の順序で処理させます。
① 小文字をランダムに 3 つ選択して配列に追加
lowercase = ''.join(random.choices(string.ascii_lowercase, k=3))
② 数字をランダムに 3 つ選択して配列に追加
digits = ''.join(random.choices(string.digits, k=3))
③ 記号をランダムに 2 つ選択して配列に追加
symbols = ''.join(random.sample("!@#$%^&*()_+-=[]{}|'", k=2))
④ 上記 1 ~ 3 の配列を結合して、文字列をランダムな順序に並び替える
password_list = list(lowercase + digits + symbols) random.shuffle(password_list) password = ''.join(password_list)
⑤ パスワードを出力
return { 'statusCode': 200, 'body': json.dumps(password) }
上記コードを追記していくと以下のようになります。
import json import random import string def lambda_handler(event, context): # 小文字をランダムに 3 つ選択して配列に追加 lowercase = ''.join(random.choices(string.ascii_lowercase, k=3)) # 数字をランダムに 3 つ選択して配列に追加 digits = ''.join(random.choices(string.digits, k=3)) # 記号をランダムに 2 つ選択して配列に追加 symbols = ''.join(random.sample("!@#$%^&*()_+-=[]{}|'", k=2)) # 上記配列を結合して、文字列をランダムな順序に並び替える password_list = list(lowercase + digits + symbols) random.shuffle(password_list) password = ''.join(password_list) return { 'statusCode': 200, 'body': json.dumps(password) }
コード実行
上記コードを実行すると以下のように生成されたパスワードが出力されます。コードを実行する度にパスワードは変わります。
おわりに
Lambda を使って IAM ユーザーのパスワードを生成してみました。何かのお役に立てれば幸いです。
私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。
https://www.ap-com.co.jp/service/utilize-aws/
また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。