为 Amazon MSK 事件源映射配置 Lambda 权限
要访问 Amazon MSK 集群,您的函数和事件源映射需要具有执行各种 Amazon MSK API 操作的权限。为函数的执行角色添加这些权限。如果您的用户需要访问权限,请将所需权限添加到用户或角色的身份策略中。
AWSLambdaMSKExecutionRole 托管策略包含 Amazon MSK Lambda 事件源映射所需的最低权限。要简化权限流程,您可以执行以下操作:
-
将 AWSLambdaMSKExecutionRole 托管策略附加到您的执行角色。
-
让 Lambda 控制台为您生成权限。当您在控制台中创建 Amazon MSK 事件源映射时,Lambda 会评估您的执行角色,并在发现任何权限缺失的情况时向您发出提醒。选择生成权限以自动更新您的执行角色。如果您手动创建或修改了执行角色的策略,或者这些策略被附加到多个角色上,则此方法将不起作用。请注意,在使用高级功能(例如失败时的目标或 Amazon Glue 架构注册表)时,您的执行角色可能仍需要额外的权限。
所需的权限
您的 Lambda 函数执行角色必须具备以下所需的 Amazon MSK 事件源映射权限。这些权限包含在 AWSLambdaMSKExecutionRole 托管策略中。
CloudWatch Logs 权限
以下权限使 Lambda 能够在 Amazon CloudWatch Logs 中创建和存储日志。
MSK 集群权限
以下权限使 Lambda 能够代表您访问 Amazon MSK 集群:
我们建议使用 kafka:DescribeClusterV2 而不是 kafka:DescribeCluster。v2 权限适用于预置集群和无服务器 Amazon MSK 集群。您的策略中只需其中一项权限即可。
VPC 权限
以下权限使 Lambda 能够在连接到您的 Amazon MSK 集群时创建和管理网络接口:
可选权限
您的 Lambda 函数还可能需要权限来:
-
访问跨账户的 Amazon MSK 集群。要进行跨账户事件源映射,您在执行角色中需要 kafka:DescribeVpcConnection。创建跨账户事件源映射的 IAM 主体需要 kafka:ListVpcConnections。
-
访问您的 SCRAM 密钥(如果使用 SASL/SCRAM 身份验证)。这样,您的函数就可以通过用户名和密码来连接到 Kafka。
-
如果您使用 SASL/SCRAM 或 mTLS 身份验证,则请描述您的 Secrets Manager 密钥。这样,您的函数就可以检索安全连接所需的凭证或证书。
-
如果您的 Amazon Secrets Manager 密钥使用 Amazon KMS 客户托管密钥加密,请访问您的 Amazon KMS 客户托管密钥。
-
如果您使用的是带身份验证的架构注册表,请访问您的架构注册表密钥:
-
对于 Amazon Glue 架构注册表:您的函数需要
glue:GetRegistry和glue:GetSchemaVersion权限。这样,您的函数就可以查找和使用存储在 Amazon Glue 中的消息格式规则。 -
对于带有
BASIC_AUTH或CLIENT_CERTIFICATE_TLS_AUTH的 Confluent 架构注册表:您的函数需要访问密钥(包含身份验证凭证)的 secretsmanager:GetSecretValue权限。这样,您的函数就可以检索访问 Confluent 架构注册表所需的用户名/密码或证书。 -
对于私有 CA 证书:您的函数需要访问密钥(包含证书)的 secretsmanager:GetSecretValue 权限。这样,您的函数就可以验证使用自定义证书的架构注册表的身份。
-
-
如果您对事件源映射使用 IAM 身份验证,则可以访问 Kafka 集群的使用者组,并从指定的主题中轮询消息。
这些密钥对应以下所需权限:
-
kafka:ListScramSecrets - 让您可以列出用于 Kafka 身份验证的 SCRAM 密钥
-
secretsmanager:GetSecretValue - 让您可以从 Secrets Manager 中检索密钥
-
kms:Decrypt - 让您可以使用 Amazon KMS 对加密数据进行解密
-
glue:GetRegistry - 让您可以访问 Amazon Glue 架构注册表
-
glue:GetSchemaVersion - 让您可以从 Amazon Glue 架构注册表中检索特定的架构版本
-
kafka-cluster:Connect:授予连接和验证集群的权限
-
kafka-cluster:AlterGroup:授予加入集群上群组的权限,相当于 Apache Kafka 的 READ GROUP ACL
-
kafka-cluster:DescribeGroup:授予描述集群上的群组的权限,相当于 Apache Kafka 的 DESCRIBE GROUP ACL
-
kafka-cluster:DescribeTopic:授予描述集群上的主题的权限,相当于 Apache Kafka 的 DESCRIBE TOPIC ACL
-
kafka-cluster:ReadData:授予从集群上的主题中读取数据的权限,相当于 Apache Kafka 的 READ TOPIC ACL
此外,如果您想将失败调用的记录发送到失败时的目标,则需要根据目标类型获得以下权限:
-
对于 Amazon SQS 目标:sqs:SendMessage - 让您可以向 Amazon SQS 队列发送消息
-
对于 Amazon SNS 目标:sns:Publish - 让您可以向Amazon SNS 主题发布消息
-
对于 Amazon S3 存储桶目标:s3:PutObject 和 s3:ListBucket - 让您可以在 Amazon S3 存储桶中写入和列出对象
有关身份验证和授权错误的故障排除,请参阅Kafka 事件源映射错误的故障排除