pixelfusion/silverstripe-s3

为Flysystem添加SilverStripe对S3适配器的支持

安装: 982

依赖: 0

建议者: 0

安全: 0

星星: 0

关注者: 1

分支: 25

开放问题: 1

类型:silverstripe-vendormodule

1.0.1 2021-08-09 03:24 UTC

This package is auto-updated.

Last update: 2024-08-29 00:40:34 UTC


README

SilverStripe模块,用于将资产存储在S3而不是本地文件系统中。

注意:此模块目前尚未实现任何类型的受保护资产的存储桶策略。您需要使用AWS存储桶策略自行实现。

安装

运行以下命令

composer require pixelfusion/silverstripe-s3

环境设置

该模块需要设置一些环境变量。完整详情请参阅SilverStripeS3AdapterTrait特性。以下为必选项。

  • AWS_REGION:您的S3存储桶所在的AWS区域(例如eu-central-1
  • AWS_BUCKET_NAME:要存储资产的S3存储桶名称。

如果运行在EC2实例之外,则需要指定API密钥和秘密。

  • AWS_ACCESS_KEY_ID:具有访问您想访问的存储桶的权限的AWS访问密钥
  • AWS_SECRET_ACCESS_KEY:与访问密钥对应的AWS秘密

在EC2实例之外运行时的示例YML配置

---
Only:
envvarset: AWS_BUCKET_NAME
After:
- '#assetsflysystem'
---
SilverStripe\Core\Injector\Injector:
Aws\S3\S3Client:
  constructor:
    configuration:
      region: '`AWS_REGION`'
      version: latest
      credentials:
        key: '`AWS_ACCESS_KEY_ID`'
        secret: '`AWS_SECRET_ACCESS_KEY`'

为S3运行CDN时的示例YML配置

---
Only:
envvarset: AWS_BUCKET_NAME
After:
- '#assetsflysystem'
---
SilverStripe\Core\Injector\Injector:
Aws\S3\S3Client:
  constructor:
    configuration:
      region: '`AWS_REGION`'
      version: latest
      endpoint: '`AWS_CDN`'
      bucket_endpoint: true
      credentials:
        key: '`AWS_ACCESS_KEY_ID`'
        secret: '`AWS_SECRET_ACCESS_KEY`'

请确保您已在云前端分发中设置替代域名下的CDN URL,并且A记录已指向您的分发。

请确保您的替代域名具有SSL证书。

安装

这将安装适用于您的其他Composer需求的模块的最新适用版本。

注意:当前此操作会立即用基于S3的存储替换SilverStripe内置的本地资产存储。任何以前已上传到现有资产存储的文件将不可用(尽管它们不会丢失 - 可以运行composer remove silverstripe/s3来移除模块并恢复访问)。

配置

SilverStripe将资产分类为“公开”或“受保护”。公开资产可以自由下载,而受保护的资产(例如尚未发布的资产)不应直接访问。

默认情况下,该模块通过通过Web服务器将受保护文件的内容流式传输到浏览器(而不是直接链接到S3)来支持这一点。为确保受保护资产无法访问,请确保您设置适当的存储桶策略(以下是一个未经测试的示例)。

配置S3

“受保护”的S3资产存储应使用标准的AWS IAM策略进行保护,该策略不允许匿名用户访问,但仍允许对公共和受保护文件执行s3:GetObject操作。受保护文件将从AWS流式传输,因此用户不需要直接访问它们。因此,以下类似的存储桶策略可能是有用的。

请确保将下面的<bucket-name>替换为适当的值。

注意:下面的策略尚未经过广泛测试 - 欢迎反馈。

{
    "Policy": {
		"Version":"2012-10-17",
		"Statement":[
			{
				"Sid":"AddPerm",
				"Effect":"Allow",
				"Principal":"*",
				"Action":"s3:GetObject",
				"Resource":"arn:aws:s3:::<bucket-name>/public/*"
			}
		]
	}
}

对于开发者

如果您希望在本地进行一些开发,请阅读为Silverstripe S3模块设置本地沙盒

卸载

  • 运行 composer remove pixelfusion/silverstripe-s3 来移除该模块。