AWS Lambda 执行角色 - AWS Lambda

AWS Lambda 执行角色

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

查看函数的执行角色

  1. 打开 Lamba 控制台的 Functions page(函数页面)。

  2. 选择函数。

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

  4. 资源摘要下,查看函数可以访问的服务和资源。

  5. 从下拉列表中选择一个服务以查看与该服务相关的权限。

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

向函数添加权限时,请同时更新其代码或配置。这会强制运行具有过期凭据的函数实例,以便停止并替换。

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

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

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

  1. 在 IAM 控制台中,打开“Roles (角色)”页面

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

  3. Common use cases(常用使用案例)下,请选择 Lambda

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

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

  6. 请选择下一步:标签

  7. 请选择下一步:审核

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

  9. 选择 Create role (创建角色)

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

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

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

使用 IAM 访问分析器帮助确定 IAM 执行角色策略所需的权限。IAM 访问分析器将检查您指定的日期范围内的 AWS CloudTrail 日志,并生成仅具有该函数在该时间内使用的权限的策略模板。您可以使用模板创建具有精细权限的托管策略,然后将其附加到 IAM 角色。这样,您仅需授予角色与特定使用案例中的 AWS 资源进行交互所需的权限。

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

使用 IAM API 管理角色

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

在以下示例中,您可以指定内联信任策略。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 是位于当前目录中的一个文件。此信任策略允许 Lambda 通过向服务主体授予调用 AWS Security Token Service AssumeRole 操作的 lambda.amazonaws.com 权限来使用该角色的权限。

例 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 托管策略。

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

临时安全凭证的会话持续时间

Lambda 会代入与您的函数关联的执行角色以获取临时安全凭证,这些凭证随后可在函数调用期间作为环境变量使用。临时凭证的有效期有限,可能在完成请求的处理后不再有效。IAM 角色的最大会话持续时间设置不限制 AWS 服务(例如 Lambda)代入的会话。如果您需要对会话持续时间有更多的控制,请使用 sts:AssumeRole 操作。

Lambda 功能的AWS托管式策略

以下 AWS 托管式策略提供使用 Lambda 函数所需的权限。

更改 说明 日期

AWSLambdaBasicExecutionRole – Lambda 开始跟踪对此策略所做的更改。

AWSLambdaBasicExecutionRole 授予将日志上传至 CloudWatch 的权限。

2022 年 2 月 14 日

AWSLambdaDynamoDBExecutionRole – Lambda 开始跟踪对此策略所做的更改。

AWSLambdaDynamoDBExecutionRole 授予读取 Amazon DynamoDB 流中的记录并写入到 CloudWatch Logs 的权限。

2022 年 2 月 14 日

AWSLambdaKinesisExecutionRole – Lambda 开始跟踪对此策略所做的更改。

AWSLambdaKinesisExecutionRole 授予读取 Amazon Kinesis 数据流中的事件并写入到 CloudWatch Logs 的权限。

2022 年 2 月 14 日

AWSLambdaMSKExecutionRole – Lambda 开始跟踪对此策略所做的更改。

AWSLambdaMSKExecutionRole 授予读取和访问 Amazon Managed Streaming for Apache Kafka (Amazon MSK) 集群中的记录、管理网络接口 (ENI) 并写入到 CloudWatch Logs 的权限。

2022 年 2 月 14 日

AWSLambdaSQSQueueExecutionRole – Lambda 开始跟踪对此策略所做的更改。

AWSLambdaSQSQueueExecutionRole 授予读取 Amazon Simple Queue Service (Amazon SQS) 队列中的消息并写入到 CloudWatch Logs 的权限。

2022 年 2 月 14 日

AWSLambdaVPCAccessExecutionRole – Lambda 开始跟踪对此策略所做的更改。

AWSLambdaVPCAccessExecutionRole 授予管理 Amazon VPC 中的 ENI 并写入到 CloudWatch Logs 的权限。

2022 年 2 月 14 日

AWSXRayDaemonWriteAccess – Lambda 开始跟踪对此策略所做的更改。

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

2022 年 2 月 14 日

CloudWatchLambdaInsightsExecutionRolePolicy – Lambda 开始跟踪对此策略所做的更改。

CloudWatchLambdaInsightsExecutionRolePolicy 授予将运行时指标写入到 CloudWatch Lambda Insights 的权限。

2022 年 2 月 14 日

AmazonS3ObjectLambdaExecutionRolePolicy – Lambda 开始跟踪对此策略所做的更改。

AmazonS3ObjectLambdaExecutionRolePolicy 授予与 Amazon S3 对象 Lambda 交互并写入到 CloudWatch Logs 的权限。

2022 年 2 月 14 日

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

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

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