1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的な備忘録:AWS CLIでECRイメージ取得用のIAMロールを作成してみた

Last updated at Posted at 2025-01-13

はじめに

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ロール

Screenshot 2025-01-14 at 4.42.39.png

これまでは手動で設定することが多かったのですが、今回は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がロールを引き受けることが許可されます。

trust-policy.json
{
  "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へのアクセスを許可するポリシーの例です。

ecr-access-policy.json
{
  "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ロールが想定通り作成されていることが確認できました。

Screenshot 2025-01-14 at 4.45.30.png

また、ロールの詳細設定についても、冒頭でお見せしたスクリーンショットと一致していることが確認できました。

これにより、作業は無事成功といえます!

まとめ

ここまでお読みいただき、ありがとうございました。

私自身、AWS CLIを使ってIAMの設定を行う機会はそれほど多くなかったため、今回の作業は非常に新鮮な学びとなりました。

次回は、このIAMロールを活用して、コンテナイメージをAWS Lambdaで実行し、サーバーレス環境で動かす方法について解説していきます!

関連記事

今までIAM関連の記事は何分か投稿してきましたので、気になる方も読んでみてください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?