troisiemejoueur / cloudfront-signed-urls
为 S3 Craft CMS 存储创建 AWS Cloudfront 签名 URL
Requires
- aws/aws-sdk-php: ^3.20.0
- craftcms/cms: ^3.0|^4.0
Requires (Dev)
- craftcms/rector: dev-main
This package is auto-updated.
Last update: 2024-09-29 01:51:32 UTC
README
Cloudfront 签名 URL for Craft CMS
此插件在 Twig 模板中提供 AWS Cloudfront 签名 URL。
要求
此插件需要 Craft CMS 3.x。
安装
要安装插件,请按照以下说明操作。
-
打开您的终端并转到您的 Craft 项目。
cd /path/to/project
-
然后告诉 Composer 加载插件。
composer require troisiemejoueur/cloudfront-signed-urls
-
在控制面板中,转到设置 → 插件,并单击 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 在页面加载时创建,并在您输入的持续时间后过期。
配置文件
插件附带一个 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
- 在AWS上创建一个非公开的S3存储桶(以及一个用于Craft CMS的IAM用户,该用户具有程序访问权限)。
- 创建一个Cloudfront分发,将
Restrict Viewer Access
设置为是
。
控制面板
- 安装Pixel & Tonic的AWS S3插件。
- 在控制面板中创建一个新的文件系统(设置/文件系统),使用Amazon S3文件系统类型。
- 关闭
此卷中的文件系统具有公共URL
的开关。 - 添加您的S3存储桶凭据、子文件夹和设置。
- 留空
CloudFront Distribution ID
和CloudFront Path Prefix
字段。 - 创建一个新的卷(设置/资产),并将您的私有文件系统选择为
资产文件系统
注意:当用户(通常是管理员)在控制面板中登录时,他可以通过点击下载按钮打开/查看资产,但他无法预览它们(因为资产没有公共URL)。
模板受限区域 - 示例
- 根据登录的用户组创建模板(或任何您想要的条件)。
- 使用Twig函数显示资产。
- "web"中的任何人都不能够查看文件。URL将在您输入的持续时间后过期。用户可以复制并分享URL给其他人,但这唯一的方式是共享/访问已签名的URL。
由加拿大3e joueur提供