# 공개 접근 없는 S3 스토리지

**URL:** https://meta.discourse.org/t/s3-storage-with-no-public-access/251560
**Category:** Feature
**Tags:** s3
**Created:** [1월 12, 2023, 1:46오후 UTC](https://meta.discourse.org/t/s3-storage-with-no-public-access/251560 "2023-01-12T13:46:37Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![varuncjain](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/varuncjain/32/289013_2.png) [@varuncjain](https://meta.discourse.org/u/varuncjain)
#### Post date: [1월 12, 2023, 1:46오후 UTC](https://meta.discourse.org/t/s3-storage-with-no-public-access/251560/1 "2023-01-12T13:46:38Z")

</div>

우리의 설정에서는 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로 설정된 상태로 업로드되는 것이 더 합리적이지 않나요?

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [1월 12, 2023, 2:21오후 UTC](https://meta.discourse.org/t/s3-storage-with-no-public-access/251560/2 "2023-01-12T14:21:06Z")

</div>

완전히 비공개 인스턴스에서도 로고와 파비콘과 같은 설정 업로드는 로그인 페이지에 표시되며 공개된 것으로 간주됩니다. 이러한 리소스는 인증 없이 다운로드하는 도구들, 예를 들어 OpenGraph 임베드를 사용하는 웹사이트, PWA 설치, Google 검색 결과 등에 의해 자주 요청됩니다.

---

<div class="post-metadata">

### Author: ![varuncjain](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/varuncjain/32/289013_2.png) [@varuncjain](https://meta.discourse.org/u/varuncjain)
#### Post date: [1월 12, 2023, 2:31오후 UTC](https://meta.discourse.org/t/s3-storage-with-no-public-access/251560/3 "2023-01-12T14:31:01Z")

</div>

그렇다면 이 설정을 “_s3 use iam profile_” 플래그가 활성화되어 있는지에 따라 의존하도록 만드는 것이 더 합리적일까요? IAM 프로필 사용이 활성화되면, 버킷에 공개 접근이 없음을 확인하는 셈이 되므로, 비공개 ACL을 사용하여 접근해야 합니다. 제가 틀린 것일 수 있지만, 버킷을 공개할 수 없는 경우가 아니라면 Discourse에서 이 설정을 사용할 이유는 없다고 생각합니다.

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [1월 12, 2023, 2:36오후 UTC](https://meta.discourse.org/t/s3-storage-with-no-public-access/251560/4 "2023-01-12T14:36:25Z")

</div>

> [@varuncjain](#):
>
> 그 경우, “_s3 use iam profile_” 플래그가 활성화되어 있느냐 아니냐에 따라 이 기능을 종속시키는 것이 더 합리적일까요? IAM 프로필 사용이 활성화되어 있다면, 버킷에 공개 액세스가 없음을 어느 정도 확인하는 셈이 되니까요.

아니요, 그런 추론은 성립하지 않습니다.

여기 있는 이 사이트는 `s3 use iam profile`을 사용하면서도 공개 버킷을 가지고 있습니다. 두 요소 사이에 어떤 상관관계도 전혀 없습니다.

`s3 use iam profile`은 단순히 "키/시크릿 쌍을 직접 전달하고 싶지 않다. AWS 내부 API를 통해 자동으로 가져다 주라"는 의미일 뿐입니다.

---

<div class="post-metadata">

### Author: ![varuncjain](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/varuncjain/32/289013_2.png) [@varuncjain](https://meta.discourse.org/u/varuncjain)
#### Post date: [1월 12, 2023, 2:40오후 UTC](https://meta.discourse.org/t/s3-storage-with-no-public-access/251560/5 "2023-01-12T14:40:03Z")

</div>

그렇게 말씀하시니, 우리에게는 S3 버킷 ACL을 사적으로 지정할 수 있는 별도의 설정 플래그를 추가하는 것이 유일한 해결책이 될 것 같은데, 이 말이 비논리적으로 들리나요?

---

<div class="post-metadata">

### Author: ![Falco](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/falco/32/179432_2.png) [@Falco](https://meta.discourse.org/u/Falco)
#### Post date: [1월 12, 2023, 2:54오후 UTC](https://meta.discourse.org/t/s3-storage-with-no-public-access/251560/6 "2023-01-12T14:54:37Z")

</div>

그것은用户的需求를 충족시킬 수 있지만, 공개 버킷에서 파일 목록 표시를 비활성화하고 실제 파일에는 개별적인 비공개 ACL을 적용하는 방식이 지금까지 우리에게 잘 작동하고 있기 때문에 로드맵에서 이를 계획하고 있지는 않습니다.

사용 사례에서 공개 버킷에 비공개 파일을 두는 것이 불가능한 이유는 무엇인가요?

---

<div class="post-metadata">

### Author: ![varuncjain](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/varuncjain/32/289013_2.png) [@varuncjain](https://meta.discourse.org/u/varuncjain)
#### Post date: [1월 13, 2023, 7:54오전 UTC](https://meta.discourse.org/t/s3-storage-with-no-public-access/251560/7 "2023-01-13T07:54:49Z")

</div>

> [@Falco](#):
>
> 왜 사용 사례에서 공개 버킷에 비공개 파일을 두는 것이 불가능합니까?

우리의 경우 이는 기업 수준의 결정입니다. 버킷을 포함한 모든 자산은 비공개로 유지되어야 하며, IAM 역할을 통해 접근 가능하도록 설정되어야 합니다. 버킷 객체를 Discourse 프론트엔드에 전달하기 위해 동일한 EKS 클러스터에서 실행되는 S3 프록시 애플리케이션을 구축하고, Discourse 설정에서 이를 CDN으로 구성했습니다. 이제 남은 것은 로고와 같은 사이트 설정 자산을 비공개로 업로드할 수 있는 기능입니다. 이를 위해 이 플래그가 필요합니다. 기본적으로 Discourse는 이러한 자산을 공개로 업로드하려 하는데, 이 새로운 플래그를 사용하여 이를 오버라이드하고 싶습니다.

> <https://github.com/discourse/discourse/pull/19852>
>
> Introduce new site setting for specifying if S3 bucket policy blocks all public …access

---

<div class="post-metadata">

### Author: ![phil22](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/phil22/32/248480_2.png) [@phil22](https://meta.discourse.org/u/phil22)
#### Post date: [7월 8, 2025, 2:12오후 UTC](https://meta.discourse.org/t/s3-storage-with-no-public-access/251560/11 "2025-07-08T14:12:07Z")

</div>

저희 Discourse 인스턴스에 훌륭한 [secure uploads](https://meta.discourse.org/t/secure-uploads/meta/140017/1) 기능을 사용하고 있으며, 현재는 정상적으로 작동하고 있습니다. 다만 버킷에 대한 모든 공개 접근을 차단하는 기능이 지원되면 좋겠습니다.

최근 AWS Security Hub에서 지적한 ‘AWS Foundational Security Best Practices’ 관련 이슈들을 해결하기 위해 노력하고 있습니다. 그중 하나는 'S3 일반 목적 버킷은 공개 접근을 차단해야 한다’는 내용입니다.

'AWS Foundational Security Best Practices’를 적용하는 과정에서 동일한 문제에 직면하는 기업들이 꽤 있을 것으로 생각합니다.

이 이슈가 조만간 우선순위로 처리되지는 않을 것 같지만, 이 스레드를 발견하고 +1을 더하고 싶어 이렇게 글을 남깁니다.

AWS FSBP 권장 사항은 다음과 같습니다: [Security Hub CSPM controls for Amazon S3 - AWS Security Hub](https://docs.aws.amazon.com/securityhub/latest/userguide/s3-controls.html#s3-8)
