使用执行角色定义 Lambda 函数权限
Lambda 函数的执行角色是一个 AWS Identity and Access Management (IAM) 角色,用于向函数授予访问AWS服务和资源的权限。例如,您可以创建一个有权将日志发送到 Amazon CloudWatch 并将跟踪数据上传到 AWS X-Ray 的执行角色。此页面提供有关如何创建、查看和管理 Lambda 函数执行角色的信息。
当您调用函数时,Lambda 会自动代入您的执行角色。您应该避免在函数代码中手动调用 sts:AssumeRole
来担任执行角色。如果您的使用案例要求角色能代入自己,则必须将角色本身作为可信主体包含在角色的信任策略中。有关如何修改角色信任策略的更多信息,请参阅《IAM 用户指南》中的修改角色信任策略(控制台)。
为了让 Lambda 正确担任执行角色,该角色的信任策略必须将 Lambda 服务主体(lambda.amazonaws.com
)指定为可信服务。
主题
在 IAM 控制台中创建执行角色
预设情况下,当您在 Lambda 控制台中创建函数时,Lambda 会创建具有最少权限的执行角色。具体而言,此执行角色包括 AWSLambdaBasicExecutionRole
托管策略,该策略授予您的函数将事件记录到 Amazon CloudWatch Logs 的基本权限。
您的函数通常需要额外的权限才能执行更有意义的任务。例如,您可能会有想通过更新 Amazon DynamoDB 数据库中的条目来响应事件的 Lambda 函数。您可以使用 IAM 控制台创建具有必要权限的执行角色。
在 IAM 控制台中创建执行角色
-
在 IAM 控制台中,打开 Roles
(角色)页面。 -
选择 Create role(创建角色)。
-
在可信实体类型下,选择 AWS 服务。
-
在 Use case(使用案例)下,选择 Lambda。
-
选择下一步。
-
选择您想要附加到角色的 AWS 托管策略。例如,如果您的函数需要访问 DynamoDB,则请选择 AWSLambdaDynamoDBExecutionRole 托管策略。
-
选择下一步。
-
输入角色名称,然后选择创建角色。
有关详细说明,请参阅 IAM 用户指南中的为 AWS 服务(控制台)创建一个角色。
创建执行角色后,将其附加到您的函数。当您在 Lambda 控制台中创建函数时,您可以将之前创建的任何执行角色附加到该函数。如果要将新的执行角色附加到现有函数,则请按照 更新函数的执行角色 中的步骤操作。
使用 AWS CLI 创建和管理角色
要使用 AWS Command Line Interface (AWS CLI) 创建执行角色,请使用 create-role 命令。在使用此命令时,您可以指定内联信任策略。角色的信任策略会向指定主体授予代入该角色的权限。在以下示例中,您向 Lambda 服务主体授予代入角色的权限。请注意,JSON 字符串中对转义引号的要求可能因 shell 而异。
aws iam create-role \ --role-name lambda-ex \ --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
您还可以使用单独的 JSON 文件为角色定义信任策略。在下面的示例中,trust-policy.json
是位于当前目录中的一个文件。
例 trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role \ --role-name lambda-ex \ --assume-role-policy-document file://trust-policy.json
您应看到以下输出:
{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
要向角色添加权限,请使用 attach-policy-to-role 命令。以下命令将 AWSLambdaBasicExecutionRole
托管策略添加到 lambda-ex
执行角色。
aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
创建执行角色后,将其附加到您的函数。当您在 Lambda 控制台中创建函数时,您可以将之前创建的任何执行角色附加到该函数。如果要将新的执行角色附加到现有函数,则请按照 更新函数的执行角色 中的步骤操作。
授予对 Lambda 执行角色的最低访问权限
在开发阶段首次为 Lambda 函数创建 IAM 角色时,有时授予的权限可能超出所需权限。在生产环境中发布函数之前,最佳实践是调整策略,使其仅包含所需权限。有关更多信息,请参阅《IAM 用户指南》中的应用最低权限许可。
使用 IAM 访问分析器帮助确定 IAM 执行角色策略所需的权限。IAM 访问分析器将检查您指定的日期范围内的 AWS CloudTrail 日志,并生成仅具有该函数在该时间内使用的权限的策略模板。您可以使用模板创建具有精细权限的托管策略,然后将其附加到 IAM 角色。这样,您仅需授予角色与特定使用案例中的 AWS 资源进行交互所需的权限。
有关更多信息,请参阅《IAM 用户指南》中的基于访问活动生成策略。