Dockerなどで用意した実行環境をAWS Lambdaで利用したい方へ
この記事では、AWS CLIを使ってLambda用実行環境をアップロードするために必要なIAMの設定方法について解説します。
- IAMユーザーとIAMロールの違い
- IAMユーザー作成方法と推奨権限
- AWS Lambdaの利用に必要なIAMロール作成方法と推奨権限
現在私は、SEOライティングに役立つ自動化プログラムをPythonで開発中です。
本記事はそのプログラム作成にあたり、以下の機能実装に必要であった設定手順の1つ「IAMユーザーとロールの作成方法」を紹介します。
- Pythonで書いたスクレイピングコードをAWS Lambdaで実行する
- SeleniumやHeadless ChromeなどのリソースをDockerでパッケージングした実行環境をLambdaで利用する
上記したプログラム開発は以下の記事で解説しています。

この記事を書いている私は、プログラミング未経験から1年間Pythonを独学し、いくつものプログラムを作成してきました。少し前までAWSにもほとんど触れたことがありませんでした。
今の時代、初心者でも独学でプログラム作成に必要な力をつけることができますよ。

この記事では、そんな私が初心者目線でつまづきやすい点や注意点を優しく解説していきます。
Contents
IAMユーザーとIAMロールの違い
まずはIAMの概要を理解して、IAMユーザーとIAMロールを作ってみましょう。
IAMはAWSリソースへのアクセス権限を管理する機能
AWS Identity and Access Management(以下、IAM)は、AWSリソースの認証に関わる設定を制御し、ユーザーや役割ごとに権限を管理することができます。
AWSを始めたばかりの方は、まずIAMについてよく理解しましょう。アクセス権限を管理するIAMは、セキュリティ観点でAWSの最重要項目だからです。
よく理解しないままIAMを利用した場合、あなたのアカウントが乗っ取られたりや不正利用にあうリスクがあります。特に、無料利用枠でAWSを使い始めたばかりの方は要注意です。
IAMユーザーはヒトやサーバーに権限を付与する
IAMユーザーはヒトやAWS以外のサーバーに対して権限を付与します。
そしてAWSを使い始めた方は、最初のIAMユーザーを作成する必要があります。
先ほど「よく知らないままIAMを使うな」とお伝えしましたが、この記事を読んで概要を理解して、最初のIAMユーザーを作成することを強く推奨します。
なぜなら、AWSのアカウント作成時に発行されたルートアカウントは全てのAWSリソースへのアクセス権限を持っており、漏洩した場合のリスクが大きいからです。
なので、ルートアカウントは通常利用しないことがベストプラクティスとされます。最初に作成したIAMユーザーでAWSコンソールへログインするようにしましょう。
また、IAMユーザー作成時に発行されるアクセスキーは絶対に人に教えないでください。
IAMロールはEC2やLambdaなどAWSリソースに権限を付与する
IAMロールはEC2やLambdaといったAWSリソースのアクセス権限を管理します。
AWSは何かしらの機能に操作を任せることがあります。その場合に、機能に対して権限を設定しておくことでAWSリソースに対して不意の変更が加えられないようにします。
例えば以下のようにアクセス権限を設定します。
- 機能:AWS Lambda
- AWSリソース:S3バケット
- ロール:読み取り権限
IAMロールはIAMユーザーと違って「アクセスキーの管理が不要」という点は大きなメリットです。漏洩リスクがゼロになりますからね。
最終的に、IAMロールの権限を実行する主体は「ヒトではなく機能」と覚えておけばOKです。
最初のIAMユーザー作成方法と推奨権限
それでは最初のIAMユーザーを作成してみましょう。
最初のIAMユーザーの作成手順
最初のIAMユーザーは、幅広い権限を付与しておいて良いです。
AWSコンソールから色々な機能をいじれた方が良いですし、再設定は面倒ですからね。ただし再度警告ですが、アクセスキーは絶対に漏らさないでください。
設定手順に移ります。AWSコンソールにログインして、サービスから[IAM]を選択してください。左ペインから[ユーザー]を選択して、[ユーザーの作成]を選択します。

- [ユーザー名]:任意の名前を入力
- [プログラムによるアクセス]:AWS CLIからアクセスするために利用するのでチェックを入れる
- [AWS マネジメントコンソールへのアクセス]:コンソールにログインして通常利用するのでチェックを入れる
- [コンソールのパスワード]:自動生成(次回サインイン時に変更するので)
- [パスワードのリセットが必要]:次回サインイン時に、自動生成されたパスワードから任意のパスワードに変更します。他人との共有ユーザーならばチェックは必須です。

グループを作成します。アクセス許可の設定は、権限設定済みのグループにユーザーを追加して、グループの権限をユーザーの権限とする方式が楽だからです。
[グループの作成]を選択します。

今回は、記事冒頭で紹介したプログラムを構築するのに必要な権限を付与します。
- AWSLambdaFullAccess
- IAMFullAccess
- AmazonS3FullAccess
- AmazonDynamoDBFullAccess
- AmazonAPIGatewayAdministrator
- IAMUserChangePassword
※初回サインイン時にPW変更をするために必ず必要なポリシーです!
作成したグループにチェックが入っていることを確認して次に進みます。[タグの追加(オプション)]は不要なので飛ばしてください。

最後に、設定を確認して完了です。

.csvファイルをダウンロードしておきます。
このファイルにアクセスキーの情報が記載されているので、ローカル環境の他人に見られない場所に保管しておいてください。
初回サインインをします。先ほどダウンロードしたcsvファイルに記載されたアカウント情報でサインインしてください。

パスワードの変更を求められるので任意のパスワードに変更します。
以上で最初のIAMユーザーの作成は完了しました!
AWS CLIのセットアップ手順
先ほど作成したユーザーをAWS CLIで利用できるようにしましょう。
Dockerで作成したパッケージのS3バケットへのアップロードと、Lambda関数の作成をコマンドラインから実行するために必要だからです。
(Macの場合)ローカル環境のターミナルを開きます。AWS CLIをインストールします。
pip install aws-cli
セットアップコマンドを実行します。
aws configure
AWS Access Key ID [None]: <credential.csv内のAccess key IDの値>
AWS Secret Access Key [None]: <credential.csv内のSecret access keyの値>
Default region name [None]: ap-northeast-1
Default output format [None]: json
以上でAWS CLIのセットアップは完了です。
AWS Lambdaの利用に必要なIAMロール作成方法
DockerイメージをAWS Lambdaで利用するには、IAMロールが必要です。
IAMロールの作成手順
IAMのページから[ロール]を選択し、[ロールの作成]をクリックします。
[AWS サービス] から[Lambda]を選択します。

[次のステップ:アクセス権限]をクリックして、IAMロールに与える権限の設定に移ります。
DockerイメージをLambda関数で利用するIAMロールの権限
ここで一旦解説。
Lambda関数をスクレイピング用リソースをパッケージングしたDockerイメージで実行するには、Lambdaの実行権限とS3の読み取り権限を付与しておけば良いです。
それでは、IAMロール作成手順の続きです。
[Attachアクセス権限ポリシー]の検索窓に”Lambda”と入力し、[AWSLambdaExecute]を選択します。

与えられる権限は以下の通りです。
- Provides Put, Get access to S3:S3のリソースを取得できる/S3にリソースを置ける
- Full access to CloudWatch Logs:Cloudwatch Log(AWSリソース全般のログ監視サービス)へのフルアクセス
[アクセス権限の境界の設定]はデフォルトのまま設定不要です。

最後にロール名を入力し、設定内容を確認して[ロールの作成]をクリックします。

IAMロール一覧から作成したロールをクリックしてください。概要ページで[ロールARN]はLambda関数を作成するためのコマンドで引数[-role]に指定する値となります。

aws lambda create-function --region ap-northeast-1 --function-name YOUR_FUNCTION_NAME --runtime python3.6 --role YOUR_IAM_ROLE_ARN --code S3Bucket=YOUR_BUCKET_NAME,S3Key=deploy_package.zip --handler YOUR_PYTHON_FILE.FUNCTION_NAME --memory-size 512 --timeout 300
以上でIAMの設定方法の解説は終了です。
- 最初のIAMユーザーを作成しよう
- IAMユーザーのアクセスキーは絶対に人に教えない
- Lambda関数実行のためのIAMロールを作成しよう
- Dockerイメージを使うならLambdaの実行権限とS3の読み取り権限をIAMロールに与える