Knowledge Center Monthly Newsletter - March 2025
Stay up to date with the latest from the Knowledge Center. See all new and updated Knowledge Center articles published in the last month and re:Post’s top contributors.
Lambda 関数へのきめ細かなアクセスを付与する方法を教えてください。
特定の AWS Lambda 関数の読み書きアクセス許可を AWS Identity and Access Management (IAM) ユーザーに付与したいと考えています。
解決策
IAM ポリシーを使用して、IAM ユーザーが Lambda 関数を作成、削除、変更、呼び出し、監視したり、Lambda 関数の設定を確認したりするためのアクセス許可を設定します。
以下のポリシー例では、リソースレベルのアクセス許可をサポートする Lambda API アクションは、Resourc 要素にリストされている特定の Lambda 関数に制限しています。API アクションの Condition 要素を使用すると、IAM ポリシー内の Lambda 関数を識別できます。
リソースレベルのアクセス許可をサポートしない API アクションの場合、Resource 要素でワイルドカード (*) を使用する必要があります。Lambda 固有の条件キーは適用できません。詳細については、「AWS Lambda 用のアクション、リソース、条件キー」を参照してください。
Resource 要素は、ARN を使用してステートメントが適用されるリソースを識別します。たとえば、Action が Invoke の場合、Resource は関数 ARN になります。IAM は、ARN を呼び出しリクエストの FunctionName パラメータと Qualifier パラメータ内の関数の ARN と照合します。Lambda のさまざまなバージョンの ARN の詳細については、「バージョンを使用する」を参照してください。
複数の Lambda バージョンを使用している場合、各 Lambda の ARN を追加する必要はありません。代わりに、Resources 要素にワイルドカード (*) を含めます。
arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME:*
注: AWS_REGION:AWS_ACCOUNT_ID はお使いの Lambda ARN に、LAMBDA_FUNCTION_NAME は実際の Lambda 関数名前に置き換えます。
次の IAM ポリシーの例では、次の値を置き換えます。
- AWS_ACCOUNT_ID はお使いの AWS アカウント ID に置き換えます
- **LAMBDA\ _FUNCTION\ _NAME ** は実際の Lambda 関数名に置き換えます
- IAM_USER_NAME は、Lambda アクセスを付与する対象の IAM ユーザーに置き換えます
- AWS_REGION はお使いの AWS リージョンに置き換えます
- KEY_ID は、実際の AWS Key Management Service (AWS KMS) キーに置き換えます
- IAM_ROLE_NAME はお使いの IAM ロールに置き換えます
- S3_BUCKET_NAME は実際の Amazon Simple Storage Service (Amazon S3) バケット名に置き換えます
Lambda 関数を作成するためのアクセス許可
注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、「AWS CLI で発生したエラーのトラブルシューティング」を参照してください。また、AWS CLI の最新バージョンを使用していることを確認してください。
AWS CLI または Lambda コンソールを使用して Lambda 関数を作成するには、アクセス許可 lambda:CreateFunction および iam:PassRole が必要です。ポリシーの例については、「Lambda 用の ID ベースの IAM ポリシー」を参照してください。
次のポリシー例では、API 呼び出し元が Lambda 関数を作成し、その関数の Lambda 実行ロールとして IAM ロールを渡すことを許可します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionToCreateFunction", "Effect": "Allow", "Action": [ "lambda:CreateFunction" ], "Resource": [ "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME" ] }, { "Sid": "PermissionToPassARole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME" } ] }
Lambda 関数コードを S3 バケットに保存する場合は、IAM ポリシーに Amazon S3 アクセス許可を付与するポリシーを追加します。
ポリシーの例:
{ "Sid": "PermissionToUploadCodeFromS3", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::S3_BUCKET_NAME/FileName.zip" }
注: FileName.zip は、お使いの Lambda 関数コードの .zip ファイルに置き換えます。
関数の確認と更新には、読み取りレベルの API アクションとアクセス許可を追加する必要があります。
ポリシーの例:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionsToViewFunctionsInConsole", "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetAccountSettings" ], "Resource": "*" }, { "Sid": "PermissionsToCreateAndUpdateFunction", "Effect": "Allow", "Action": [ "lambda:CreateFunction", "lambda:GetFunction", "lambda:ListTags" "lambda:UpdateFunctionCode" ], "Resource": [ "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME" ] }, { "Sid": "PermissionToListExistingRoles", "Effect": "Allow", "Action": [ "iam:ListRoles" ], "Resource": "*" }, { "Sid": "PermissionToPassARole", "Effect": "Allow", "Action": [ "iam:PassRole" ], "Resource": "arn:aws:iam::AWS_ACCOUNT_ID:role/IAM_ROLE_NAME" } ] }
Lambda 関数作成プロセス中に IAM ロールを作成するには、次の IAM アクセス許可を追加します。
{ "Sid": "PermmissionsToCreateAndUpdateARole", "Effect": "Allow", "Action": [ "iam:CreateRole", "iam:CreatePolicy", "iam:PutRolePolicy", "iam:AttachRolePolicy" ], "Resource": "*" }
Lambda 関数を削除するためのアクセス許可
Lambda 関数を削除するには、IAM ポリシーに次のアクセス許可を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionToDeleteFunction", "Effect": "Allow", "Action": [ "lambda:DeleteFunction" ], "Resource": [ "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME" ] } ] }
Lambda コンソールを使用して関数を削除するには、IAM ポリシーに Lambda 読み取りアクセス許可を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionsToViewFunctionsInConsole", "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetAccountSettings" ], "Resource": "*" }, { "Sid": "PermissionToDeleteFunction", "Effect": "Allow", "Action": [ "lambda:DeleteFunction" ], "Resource": [ "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME" ] } ] }
Lambda 関数の設定の詳細を閲覧するためのアクセス許可
ユーザーが Lambda 関数の設定の詳細を閲覧できるようにするには、IAM ポリシーに次のアクセス許可を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ActionsWhichSupportResourceLevelPermissions", "Effect": "Allow", "Action": [ "lambda:GetFunction", "lambda:ListTags", "lambda:TagResource", "lambda:GetFunctionConfiguration", "lambda:GetPolicy", "lambda:GetAlias", "lambda:ListVersionsByFunction", "lambda:ListAliases" ], "Resource": [ "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME" ] }, { "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions", "Effect": "Allow", "Action": [ "lambda:ListTags", "lambda:GetEventSourceMapping", "lambda:ListEventSourceMappings" ], "Resource": "*" } ] }
注: 付与する読み取りアクセスのレベルに応じて、上記のアクセス許可をすべて追加することも、一部のみを追加することもできます。Lambda レイヤーを使用している場合は、アクセス許可 lambda:GetLayerVersion または lambda:ListLayerVersions を追加することもできます。
Lambda コンソールを使用して関数の設定詳細を表示するには、次のアクセス許可を IAM ポリシーに追加します。
{ "Sid": "PermissionsToViewFunctionsInConsole", "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetAccountSettings" ], "Resource": "*" }
Lambda コンソールでは Lambda 関数にタグを使用しているため、Lambda 関数をタグでフィルター処理できます。タグを使用するには、IAM ポリシーに次のアクセス許可を追加します。
{ "Sid": "PermissionsToFilterFunctionsByTags", "Effect": "Allow", "Action": [ "tag:GetResources" ], "Resource": "*" }
Lambda コンソールには、Lambda 関数に関連付けられた IAM ロールと、その関数のロールがアクセスできるリソースの詳細が表示されます。詳細を表示するには、IAM ポリシーに次のアクセス許可を追加します。
{ "Sid": "PermissionsToViewRolesAndPolicies", "Effect": "Allow", "Action": [ "iam:GetPolicy", "iam:GetPolicyVersion", "iam:GetRolePolicy", "iam:ListRoles", "iam:ListRolePolicies", "iam:ListAttachedRolePolicies" ], "Resource": "*" }
追加の要件がある場合は、他の AWS サービスに追加のアクセス許可を付与する必要がある場合があります。
Lambda 関数を変更するためのアクセス許可
ユーザーが Lambda 関数を変更できるようにするには、IAM ポリシーに次のアクセス許可を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ActionsWhichSupportResourceLevelPermissions", "Effect": "Allow", "Action": [ "lambda:AddPermission", "lambda:RemovePermission", "lambda:CreateAlias", "lambda:UpdateAlias", "lambda:DeleteAlias", "lambda:UpdateFunctionCode", "lambda:UpdateFunctionConfiguration", "lambda:PutFunctionConcurrency", "lambda:DeleteFunctionConcurrency", "lambda:PublishVersion", "lambda:UpdateFunctionEventInvokeConfig", "lambda:PutFunctionEventInvokeConfig" ], "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME" }, { "Sid": "ActionsWhichSupportCondition", "Effect": "Allow", "Action": [ "lambda:CreateEventSourceMapping", "lambda:UpdateEventSourceMapping", "lambda:DeleteEventSourceMapping" ], "Resource": "*", "Condition": { "StringEquals": { "lambda:FunctionArn": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME" } } }, { "Sid": "ActionsWhichDoNotSupportResourceLevelPermissions", "Effect": "Allow", "Action": [ "lambda:UntagResource", "lambda:TagResource" ], "Resource": "*" } ] }
注: 付与する書き込みアクセスのレベルに応じて、上記のアクセス許可をすべて追加することも、一部のみを追加することもできます。
アクセスを制限するには、アタッチされたポリシーに含まれるプリンシパルに、lambda:AddPermission および lambda:RemovePermission を追加します。lambda:UpdateEventSourceMapping と lambda:DeleteEventSourceMapping を特定のイベントソースマッピングに制限することもできます。
カスタマーマネージドキーを使用して環境変数を暗号化するには、次の AWS KMS アクセス許可を IAM ポリシーに追加します。
{ "Sid": "PermissionsForCryptoOperations", "Effect": "Allow", "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:CreateGrant" ], "Resource": "arn:aws:kms:AWS_REGION:AWS_ACCOUNT_ID:key/KEY_ID" }, { "Sid": "PermissionsToListExistingKeys", "Effect": "Allow", "Action": [ "kms:ListKeys", "kms:ListAliases" ], "Resource": "*" }
Lambda コンソールを使用して Lambda 関数の設定を変更するには、次のアクセス許可を IAM ポリシーに追加します。
{ "Sid": "PermissionsToViewFunctionsInConsole", "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetAccountSettings" ], "Resource": "*" }
Lambda 関数を呼び出すためのアクセス許可
Lambda 関数を手動で呼び出すには、IAM ポリシーに次のアクセス許可を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionToInvoke", "Effect": "Allow", "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME" } ] }
Lambda コンソールを使用して Lambda 関数を一覧表示するには、IAM ポリシーに次のアクセス許可を追加します。
{ "Sid": "PermissionsToViewFunctionsConfigInConsole", "Effect": "Allow", "Action": [ "lambda:ListFunctions", "lambda:GetAccountSettings", "lambda:GetFunction", "lambda:ListTags" ], "Resource": "*" }
他のサービスが Lambda 関数を呼び出せるようにするには、Lambda でリソースベースのポリシーを使用します。関数ポリシーを使用して、Lambda 関数へのクロスアカウントアクセスを付与することもできます。
次のポリシー例では、別のアカウントのユーザーが手動で Lambda 関数を呼び出すことができます。
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "PermissionToInvoke", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::External_AWS_ACCOUNT_ID:user/IAM_USER_NAME" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:AWS_REGION:AWS_ACCOUNT_ID:function:LAMBDA_FUNCTION_NAME" } ] }
注: External_AWS_ACCOUNT_ID は、関数の呼び出しを許可する対象のアカウントに置き換えます。
Lambda 関数を監視するためのアクセス許可
Lambda コンソールの [モニタリング] タブで Amazon CloudWatch メトリクスを表示するには、IAM ポリシーに次のアクセス許可を追加します。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "PermissionForCloudWatchMetrics", "Effect": "Allow", "Action": [ "cloudwatch:GetMetricStatistics", "cloudwatch:GetMetricData" ], "Resource": "*" } ] }
特定の CloudWatch メトリクスと CloudWatch Logs Insights へのアクセス許可を付与する方法については、「Amazon CloudWatch アクセス許可リファレンス」と「CloudWatch Logs アクセス許可リファレンス」を参照してください。

関連するコンテンツ
- 質問済み 5ヶ月前lg...
- 質問済み 1年前lg...
- 質問済み 1年前lg...
- AWS公式更新しました 2年前