

# 配置 Lambda 执行角色权限
<a name="with-kafka-permissions"></a>

除了[访问自行托管的 Kafka 集群](kafka-cluster-auth.md)外，您的 Lambda 函数还需要执行各种 API 操作的权限。您可以为函数的[执行角色](lambda-intro-execution-role.md)添加这些权限。如果您的用户需要访问任何 API 操作，请将所需权限添加到 Amazon Identity and Access Management（IAM）用户或角色的身份策略中。

**Topics**
+ [所需的 Lambda 函数权限](#smaa-api-actions-required)
+ [可选的 Lambda 函数权限](#smaa-api-actions-optional)
+ [向执行角色添加权限](#smaa-permissions-add-policy)
+ [使用 IAM policy 授予用户访问权限](#smaa-permissions-add-users)

## 所需的 Lambda 函数权限
<a name="smaa-api-actions-required"></a>

要在 Amazon CloudWatch Logs 中创建日志并将日志存储到日志组，Lambda 函数必须在它的执行角色中具有以下权限：
+ [logs:CreateLogGroup](https://docs.amazonaws.cn/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogGroup.html)
+ [logs:CreateLogStream](https://docs.amazonaws.cn/AmazonCloudWatchLogs/latest/APIReference/API_CreateLogStream.html)
+ [logs:PutLogEvents](https://docs.amazonaws.cn/AmazonCloudWatchLogs/latest/APIReference/API_PutLogEvents.html)

## 可选的 Lambda 函数权限
<a name="smaa-api-actions-optional"></a>

您的 Lambda 函数还可能需要权限来：
+ 描述您的 Secrets Manager 密钥。
+ 访问 Amazon Key Management Service（Amazon KMS）客户管理的密钥。
+ 访问 Amazon VPC。
+ 将失败调用的记录发送到目标。

### Secrets Manager 和 Amazon KMS 权限
<a name="smaa-api-actions-secrets"></a>

根据您为 Kafka 代理配置的访问控制类型，Lambda 函数可能需要访问您的 Secrets Manager 密钥或解密 Amazon KMS 客户管理的密钥的权限。要连接到这些资源，函数的执行角色必须具有以下权限：
+ [secretsmanager:GetSecretValue](https://docs.amazonaws.cn/secretsmanager/latest/apireference/API_GetSecretValue.html)
+ [kms:Decrypt](https://docs.amazonaws.cn/kms/latest/APIReference/API_Decrypt.html)

### VPC 权限
<a name="smaa-api-actions-vpc"></a>

如果只有 VPC 内的用户才能访问您自行托管的 Apache Kafka 集群，则 Lambda 函数必须具有访问 Amazon VPC 资源的权限。这些资源包括您的 VPC、子网、安全组和网络接口。要连接到这些资源，函数的执行角色必须具有以下权限：
+ [ec2:CreateNetworkInterface](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_CreateNetworkInterface.html)
+ [ec2:DescribeNetworkInterfaces](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeNetworkInterfaces.html)
+ [ ec2:DescribeVpcs](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeVpcs.html)
+ [ ec2:DeleteNetworkInterface](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DeleteNetworkInterface.html)
+ [ ec2:DescribeSubnets](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeSubnets.html)
+ [ ec2:DescribeSecurityGroups](https://docs.amazonaws.cn/AWSEC2/latest/APIReference/API_DescribeSecurityGroups.html)

## 向执行角色添加权限
<a name="smaa-permissions-add-policy"></a>

要访问自行管理的 Apache Kafka 集群使用的其他Amazon服务，Lambda 需使用您在 Lambda 函数[执行角色](lambda-intro-execution-role.md)中定义的权限策略。

默认情况下，Lambda 无权为自行管理的 Apache Kafka 集群执行必需或可选操作。您必须在 [IAM 信任策略](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_update-role-trust-policy.html)中为您的执行角色创建和定义这些操作。此示例演示了如何创建允许 Lambda 访问您的 Amazon VPC 资源的策略。

------
#### [ JSON ]

****  

```
{
        "Version":"2012-10-17",		 	 	 
        "Statement":[
           {
              "Effect":"Allow",
              "Action":[
                 "ec2:CreateNetworkInterface",
                 "ec2:DescribeNetworkInterfaces",
                 "ec2:DescribeVpcs",
                 "ec2:DeleteNetworkInterface",
                 "ec2:DescribeSubnets",
                 "ec2:DescribeSecurityGroups"
              ],
              "Resource":"*"
           }
        ]
     }
```

------

## 使用 IAM policy 授予用户访问权限
<a name="smaa-permissions-add-users"></a>

默认情况下，用户和角色无权执行[事件源 API 操作](invocation-eventsourcemapping.md#event-source-mapping-api)。要向组织或账户中的用户授予访问权限，您可以创建或更新基于身份的策略。有关更多信息，请参阅 *IAM 用户指南*中的[使用策略控制对Amazon资源的访问权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_controlling.html)。

有关身份验证和授权错误的故障排除，请参阅[Kafka 事件源映射错误的故障排除](with-kafka-troubleshoot.md)