AWS Lambda コンソールで CreateAlias アクションを許可してもエイリアスが作成できないときの対処方法

2021.01.04

AWS マネジメントコンソールの表示情報はアップデートで変更されることがあります。この記事は 2020/01 時点の内容です。

困っていた内容

AWS Lambda のコンソールで関数のエイリアスを作成したいです。 lambda:CreateAlias のアクションを許可したにもかかわらず、「エイリアスを作成」ボタンが押せません。どうすれば関数のエイリアスが作成できるようになりますか?

この事象は以下の利用状況で発生しました。

  • 要件で一部の操作を制限した IAM ポリシーを IAM ロールへアタッチしている
  • IAM ロールのスイッチロールを利用して、Lambda コンソールへアクセスしている

Lambda コンソールでエイリアスを作成できないポリシー例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "lambda:GetAccountSettings",
                "lambda:GetFunctionConfiguration",
                "lambda:ListFunctions",
                "lambda:GetFunction",
                "lambda:UpdateFunctionCode",
                "lambda:GetAlias",
                "lambda:CreateAlias",
                "lambda:ListAliases",
                "lambda:UpdateAlias",
                "lambda:InvokeFunction",
                "lambda:CreateFunction",
                "lambda:UpdateFunctionConfiguration",
                // EC2 や IAM に関するポリシー
            ],
            "Resource": "*"
        }
    ]
}

どう対応すればいいの?

Lambda コンソール上で関数のエイリアスを作成するには、ListVersionsByFunction アクションの許可が必要です。IAM コンソールのビジュアルエディタ、または JSON の編集で対象の IAM ポリシーに ListVersionsByFunction を追加することで、操作が可能となります。

JSON を直接編集する例も記載します。

Lambda コンソールでエイリアスを作成できるポリシー例

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "lambda:GetAccountSettings",
                "lambda:GetFunctionConfiguration",
                "lambda:ListFunctions",
                "lambda:GetFunction",
                "lambda:UpdateFunctionCode",
                "lambda:GetAlias",
                "lambda:CreateAlias",
                "lambda:ListAliases",
                "lambda:UpdateAlias",
                "lambda:InvokeFunction",
                "lambda:CreateFunction",
                "lambda:UpdateFunctionConfiguration",
                "lambda:ListVersionsByFunction",
                // EC2 や IAM に関するポリシー
            ],
            "Resource": "*"
        }
    ]
}

ListVersionsByFunction アクションを許可後、「エイリアスを作成」ボタンが押せるようになります。

どうやって調べたの?

検証環境で上述の利用状況と同様の IAM ポリシー、ポリシーをアタッチしたロールを作成し、AWS CLI で事象が再現するか調べました。

$ aws lambda create-alias \
    --function-name arakawaTestAlias \
    --description "alias for version 1 of function" \
    --function-version 1 \
    --name test \
    --profile test
{
    "AliasArn": "arn:aws:lambda:ap-northeast-1:123456789012:function:arakawaTestAlias:test",
    "Name": "test",
    "FunctionVersion": "1",
    "Description": "alias for version 1 of function",
    "RevisionId": "xxx"
}

AWS CLI では ListVersionsByFunction のアクションを許可しなくてもエイリアスの作成に成功しました。コマンド create-alias を実行するには --function-version が必須オプションであることがわかりました。当初のポリシーを確認すると、関数バージョンの参照権限が見つかりませんでした。

以上のことから Lambda コンソールで関数バージョンを参照するための権限が必要と推測し、ListVersionsByFunction のアクションを許可したところ、事象の解消が確認できました。

まとめ

AWS マネジメントコンソールではコマンドで実行可能なポリシーがアタッチされていても、一覧表示などの画面に関する ListXX アクションの許可も必要です。同様の状況に遭遇した場合は、画面表示に該当しそうな ListXX アクションが存在するか調べる方法が効果的です。(GetXX や DescribeXX などもありますが、ListXX アクションはとくに忘れがちです。)

また、AWS CLI のリファレンスで必須オプションとなっているパラメータなどから必要な権限を推測することも効果的です。

参考資料

テクニカルサポートノートとは?

クラスメソッドのカルチャー(CLP) の「情報発信を通じて、全ての人々の創造活動に貢献し続ける」という考えから、クラスメソッド メンバーズをご利用のお客様よりいただいたお問い合わせより、他の AWS ユーザーにとっても 有益な情報を一般的な TIPS としてご紹介しています。