lambrollデプロイに必要なIAM権限

lambrollとは

fujiwara/lambroll は、AWS Lambda関数のデプロイを簡単に行うための軽量デプロイツールです。

デプロイに必要なIAM権限

lambrollを使ってLambda関数をデプロイする際、GitHub ActionsやCI/CDパイプラインで実行する場合に必要なIAM権限の一覧です。

権限一覧

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "lambda:CreateFunction",
        "lambda:GetFunction",
        "lambda:GetFunctionConfiguration",
        "lambda:InvokeFunction",
        "lambda:ListTags",
        "lambda:TagResource",
        "lambda:UntagResource",
        "lambda:UpdateFunctionCode",
        "lambda:UpdateFunctionConfiguration"
      ],
      "Resource": [
        "arn:aws:lambda:ap-northeast-1:123456789012:function:your-function-name"
      ]
    }
  ]
}

各権限の説明

必須権限

権限用途備考
lambda:CreateFunctionLambda関数の初回作成既存関数の更新のみの場合は不要
lambda:GetFunction既存関数の情報取得lambrollが関数の存在確認に使用
lambda:GetFunctionConfiguration関数設定の取得現在の設定との差分確認に使用
lambda:UpdateFunctionCode関数コードの更新デプロイの主要な処理
lambda:UpdateFunctionConfiguration関数設定の更新(環境変数、タイムアウトなど)function.jsonの設定を反映
lambda:ListTags関数のタグ一覧を取得重要: lambrollがfunction.jsonのTagsと既存タグを比較するために必須
lambda:TagResourceタグの追加function.jsonにTagsフィールドがある場合は必須
lambda:UntagResourceタグの削除既存タグを削除する場合に必要

オプション権限

権限用途備考
lambda:InvokeFunctionLambda関数の実行デプロイ後のテスト実行を行う場合に必要

よくあるエラーと対処法

lambda:ListTagsが不足している場合

Error: failed to deploy function configuration: failed to list tags of
arn:aws:lambda:...: operation error Lambda: ListTags,
api error AccessDeniedException: User is not authorized to perform:
lambda:ListTags on resource

原因: lambrollはfunction.jsonTagsフィールドと既存のタグを比較するため、lambda:ListTags権限が必要です。

対処法: IAMポリシーにlambda:ListTagsを追加してください。

エイリアス関連の権限について

以下の権限は、Lambda関数のエイリアスを使用しない場合は不要です:

  • lambda:CreateAlias
  • lambda:GetAlias
  • lambda:UpdateAlias

function.jsonでエイリアスを設定していない場合、これらの権限は追加する必要がありません。

function.json例

{
  "FunctionName": "your-function-name",
  "Runtime": "python3.12",
  "Handler": "handler.lambda_handler",
  "MemorySize": 128,
  "Timeout": 60,
  "Environment": {
    "Variables": {
      "ENV_VAR": "value"
    }
  },
  "Role": "arn:aws:iam::123456789012:role/lambda-execution-role",
  "Tags": {
    "Environment": "production",
    "ManagedBy": "lambroll"
  }
}

ベストプラクティス

  1. 最小権限の原則: 必要な権限のみを付与する
  2. リソース制限: Resourceに特定のLambda関数ARNを指定し、ワイルドカード(*)は避ける
  3. タグの活用: function.jsonでタグを定義し、リソース管理を容易にする
  4. テスト実行: デプロイ後にlambda:InvokeFunctionでヘルスチェックを実施する

参考リンク