우리의 설정에서는 AWS EKS 클러스터에서 Discourse를 실행하고 있으며, 미디어 저장용으로 같은 AWS 계정 내의 S3 버킷을 사용할 예정입니다. Discourse를 실행하는 EKS 포드에는 Kubernetes 서비스 계정과 IAM 역할이 제공됩니다. S3 버킷은 모든 공개 액세스가 차단되어 있으며, ACL을 통해 버킷 소유자(AWS 계정)에게만 읽기/쓰기 액세스 권한이 부여되어 있습니다.
Discourse 사이트 설정에서 “enabled s3 uploads”, “s3 use iam profile”, "secure media uploads"를 활성화하면 Discourse 토픽에 미디어를 업로드하는 용도로 이 설정을 사용할 수 있습니다. 그러나 UploadCreator 모듈의 검사로 인해 로고 등 사이트 설정 관련 업로드는 S3 API의 private_acl 매개변수가 "false"로 설정된 상태로 미디어 업로드를 시도하기 때문에 실패합니다. "secure media uploads"가 활성화된 경우, 모든 콘텐츠가 private_acl이 true로 설정된 상태로 업로드되는 것이 더 합리적이지 않나요?
완전히 비공개 인스턴스에서도 로고와 파비콘과 같은 설정 업로드는 로그인 페이지에 표시되며 공개된 것으로 간주됩니다. 이러한 리소스는 인증 없이 다운로드하는 도구들, 예를 들어 OpenGraph 임베드를 사용하는 웹사이트, PWA 설치, Google 검색 결과 등에 의해 자주 요청됩니다.
그렇다면 이 설정을 “s3 use iam profile” 플래그가 활성화되어 있는지에 따라 의존하도록 만드는 것이 더 합리적일까요? IAM 프로필 사용이 활성화되면, 버킷에 공개 접근이 없음을 확인하는 셈이 되므로, 비공개 ACL을 사용하여 접근해야 합니다. 제가 틀린 것일 수 있지만, 버킷을 공개할 수 없는 경우가 아니라면 Discourse에서 이 설정을 사용할 이유는 없다고 생각합니다.
우리의 경우 이는 기업 수준의 결정입니다. 버킷을 포함한 모든 자산은 비공개로 유지되어야 하며, IAM 역할을 통해 접근 가능하도록 설정되어야 합니다. 버킷 객체를 Discourse 프론트엔드에 전달하기 위해 동일한 EKS 클러스터에서 실행되는 S3 프록시 애플리케이션을 구축하고, Discourse 설정에서 이를 CDN으로 구성했습니다. 이제 남은 것은 로고와 같은 사이트 설정 자산을 비공개로 업로드할 수 있는 기능입니다. 이를 위해 이 플래그가 필요합니다. 기본적으로 Discourse는 이러한 자산을 공개로 업로드하려 하는데, 이 새로운 플래그를 사용하여 이를 오버라이드하고 싶습니다.