

# 在 Lambda 中创建跨账户事件源映射
<a name="msk-cross-account"></a>

您可以使用[多 VPC 私有连接](https://docs.amazonaws.cn/msk/latest/developerguide/aws-access-mult-vpc.html)将 Lambda 函数连接到不同 Amazon Web Services 账户 中的预置 MSK 集群。多 VPC 连接使用 Amazon PrivateLink，可将所有流量保持在 Amazon 网络内。

**注意**  
您无法为无服务器 MSK 集群创建跨账户事件源映射。

要创建跨账户事件源映射，必须先[为 MSK 集群配置多 VPC 连接](https://docs.amazonaws.cn/msk/latest/developerguide/aws-access-mult-vpc.html#mvpc-cluster-owner-action-turn-on)。创建事件源映射时，请使用托管 VPC 连接 ARN 而非集群 ARN，如以下示例所示。[CreateEventSourceMapping](https://docs.amazonaws.cn/lambda/latest/api/API_CreateEventSourceMapping.html) 操作也因 MSK 集群使用的身份验证类型而异。

**Example — 为使用 IAM 身份验证的集群创建跨账户事件源映射**  
当集群使用[基于 IAM 角色的身份验证](msk-cluster-auth.md#msk-iam-auth)时，您不需要 [SourceAccessConfiguration](https://docs.amazonaws.cn/lambda/latest/api/API_SourceAccessConfiguration.html) 对象。示例：  

```
aws lambda create-event-source-mapping \
  --event-source-arn arn:aws:kafka:us-east-1:111122223333:vpc-connection/444455556666/my-cluster-name/51jn98b4-0a61-46cc-b0a6-61g9a3d797d5-7 \
  --topics AWSKafkaTopic \
  --starting-position LATEST \
  --function-name my-kafka-function
```

**Example — 为使用 SASL/SCRAM 身份验证的集群创建跨账户事件源映射**  
如果集群使用 [SASL/SCRAM 身份验证](msk-cluster-auth.md#msk-sasl-scram)，则必须包含指定 `SASL_SCRAM_512_AUTH` 的 [SourceAccessConfiguration](https://docs.amazonaws.cn/lambda/latest/api/API_SourceAccessConfiguration.html) 对象以及 Secrets Manager 密钥 ARN。  
有两种方法可以通过 SASL/SCRAM 身份验证将密钥用于跨账户 Amazon MSK 事件源映射：  
+ 在 Lambda 函数账户中创建密钥并将其与集群密钥同步。[创建轮换](https://docs.amazonaws.cn/secretsmanager/latest/userguide/rotating-secrets.html)以使两个密钥保持同步。此选项允许您控制来自函数账户的密钥。
+ 使用与 MSK 集群关联的密钥。此密钥必须可用于跨账户存取 Lambda 函数账户。有关更多信息，请参阅[不同账户中用户对 Amazon Secrets Manager 密钥的访问权限](https://docs.amazonaws.cn/secretsmanager/latest/userguide/auth-and-access_examples_cross.html)。

```
aws lambda create-event-source-mapping \
  --event-source-arn arn:aws:kafka:us-east-1:111122223333:vpc-connection/444455556666/my-cluster-name/51jn98b4-0a61-46cc-b0a6-61g9a3d797d5-7 \
  --topics AWSKafkaTopic \
  --starting-position LATEST \
  --function-name my-kafka-function \
  --source-access-configurations '[{"Type": "SASL_SCRAM_512_AUTH","URI": "arn:aws:secretsmanager:us-east-1:444455556666:secret:my-secret"}]'
```

**Example — 为使用 mTLS 身份验证的集群创建跨账户事件源映射**  
如果集群使用 [mTLS 身份验证](msk-cluster-auth.md#msk-mtls)，则必须包含指定 `CLIENT_CERTIFICATE_TLS_AUTH` 的 [SourceAccessConfiguration](https://docs.amazonaws.cn/lambda/latest/api/API_SourceAccessConfiguration.html) 对象以及 Secrets Manager 密钥 ARN。密钥可以存储在集群账户或 Lambda 函数账户中。  

```
aws lambda create-event-source-mapping \
  --event-source-arn arn:aws:kafka:us-east-1:111122223333:vpc-connection/444455556666/my-cluster-name/51jn98b4-0a61-46cc-b0a6-61g9a3d797d5-7 \
  --topics AWSKafkaTopic \
  --starting-position LATEST \
  --function-name my-kafka-function \
  --source-access-configurations '[{"Type": "CLIENT_CERTIFICATE_TLS_AUTH","URI": "arn:aws:secretsmanager:us-east-1:444455556666:secret:my-secret"}]'
```