craftcms/aws-s3

Craft CMS 的 Amazon S3 集成

安装次数1,330,230

依赖项: 25

建议者: 0

安全性: 0

星标: 60

关注者: 7

分支: 28

公开问题: 17

类型:craft-plugin

2.2.1 2024-03-23 01:31 UTC

README

Amazon S3 for Craft CMS icon

为 Craft CMS 提供 Amazon S3

此插件为 Amazon S3 提供了与 Craft CMS 的集成。

要求

此插件需要 Craft CMS 4.0.0+ 或 5.0.0+。

安装

您可以从插件商店或使用 Composer 安装此插件。

从插件商店

转到项目控制面板中的插件商店,搜索“Amazon S3”,然后在弹出的模态窗口中点击“安装”。

使用 Composer

打开终端并运行以下命令

# go to the project directory
cd /path/to/my-project.test

# tell Composer to load the plugin
composer require craftcms/aws-s3

# tell Craft to install the plugin
./craft plugin/install aws-s3

设置

要创建一个新的 Amazon S3 文件系统以用于您的卷,请访问“设置”→“文件系统”,然后点击“新建文件系统”。将“文件系统类型”设置为“Amazon S3”,并根据需要配置。

💡 基础 URL、访问密钥 ID、秘密访问密钥、存储桶、区域、子文件夹、CloudFront 分发 ID 和 CloudFront 路径前缀设置可以设置为环境变量。有关更多信息,请参阅 Craft 文档中的 环境配置

AWS IAM 权限

设置此插件使用的 IAM 权限取决于您想要提供的选项。

通常,您可能需要一个 IAM 策略,授予以下操作在您将要使用的 资源(s)

  • s3:GetBucketLocation
  • s3:ListBucket
  • s3:PutObject
  • s3:GetObject
  • s3:DeleteObject
  • s3:GetObjectAcl
  • s3:PutObjectAcl

如果您想允许网站管理员列出并选择要使用的存储桶,您还必须将 s3:ListAllMyBuckets 权限添加到 arn:aws:s3::: 资源,并将 s3:GetBucketLocation 权限添加到特定的存储桶资源。请注意,如果存储桶缺少 s3:GetBucketLocation 权限,则它将不会出现在存储桶选择列表中。

如果您使用 Cloudfront 并希望 Craft 代表您使文件无效,您还需要以下权限

  • cloudfront:ListInvalidations
  • cloudfront:GetInvalidation
  • cloudfront:CreateInvalidation

一个典型的 IAM 策略,授予用户选择存储桶的权限,可以看起来像这样

{
"Version": "2012-10-17",
"Statement": [
    {
        "Effect": "Allow",
        "Action": [
            "s3:ListAllMyBuckets"
        ],
        "Resource": "*"
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket",
            "s3:PutObject",
            "s3:GetObject",
            "s3:DeleteObject",
            "s3:GetObjectAcl",
            "s3:PutObjectAcl",
            "cloudfront:ListInvalidations",
            "cloudfront:GetInvalidation",
            "cloudfront:CreateInvalidation"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname/*",
            "arn:aws:cloudfront::accountid:distribution/distributionid"
        ]
    },
    {
        "Effect": "Allow",
        "Action": [
            "s3:GetBucketLocation",
            "s3:ListBucket"
        ],
        "Resource": [
            "arn:aws:s3:::bucketname"
        ]
    }
]
}

使用自动焦点检测

此插件可以使用 AWS Rekognition 服务检测图像中的面部并相应地自动设置焦点。这需要图像是 jpg 或 png 文件。您可以通过文件系统设置中的“尝试自动设置焦点?”启用此功能。

⚠️ 使用此功能将产生额外的费用,并需要允许 rekognition:DetectFaces 操作。

使用 OIDC 假设角色

此插件还具有使用环境变量AWS_WEB_IDENTITY_TOKEN_FILEAWS_ROLE_ARN提供的角色假设运行时角色的能力。如果您没有向AWS提供凭证并且这些环境变量存在,则插件将尝试使用CredentialProvider::assumeRoleWithWebIdentityCredentialProvider创建与AWS的连接。这是允许在Kubernetes中托管Craft CMS(例如)进行细粒度访问控制的理想方式。有关更多详细信息,请参阅AWS的IAM文档

在ECS中运行的作业

此插件与ECS任务的IAM角色兼容,如果可用,将自动使用环境变量AWS_CONTAINER_CREDENTIALS_RELATIVE_URI。有关更多详细信息,请参阅AWS的IAM Roles for Tasks文档