troisiemejoueur/cloudfront-signed-urls

为 S3 Craft CMS 存储创建 AWS Cloudfront 签名 URL

1.1.0 2022-03-11 14:35 UTC

This package is auto-updated.

Last update: 2024-09-29 01:51:32 UTC


README

Cloudfront Signed URLs icon

Cloudfront 签名 URL for Craft CMS

此插件在 Twig 模板中提供 AWS Cloudfront 签名 URL。

要求

此插件需要 Craft CMS 3.x。

安装

要安装插件,请按照以下说明操作。

  1. 打开您的终端并转到您的 Craft 项目。

     cd /path/to/project
    
  2. 然后告诉 Composer 加载插件。

     composer require troisiemejoueur/cloudfront-signed-urls
    
  3. 在控制面板中,转到设置 → 插件,并单击 Cloudfront 签名 URL 的“安装”按钮。

概述

此插件向 AWS Cloudfront 分发添加了签名 URL 的 Twig 函数。常见用法是为仅登录用户提供的受限制部分。

为了使用此插件,我们假设您已经与 AWS 一起工作,并且知道如何为 CMS 创建存储桶、Cloudfront 分发和 IAM 访问。如果不是这样,您可以阅读 Pixel & Tonic 的 AWS S3 插件的文档以及 Andrew Welch 的这篇文章

请不要为此插件打开有关 AWS 配置问题或与此插件无关的问题。

工作原理

您使用带有 Restrict Viewer Access 设置为 的 Cloudfront 分发将您的资产上传到非公开的 S3 存储桶。当您在模板中创建 URL 时,这些 URL 将使用随机密钥进行签名。

这些 URL 在页面加载时创建,并在您输入的持续时间后过期。

Cloudfront 签名 URL 文档

配置文件

插件附带一个 config.php 文件,该文件定义了一些合理的默认值。

如果您想设置自己的值,您应该在 Craft 配置目录中创建一个 cloudfront-signed-urls.php 文件。此文件的內容将与插件默认值合并。您只需要指定您想覆盖的设置的值。

keyPairId

keyPairId 是您定义从您的 公开-私有 密钥对中 Key-Pair-Id 字段值的地方。有关创建公开-私有密钥对的信息,请参阅AWS 文档

cloudfrontDistributionUrl

cloudfrontDistributionUrl 是您定义签名 URL 的基本 URL 的地方。如果您想按文件管理基本 URL,请不要将此设置添加到您的配置文件中。如果您正在使用子文件夹,您可以将它附加到此 URL。 尾随斜杠是不必要的

profile

profile 是您定义 Cloudfront 客户端配置文件的地方。default 是默认值。

version

version 是您定义 Cloudfront 客户端版本的地方。2020-05-31 是默认值。

region

region 是您定义 Cloudfront 客户端的区域端点的地方。ca-central-1 是默认值,您可能需要根据您的项目更改它。

defaultExpires

defaultExpires用于定义在秒数中您的已签名URL的过期延迟时间,如果在使用Twig函数时未配置为参数,则使用此值。这是一个默认值。默认值是3600(60分钟)。

过期时间是这样计算的:now time + defaultExpires

注意:您可以使用ENV文件中的值来配置所有设置。例如:App::env('YOUR_VARIABLE_NAME')

示例cloudfront-signed-urls.php配置文件

<?php

use craft\helpers\App;

return [
   'keyPairId' => App::env('SIGNED_URLS_KEYPAIR'),
   'cloudfrontDistributionUrl' => 'https://my-distribution.cloudfront.net',
   'profile' => 'default',
   'version' => '2020-05-31',
   'region' => 'ca-central-1',
   'defaultExpires' => 4200
];

私钥(.pem文件)

为了签署您的URL,AWS需要访问私钥(private_key.pem文件)。查看AWS文档以创建公私钥对

当您安装此插件时,将在您的Craft CMS项目的storage文件夹中创建一个名为cloudfront-signed-urls的文件夹。您需要将您的private_key.pem文件复制到该文件夹中。

注意:当您卸载插件时,此文件夹(以及您的私钥)将被删除。

.pem文件不能添加为.env变量。

在Twig中的使用

使用文件名和300秒的过期延迟的基本用法。
{{ signUrl(myAssetTest.getUrl(), 300) }}
不使用过期延迟 - 它将使用您的回退配置值或默认值。
{{ signUrl(myAssetTest.getUrl()) }}
使用完整的URL - 仅当您在配置文件中未提供cloudfrontDistributionUrl设置值时,此用例才有效。
{% set myAssetUrl = 'https://my-distribution-url.cloudfront.net' ~  myAssetTest.getUrl() %}
{{ signUrl(myAssetUrl, 300) }}

S3存储和Craft CMS控制面板

AWS

  1. 在AWS上创建一个非公开的S3存储桶(以及一个用于Craft CMS的IAM用户,该用户具有程序访问权限)。
  2. 创建一个Cloudfront分发,将Restrict Viewer Access设置为

控制面板

  1. 安装Pixel & Tonic的AWS S3插件
  2. 在控制面板中创建一个新的文件系统(设置/文件系统),使用Amazon S3文件系统类型。
  3. 关闭此卷中的文件系统具有公共URL的开关。
  4. 添加您的S3存储桶凭据、子文件夹和设置。
  5. 留空CloudFront Distribution IDCloudFront Path Prefix字段。
  6. 创建一个新的卷(设置/资产),并将您的私有文件系统选择为资产文件系统

注意:当用户(通常是管理员)在控制面板中登录时,他可以通过点击下载按钮打开/查看资产,但他无法预览它们(因为资产没有公共URL)。

模板受限区域 - 示例

  1. 根据登录的用户组创建模板(或任何您想要的条件)。
  2. 使用Twig函数显示资产。
  3. "web"中的任何人都不能够查看文件。URL将在您输入的持续时间后过期。用户可以复制并分享URL给其他人,但这唯一的方式是共享/访问已签名的URL。

由加拿大3e joueur提供