「アプリ設定 | GROWI Docs」にあるとおりなんだけれど、何故か毎回引っかかってしまうのでメモする。
目次
環境
- docker-composeで作ったもので確認
- ホストOS: macOS 14, IntelとAppleSilicon両方確認
- Growi v7.0.x
やること
graph LR
user(ユーザ)
growi(Growi)
s3(S3)
growi -.->|アップロード| s3
s3 -->|アクセス許可| growi -->|ファイル| user
Growiを通じてS3上のファイルをやりとりできるようにするための、Growi-S3間の権限設定をそれぞれすることになる。
- AWS側
- 保存するバケットを作成する(今回はap-northeast-1)
- バケットのパブリックブロックの設定を変更する
- バケットにアクセスするためのIAMポリシーをアタッチしたIAMユーザを作成する
- IAMユーザの認証キーを作成する
- 保存するバケットを作成する(今回はap-northeast-1)
- Growi側
- docker-compose.ymlで
S3_OBJECT_ACL=private
の設定をする - アプリ設定で認証の設定をする
- docker-compose.ymlで
手順
AWS: バケットの作成
東京リージョンでバケットを作成する。
バケットのブロックパブリックアクセスのうち、「新しいアクセスコントロールリスト (ACL) を介して付与されたバケットとオブジェクトへのパブリックアクセスをブロックする」のみオフにする(下図)。作成時に設定できるが、作成後にも「アクセス許可」タブより設定変更可能。
AWS: IAMの作成
作成したバケットにアクセスするためのIAMポリシーを作成する。ポリシーは以下。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject"
],
"Resource": [
"arn:aws:s3:::<作成したバケット名>/*"
]
}
]
}
IAMユーザを作成し、作成したポリシーをアタッチする。
IAMユーザの認証キーを作成して保存する。
Growi: docker-compose.yml の編集
docker-compose.yml に環境変数として S3_OBJECT_ACL=private
を追加。
version: '3'
services:
app:
build:
context: .
dockerfile: ./Dockerfile
ports:
- 127.0.0.1:13000:3000 # localhost only by default
links:
- mongo:mongo
- elasticsearch:elasticsearch
depends_on:
- mongo
- elasticsearch
environment:
- MONGO_URI=mongodb://mongo:27017/growi
- ELASTICSEARCH_URI=http://elasticsearch:9200/growi
- PASSWORD_SEED=changeme
- S3_OBJECT_ACL=private # ---------------ここに追加-------------------
# - FILE_UPLOAD=mongodb # activate this line if you use MongoDB GridFS rather than AWS
# - FILE_UPLOAD=local
コンテナを再起動する。
Growi: アプリの設定
管理者画面の「アプリ設定」より「ファイルアップロード設定」で、ファイルアップロード方法としてAWS(S3)を選択し、リージョン、バケット名、キーの設定をして更新する。
所感
マニュアルに書いてあるんだけど、いつも何かを忘れて謎に引っかかるので、メモした。だいたいdocker-compose.ymlの編集を忘れる模様。
Growi便利だよね。
コメント