はじめに
AWSでDockerファイルを使用してコンテナイメージを実行する場合、ECR (Elastic Container Registry) にアップロードされたイメージを利用します。
この記事では、将来的にこのコンテナイメージをAWS Lambdaで実行し、サーバーレス環境で動かす方法を技術検証する予定です。
今回は、その事前準備として、IAM権限の設定について、自分の知識を整理しながら体系的にまとめました。
書こうと思ったきっかけ
個人的なインフラ開発として、以下のようなLambda関数を活用したサーバーレスアーキテクチャに挑戦してみたいと考えています。
ユーザー
│
├──> CloudFront (フロントエンド静的ファイル配信)
│ └──> S3 (TypeScript ビルド成果物)
│
└──> API Gateway (バックエンドリクエスト受付)
└──> Lambda (Go + Echo で構築)
└──> RDS (データベース: PostgreSQL / MySQL)
Dockerファイルについては、AWSのECRに前回の記事でプッシュしました。
次は、Lambda関数を使用してこのイメージを読み込む方法に取り組みたいと考えています。
👉 前回の記事はこちら
ただし、Lambda関数を使用するには、IAMロールや権限設定が必要です。
そのため、これらの設定について改めて整理し、1本の記事としてまとめていきたいと思います。
今回作成するIAMロールについて
今回は、AWSがあらかじめ用意しているLambda関数用のIAMロールをアタッチし、それに加えてECR専用のカスタムIAMポリシーを設定します。
最終的なIAMロール
これまでは手動で設定することが多かったのですが、今回はAWS CLIを使用して簡単にセットアップを進めます。
※そのため、手動操作とは異なる部分がある点をご承知おきください。
IAM権限の設定
1. Lambda用IAMロールの作成
AWS CLIを使用して、Lambda関数用のIAMロールを作成します。
IAMロールの作成
以下のコマンドを実行し、Lambda関数用IAMロールを作成します。
aws iam create-role \
--role-name lambda-execution-role \
--assume-role-policy-document file://trust-policy.json
trust-policy.json
の内容
以下は、IAMロールに適用する信頼ポリシーの内容です。この設定により、Lambdaがロールを引き受けることが許可されます。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "lambda.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
基本ポリシーのアタッチ
作成したIAMロールに、Lambdaの実行に必要な基本ポリシーをアタッチします。
aws iam attach-role-policy \
--role-name lambda-execution-role \
--policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
2. ECR用IAMポリシーの作成
カスタムIAMポリシーの作成
ECRへのアクセスを許可するカスタムIAMポリシーを作成します。
aws iam create-policy \
--policy-name ECRAccessPolicy \
--policy-document file://ecr-access-policy.json
-
--policy-name: ポリシー名(例:
ECRAccessPolicy
) -
--policy-document: JSONファイルで記述されたポリシーの内容(例:
ecr-access-policy.json
)
ecr-access-policy.json
の内容
以下は、ECRへのアクセスを許可するポリシーの例です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecr:GetAuthorizationToken",
"ecr:BatchCheckLayerAvailability",
"ecr:GetDownloadUrlForLayer",
"ecr:BatchGetImage"
],
"Resource": "*"
}
]
}
このポリシーは、ECRから認証トークンを取得したり、イメージをプルする操作を許可します。
ECRポリシーのアタッチ
作成したカスタムポリシーを、Lambda用IAMロール (lambda-execution-role) にアタッチします。
aws iam attach-role-policy \
--role-name lambda-execution-role \
--policy-arn arn:aws:iam::<ACCOUNT_ID>:policy/ECRAccessPolicy
以下の部分は、自身のAWSアカウントIDに置き換える必要があります。
-
<ACCOUNT_ID>
: あなたのAWSアカウントIDを指定してください。
ここまでの確認
今回はAWS CLIを使用して簡単にセットアップを進めました。
以下のスクリーンショットの通り、IAMロールが想定通り作成されていることが確認できました。
また、ロールの詳細設定についても、冒頭でお見せしたスクリーンショットと一致していることが確認できました。
これにより、作業は無事成功といえます!
まとめ
ここまでお読みいただき、ありがとうございました。
私自身、AWS CLIを使ってIAMの設定を行う機会はそれほど多くなかったため、今回の作業は非常に新鮮な学びとなりました。
次回は、このIAMロールを活用して、コンテナイメージをAWS Lambdaで実行し、サーバーレス環境で動かす方法について解説していきます!
関連記事
今までIAM関連の記事は何分か投稿してきましたので、気になる方も読んでみてください。