APC 技術ブログ

株式会社エーピーコミュニケーションズの技術ブログです。

株式会社 エーピーコミュニケーションズの技術ブログです。

AWS Lambda で IAM ユーザーのパスワードを生成してみる

はじめに

こんにちは、クラウド事業部の飯島です。先日書いた 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/

また、一緒に働いていただける仲間も募集中です!
今年もまだまだ組織規模拡大中なので、ご興味持っていただけましたらぜひお声がけください。

www.ap-com.co.jp

本記事の投稿者: 飯島
AWSをメインにインフラ系のご支援を担当しています。