この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
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 のリファレンスで必須オプションとなっているパラメータなどから必要な権限を推測することも効果的です。