AWS Lambda 执行角色 - AWS Lambda

AWS Lambda 执行角色

Lambda 函数的执行角色是一个 AWS Identity and Access Management (IAM) 角色,用于向函数授予访问 AWS 服务和资源的权限。您在创建函数时提供该角色,当您的函数被调用时,Lambda 代入该角色。您可以创建一个有权将日志发送到 Amazon CloudWatch 并将跟踪数据上传到 AWS X-Ray 的开发执行角色。

查看函数的执行角色

  1. 打开 Lambda 控制台的“函数”页面

  2. 选择函数。

  3. 选择 Configuration (配置),然后选择 Permissions (权限)

  4. 资源摘要下,查看函数可以访问的服务和资源。以下示例显示了当您在 Lambda 控制台中创建一个执行角色时,Lambda 向该执行角色添加的 CloudWatch Logs 权限。

    
          Lambda 控制台中的执行角色。
  5. 从下拉列表中选择一个服务以查看与该服务相关的权限。

可以随时在函数的执行角色中添加或删除权限,或配置您的函数以使用不同的角色。为您的函数使用 AWS 开发工具包调用的任何服务以及为 Lambda 用来启用可选功能的服务添加权限。

当您向函数添加权限时,也要更新其代码或配置。这将强制停止并替换正在运行的带过期凭证的函数实例。

在 IAM 控制台中创建执行角色

默认情况下,当您在 Lambda 控制台中创建函数时,Lambda 会创建具有最少权限的执行角色。您也可以在 IAM 控制台中创建执行角色。

在 IAM 控制台中创建执行角色

  1. 在 IAM 控制台中打开“角色”页面。

  2. 选择创建角色

  3. 常用案例下,选择 Lambda

  4. 选择 Next: Permissions (下一步:权限)

  5. 附加权限策略下,选择 AWS 托管策略 AWSLambdaBasicExecutionRoleAWSXRayDaemonWriteAccess

  6. 选择下一步: 标签

  7. 选择 下一步: 审核

  8. 对于 Role Name (角色名称),输入 lambda-role

  9. 选择创建角色

有关详细说明,请参阅 IAM 用户指南 中的为 AWS 服务创建角色(控制台)

授予 Lambda 执行角色最低访问权限

在开发阶段首次为 Lambda 函数创建 IAM 角色时,有时授予的权限可能超出所需权限。在生产环境中发布函数之前,最佳实践是调整策略以仅包含所需的权限。有关更多信息,请参阅授予最低权限

使用 IAM Access Analyzer 帮助识别 IAM 执行角色策略所需的权限。IAM Access Analyzer 审核您指定的日期范围内的 AWS CloudTrail 日志,并生成仅拥有函数在此期间使用的权限的策略模板。您可以使用模板创建具有精细权限的托管策略,然后将其附加到 IAM 角色。这样,您仅需授予角色与特定使用案例中的 AWS 资源进行交互所需的权限。

要了解更多信息,请参阅 IAM 用户指南中的基于访问活动生成策略

使用 IAM API 管理角色

要使用 AWS Command Line Interface (AWS CLI) 创建执行角色,请使用 create-role 命令。

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" } ] } } }

trust-policy.json 文件是当前目录中的 JSON 文件,该文件定义了角色的信任策略。此信任策略通过向服务委托人授予调用 AWS Security Token Service AssumeRole 操作所需的 lambda.amazonaws.com 权限来允许 Lambda 使用角色的权限。

例 trust-policy.json

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

您也可以内联方式指定信任策略。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"}]}'

要向角色添加权限,请使用 attach-policy-to-role 命令。首先,添加 AWSLambdaBasicExecutionRole 托管策略。

aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

Lambda 功能的 AWS 托管策略

以下 AWS 托管策略提供使用 Lambda 功能所需的权限:

  • AWSLambdaBasicExecutionRole – 将日志上传到 CloudWatch 的权限。

  • AWSLambdaDynamoDBExecutionRole – 读取 Amazon DynamoDB 流记录的权限。

  • AWSLambdaKinesisExecutionRole – 读取来自 Amazon Kinesis 数据流或使用者的事件的权限。

  • AWSLambdaMQExecutionRole – 从 Amazon MQ 代理读取记录的权限。

  • AWSLambdaMSKExecutionRole – 从 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 集群读取记录的权限。

  • AWSLambdaSQSQueueExecutionRole – 读取 Amazon Simple Queue Service (Amazon SQS) 队列消息的权限。

  • AWSLambdaVPCAccessExecutionRole – 管理弹性网络接口以将您的函数连接到 Virtual Private Cloud (VPC) 的权限。

  • AWSXRayDaemonWriteAccess – 将跟踪数据上传到 X-Ray 的权限。

  • CloudWatchLambdaInsightsExecutionRolePolicy – 向 CloudWatch Lambda Insights 写入运行时指标的权限。

对于某些功能,Lambda 控制台会尝试在客户托管策略中向执行角色添加缺失的权限。这些策略可能会变得很多。为避免创建额外的策略,在启用功能之前,请将相关的 AWS 托管策略添加到您的执行角色。

当您使用事件源映射调用您的函数时,Lambda 将使用执行角色读取事件数据。例如,Kinesis 的事件源映射从数据流读取事件并将事件成批发送到您的函数。可以将事件源映射用于以下服务:

除了 AWS 托管策略,Lambda 控制台还提供模板,以创建包含用于额外用例的权限的自定义策略。当您在 Lambda 控制台中创建函数时,可以选择利用来自一个或多个模板的权限创建新的执行角色。当您从蓝图创建函数,或者配置需要访问其他服务的选项时,也会自动应用这些模板。示例模板可从本指南的 GitHub 存储库中找到。