

# 将 CloudFront Functions 与源双向 TLS 结合使用
<a name="origin-mtls-cloudfront-functions"></a>

CloudFront Functions 在边缘提供轻量级的无服务器计算，用于自定义内容交付。在 CloudFront Functions 中使用源双向 TLS 时，需要注意有关源选择和操作的特定行为和限制。

## 支持的 CloudFront Functions 操作
<a name="supported-cloudfront-functions-operations"></a>

CloudFront Functions 可以通过以下方式与启用了 mTLS 的源进行交互：

### updateRequestOrigin()
<a name="update-request-origin-function"></a>

updateRequestOrigin() 函数在使用启用了 mTLS 的源时支持进行有限的修改：
+ **在源 mTLS 源之间切换：**您可以更新请求以路由到使用源 mTLS 的不同源，前提是这两个源都使用**相同的客户端证书**。这支持您在保持双向 TLS 身份验证的同时实现自定义路由逻辑。
+ **禁用源 mTLS：**您可以通过在函数中设置 `mTLSConfig: 'off'`，从启用了 mTLS 的源切换到非 mTLS 源。这为根据请求特征有条件地禁用双向 TLS 身份验证提供了灵活性。

#### 示例：在具有相同证书的源 mTLS 源之间切换
<a name="example-switching-mtls-origins"></a>

```
function handler(event) {
    var request = event.request;

    // Route to different origin based on request path
    if (request.uri.startsWith('/api/v2')) {
        request.origin = {
            domainName: 'api-v2.example.com',
            customHeaders: {},
            // Both origins must use the same certificate
        };
    }

    return request;
}
```

#### 示例：有条件地禁用源 mTLS
<a name="example-disabling-mtls"></a>

```
function handler(event) {
    var request = event.request;

    // Disable mTLS for specific paths
    if (request.uri.startsWith('/public')) {
        request.origin = {
            domainName: 'public-origin.example.com',
            customHeaders: {},
            mTLSConfig: 'off'
        };
    }

    return request;
}
```

## 不支持的 CloudFront Functions 操作
<a name="unsupported-cloudfront-functions-operations"></a>

在正式上市时，以下 CloudFront Functions 操作不支持启用了源 mTLS 的源：

### selectRequestOriginById()
<a name="select-request-origin-by-id-function"></a>

`selectRequestOriginById()` 函数无法选择已启用源 mTLS 的源。尝试使用此函数选择已启用源 mTLS 的源将导致验证错误。

如果使用案例要求使用源 mTLS 进行动态源选择，请改用 `updateRequestOrigin()`，确保所有目标源都使用相同的客户端证书。

### createRequestOriginGroup()
<a name="create-request-origin-group-function"></a>

`createRequestOriginGroup()` 函数不支持创建包含已启用 mTLS 的源的源组。无法通过 CloudFront Functions 动态创建具有源 mTLS 源的源组。

如果您需要具有源 mTLS 的源失效转移功能，请直接在 CloudFront 分配设置中配置源组，而不是在函数中动态创建源组。