跳至内容

如何使用访问控制和身份验证来限制 CloudFront 分配的内容分发?

2 分钟阅读
0

我想限制对我的 Amazon CloudFront 分配中内容的访问。

简短描述

要限制对 CloudFront 分配中私有内容的访问,请使用签名 URL 或签名 Cookie。

如果您仅需要使用用户名和密码进行基本身份验证,请使用 Lambda@Edge 或 CloudFront Functions 来设置基本身份验证。

要基于 IP 地址或地理位置限制访问,请配置 CloudFront 以允许或阻止请求。

要通过身份提供者设置安全的用户身份验证,请使用 Lambda@Edge 将 CloudFront 与 OpenID Connect (OIDC) 集成。

解决方法

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

使用签名 URL 或签名 Cookie

签名 URL 会在 URL 中嵌入加密签名,以提供对单个文件的临时访问权限。使用签名 URL 可保护对特定资源的访问。

CloudFront 会向客户端发出签名 Cookie,以允许访问某个路径下的多个文件。使用签名 Cookie 可实现更广泛的访问控制。

注意:签名 URL 和签名 Cookie 会使用您创建并与您的分配相关联的加密密钥对。

要使用签名 URL 或签名 Cookie,请完成以下步骤:

创建密钥对

创建密钥对并将密钥对上传到 CloudFront

创建可信密钥组

  1. 打开 CloudFront 控制台
  2. 在导航窗格中的 Key management(密钥管理)下,选择 Key groups(密钥组)。
  3. 选择 Create key group(创建密钥组)。
  4. 对于 Name(名称),输入您的密钥组的名称。
  5. 对于 Public keys(公钥),选择一个密钥。
  6. 选择 Create key group(创建密钥组)。

配置您的分配

更新您的分配,以将您的可信密钥组用于签名 URL 或签名 Cookie。有关如何配置分配的详细信息,请参阅缓存行为设置

生成签名 URL 或签名 Cookie

要生成签名 URL,请运行以下 sign AWS CLI 命令:

aws cloudfront sign \
    --url "https://your-distribution-domain.cloudfront.net/path/to/file.pdf" \
    --key-pair-id "YOUR_KEY_PAIR_ID" \
    --private-key file://path/to/your/private-key.pem \
    --date-less-than "2024-12-31T23:59:59"

有关 IP 限制等其他选项,请参阅 AWS CLI Command Reference(AWS CLI 命令参考)中的 Options(选项)

**注意:**您也可以为第三方工具创建签名 URL。

要生成签名 Cookie,请使用适用于您的语言的 AWS SDK。有关代码示例,请参阅使用 PHP 创建签名 Cookie使用 AWS SDK 创建签名 URL 和 Cookie

使用签名 URL 或签名 Cookie

在向 CloudFront 发送的请求中包含签名 URL 或签名 Cookie。

使用 Lambda@Edge 设置基本身份验证

**注意:**要使用 Lambda@Edge 实现您的身份验证逻辑,您必须创建自定义代码。

完成以下步骤:

  1. 创建一个 AWS Lambda 函数,用于处理查看器请求的身份验证。
  2. 在函数的代码中,检查请求标头、验证凭证,并允许或拒绝请求。有关示例函数,请参阅示例: 将未经身份验证的用户重定向到登录页面
  3. 使用触发器将该函数与您的分配的行为相关联。

使用 CloudFront Functions 设置基本身份验证

**注意:**要使用 CloudFront Functions 实现您的身份验证逻辑,您必须创建自定义代码。

完成以下步骤:

  1. 创建一个 CloudFront 函数,用于对查看器请求进行身份验证。
  2. 在函数的代码中,检查标头、验证凭证,并允许或拒绝请求。有关示例函数,请参阅验证 CloudFront Functions 查看器请求中的简单令牌
  3. 将该函数与您的分配的行为相关联

配置 CloudFront,以根据客户端 IP 地址或地理位置允许或阻止请求

执行以下操作之一:

  • 要基于 IP 访问控制创建限制,请使用 AWS WAF 为您的分配定义 IP 地址允许列表和拒绝列表。
  • 要基于地理位置创建限制,请根据请求来源的国家/地区限制对您内容的访问

**注意:**AWS WAF 和地理限制仅适用于分配级别,不适用于缓存行为。

使用 Lambda@Edge 将 CloudFront 与 OIDC 集成

**注意:**要进行集成,您必须在应用程序中实现 OIDC 身份验证流程,并获取 ID 令牌,以包含在向 CloudFront 发送的请求中。

完成以下步骤:

  1. 创建一个 Lambda 函数,用于验证查看器请求中的 OIDC ID 令牌。
  2. 在函数的代码中,检查授权标头,验证 ID 令牌,并允许或拒绝请求。
  3. 将该函数与您的分配的行为相关联

相关信息

Authorization@Edge – How to Use Lambda@Edge and JSON Web Tokens to Enhance Web Application Security(Authorization@Edge – 如何使用 Lambda@Edge 和 JSON Web 令牌增强 Web 应用程序安全性)

External Server Authorization with Lambda@Edge(使用 Lambda@Edge 实现外部服务器授权)

Securing CloudFront distributions using OpenID Connect and AWS Secrets Manager(使用 OpenID Connect 和 AWS Secrets Manager 保护 CloudFront 分配)

AWS 官方已更新 3 个月前