使用执行角色定义 Lambda 函数权限 - AWS Lambda

使用执行角色定义 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 控制台中创建执行角色
  1. 在 IAM 控制台中,打开 Roles(角色)页面。

  2. 选择 Create role(创建角色)。

  3. 可信实体类型下,选择 AWS 服务

  4. Use case(使用案例)下,选择 Lambda

  5. 选择下一步

  6. 选择您想要附加到角色的 AWS 托管策略。例如,如果您的函数需要访问 DynamoDB,则请选择 AWSLambdaDynamoDBExecutionRole 托管策略。

  7. 选择下一步

  8. 输入角色名称,然后选择创建角色

有关详细说明,请参阅 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 用户指南》中的基于访问活动生成策略