APC 技術ブログ

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

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

AWS Lambda で IAM ユーザーを作ってみる

はじめに

こんにちは、 クラウド事業部の飯島です。AWS Lambda はサーバレスでコードを実行できます。コードを実行することで各種 AWS サービスを操作できます。複数の AWS サービスを Lambda 経由で連携でき、実現可能なシステム仕様・機能の幅をグッと広げてくれます。そんな Lambda を使って IAM ユーザーを作ってみます。

関数の作成

まずは関数を作成します。

  1. AWS マネジメントコンソールにサインイン
  2. 画面上部の検索フォームに Lambda と入力し、検索結果から Lambda のリンクをクリック
  3. [ 関数の作成 ] ボタンをクリック
  4. [ 基本的な情報 ] を入力
    • 関数名・・・関数の目的が分かるような名前を入力します。
    • ランタイム・・・この記事では Python を指定します。
    • その他はデフォルトのままにしておきます。
  5. [ 関数の作成 ] ボタンをクリック
  6. 関数が正常に作成されたことを確認

コードの編集

上記で作成した関数のコードを編集していきます。

Boto3 ライブラリのインポート

Python で AWS サービスを操作する場合は Boto3 ライブラリを使います。IAM の操作については以下に記載されています。 https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/iam.html

上記ドキュメントに従って Boto3 をインポートし、変数 client にメソッドを格納します。

import boto3

client = boto3.client('iam')

IAM ユーザーの作成

IAM ユーザーを作成するためのコードを追記していきます。この記事では省略可能なパラメータは省略します。

① IAM ユーザーの名前を変数に格納する

IAM ユーザーの名前はコードの中で複数回指定することになるので変数に格納しておきます。

    # ユーザー名を変数に格納
    user_name = 'techblog_APC_Tmp_User'

② IAM ユーザーを作成する

    # ユーザーを作成
    response = client.create_user(
        UserName = user_name
    )

③ 作成した IAM ユーザーにパスワードを設定する

    # パスワードを設定
    response = client.create_login_profile(
        UserName = user_name,
        Password = 'techblog_APC_20230317'
    )

※パスワードポリシーには注意が必要です。デフォルトでは以下の通りのポリシーかと思います。

パスワードの最小文字数
8 文字

パスワードの強度
・少なくとも 1 つのアルファベットの小文字 (a~z) が必要です
・少なくとも 1 つの数字が必要です
・少なくとも 1 つの英数字以外の文字が必要です ( ! @ # $ % ^ & * ( ) _ + - = [ ] {} | ' )

編集後のコードは以下の通りになります。

import json
import boto3

client = boto3.client('iam')

def lambda_handler(event, context):
    # ユーザー名を変数に格納
    user_name = 'techblog_APC_Tmp_User'
    
    # ユーザーを作成
    response = client.create_user(
        UserName = user_name
    )
    
    # パスワードを設定
    response = client.create_login_profile(
        UserName = user_name,
        Password = 'techblog_APC_20230317'
    )
    
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

④ 編集したコードを保存する

コードソースの画面から File > Save をクリックするか、「Ctrl キー + s キー」を使用して保存します。

⑤ 編集したコードをデプロイする

コードソースの画面で [ Deploy ] ボタンをクリックします。

実行ロールの変更

Lambda から IAM を操作するための権限を設定します。 [ 設定 ] > [ アクセス権限 ] > [ 実行ロール ] からロール名のリンクをクリックします。

IAM の画面が表示されるので [ 許可を追加 ] ボタンをクリックして [ ポリシーをアタッチ ] をクリックします。

検索フォームで IAM ユーザーの追加に必要なポリシーを検索し、チェックボックスにチェックを入れて [ 許可を追加 ] ボタンをクリックします。 この記事では IAMFullAccess のポリシーをアタッチします。

ポリシーがアタッチされたことを確認します。

コードを実行

Lambda に戻り、コードソースの画面から [ Test ] ボタンをクリックします。

初回のテスト実行時はテストイベントを設定する画面が表示されるので、イベント名を入力して画面右下の [ 保存 ] ボタンをクリックします。

再度 [ Test ] ボタンをクリックしてコードを実行します。

"statusCode": 200 が表示されていれば成功です。

IAM の方でもユーザーが作成されていることが確認できます。

上記で作成した IAM ユーザーには権限が設定されていません。 AWS マネジメントコンソールへのサインインしかできないので実際に使用する場合にはもう少し対応が必要です。

後片付け

作成した IAM ユーザーを削除しておきます。

【注意事項】
必要な IAM ユーザーを誤って削除しないように十分にご注意ください。
IAM ユーザーの作り方によっては上記コードでは削除できずにエラーが返ってきます。
その場合、エラーの内容を確認しながらコードを修正していくことになります。

コードは以下の通りです。

import json
import boto3

client = boto3.client('iam')

def lambda_handler(event, context):
    # ユーザー名を変数に格納
    user_name = 'techblog_APC_Tmp_User'
    
    # ユーザープロファイルを削除
    response = client.delete_login_profile(
        UserName = user_name
    )
    
    # ユーザーを削除
    response = client.delete_user(
        UserName = user_name
    )
    
    # TODO implement
    return {
        'statusCode': 200,
        'body': json.dumps('Hello from Lambda!')
    }

おわりに

Lambda を使って IAM ユーザーを作ってみました。上記コードを単品で使う場面は無いと思いますが、API Gateway 等と組み合わせることで有効活用できる場面もあろうかと思います。何かのお役に立てれば幸いです。

私達クラウド事業部はAWSなどのクラウド技術を活用したSI/SESのご支援をしております。

https://www.ap-com.co.jp/service/utilize-aws/

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

www.ap-com.co.jp

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