AWS Lambda 执行角色
Lambda 函数的执行角色是一个 AWS Identity and Access Management (IAM) 角色,用于向函数授予访问 AWS 服务和资源的权限。您在创建函数时提供该角色,当您的函数被调用时,Lambda 代入该角色。您可以创建一个有权将日志发送到 Amazon CloudWatch 并将跟踪数据上传到 AWS X-Ray 的开发执行角色。
查看函数的执行角色
-
打开 Lambda 控制台的“函数”页面
。 -
选择函数。
-
选择 Configuration (配置),然后选择 Permissions (权限)。
-
在资源摘要下,查看函数可以访问的服务和资源。以下示例显示了当您在 Lambda 控制台中创建一个执行角色时,Lambda 向该执行角色添加的 CloudWatch Logs 权限。
-
从下拉列表中选择一个服务以查看与该服务相关的权限。
可以随时在函数的执行角色中添加或删除权限,或配置您的函数以使用不同的角色。为您的函数使用 AWS 开发工具包调用的任何服务以及为 Lambda 用来启用可选功能的服务添加权限。
当您向函数添加权限时,也要更新其代码或配置。这将强制停止并替换正在运行的带过期凭证的函数实例。
在 IAM 控制台中创建执行角色
默认情况下,当您在 Lambda 控制台中创建函数时,Lambda 会创建具有最少权限的执行角色。您也可以在 IAM 控制台中创建执行角色。
在 IAM 控制台中创建执行角色
-
在 IAM 控制台中打开“角色”
页面。 -
选择创建角色。
-
在常用案例下,选择 Lambda。
-
选择 Next: Permissions (下一步:权限)。
-
在附加权限策略下,选择 AWS 托管策略 AWSLambdaBasicExecutionRole 和 AWSXRayDaemonWriteAccess。
-
选择下一步: 标签。
-
选择 下一步: 审核。
-
对于 Role Name (角色名称),输入
lambda-role
。 -
选择创建角色。
有关详细说明,请参阅 IAM 用户指南 中的为 AWS 服务创建角色(控制台)。
使用 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 的事件源映射从数据流读取事件并将事件成批发送到您的函数。可以将事件源映射用于以下服务:
Lambda 从其读取事件的服务
除了 AWS 托管策略,Lambda 控制台还提供模板,以创建包含用于额外用例的权限的自定义策略。当您在 Lambda 控制台中创建函数时,可以选择利用来自一个或多个模板的权限创建新的执行角色。当您从蓝图创建函数,或者配置需要访问其他服务的选项时,也会自动应用这些模板。示例模板可从本指南的
GitHub 存储库