# 보안 업로드

**URL:** https://meta.discourse.org/t/secure-uploads/140017
**Category:** Announcements
**Tags:** secure-uploads
**Created:** [1월 29, 2020, 5:14오전 UTC](https://meta.discourse.org/t/secure-uploads/140017 "2020-01-29T05:14:56Z")
**Posts on this page:** 1
**Showing post:** 1

<div class="post-metadata">

### Author: ![martin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/martin/32/491371_2.png) [@martin](https://meta.discourse.org/u/martin)
#### Post date: [1월 29, 2020, 5:14오전 UTC](https://meta.discourse.org/t/secure-uploads/140017/1 "2020-01-29T05:14:56Z")

</div>

2월에 출시된 [Discourse 2.4](https://meta.discourse.org/t/discourse-version-2-4/108194)에는 Secure Uploads 기능이 추가되었습니다. 이 기능은 Discourse 인스턴스 내의 모든 업로드(이미지, 비디오, 오디오, 텍스트, PDF, ZIP 등)에 대해 더 높은 수준의 보안을 제공합니다.

### 사전 요구 사항

사이트에서 S3 업로드가 활성화되어 있어야 하며, 다음 설정을 채워 넣어야 합니다:

- S3 액세스 키 ID
- S3 시크릿 액세스 키
- S3 리전
- S3 업로드 버킷

또한 공개 버킷 정책(Public bucket policy)이 없는 S3 버킷을 사용해야 하며, 기존 모든 업로드에 public-read S3 ACL이 설정되어 있는지 확인해야 합니다. 자세한 내용은 아래 “Secure Uploads 활성화” 섹션을 참고하세요.

이러한 사전 요구 사항이 충족되면 “secure uploads” 사이트 설정을 활성화할 수 있습니다.

### Secure Uploads 활성화

🐉 ⚠ **위험 구역** ⚠ 🐉

**이것은 고급 기능이며, Enterprise 티어 외에는 지원이 제한적일 수 있습니다. 전문가 사용자만 Secure Uploads를 활성화하세요.**

* * *

Secure Uploads를 활성화하려면 다음 단계를 따르세요:

1. S3 업로드가 설정되어 있는지 확인합니다.
2. S3 버킷에 공개 버킷 정책이 있는지 확인합니다. 있다면 추가 단계(4단계)가 필요합니다.
3. `uploads:sync_s3_acls` rake 작업을 실행합니다. 이를 통해 모든 업로드에 S3에서 올바른 ACL이 설정되었는지 확인합니다. 이 단계는 중요합니다. 이 작업을 수행하기 전에 4단계를 수행하면 일부 업로드가 포럼에서 접근할 수 없게 될 수 있습니다.
4. 1단계에서 공개 버킷 정책이 있었다면 버킷에서 해당 정책을 제거합니다.
5. “secure uploads” 사이트 설정을 활성화합니다. 선택적으로 “prevent anons from downloading files” 사이트 설정을 활성화하여匿名用户가 공개 게시물의 첨부 파일을 다운로드하는 것을 방지할 수 있습니다. 이 시점 이후의 업로드는 아래 조건에 따라 보안으로 표시될 수 있습니다.
6. 모든 업로드를 소급하여 분석하고 필요시 보안으로 표시하려면 `uploads:secure_upload_analyse_and_update` rake 작업을 실행합니다.

#### ❗ S3 버킷 정책 관련 참고 사항 ❗

업로드하는 버킷에 공개 버킷 정책이 _없는지_ 확인해야 합니다. 공개 버킷 정책에는 다음과 같은 내용이 포함됩니다:

```plaintext
{
    "Version": "2012-10-17",
    "Id": "ComputedBucketPolicy",
    "Statement": [
        {
            "Sid": "AllowWorldRead",
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::your-bucket-name/*"
        }
    ]
}

```

여기서 중요한 부분은 `*`에 대해 `GetObject`를 허용하고 있다는 점으로, 이는 버킷 내의 모든 것을 누구나 다운로드할 수 있음을 의미합니다. 정책이 공개적인지 여부를 나타내는 라벨도 표시됩니다:

 ![image](https://global.discourse-cdn.com/meta/original/3X/9/7/97bf7947a5071ac0a22b382fac63aec0d5f9dbf2.png)

여기서 설정은 _변경하지 말아야_ 합니다. 아래 사진은 “Block public access” 탭의 이상적인 상태를 보여줍니다:

 ![image](https://global.discourse-cdn.com/meta/original/3X/0/a/0a95b227b19a2821ca5bfd498aa0fca829d263db.png)

### 동작 방식

Secure Uploads를 활성화하면 Composer를 통해 업로드된 모든 파일은 다음 기준에 따라 보안으로 표시되거나 그렇지 않게 됩니다:

- “login required” 사이트 설정이 활성화되어 있으면 _모든 업로드가 보안으로 표시_되며,匿名用户는 접근할 수 없습니다.
- 개인 메시지(Personal Message) 내에서 무언가를 업로드하면 보안으로 표시됩니다.
- 비공개 카테고리 내의 토픽에서 무언가를 업로드하면 보안으로 표시됩니다.

S3의 업로드는 private [ACL](https://docs.aws.amazon.com/AmazonS3/latest/dev/acl-overview.html)을 가지므로, S3 파일에 대한 직접 링크는 403 접근 거부 오류를 발생시킵니다. 보안 업로드에 대한 모든 접근은 S3 [presigned URL](https://docs.aws.amazon.com/AmazonS3/latest/dev/ShareObjectPreSignedURL.html)을 통해 이루어집니다. 그러나 사용자에게는 이것이 숨겨지며, 업로드가 보안이면 `/secure-uploads/meta/` Discourse URL을 통해 참조됩니다.

### 권한 및 접근 제어

`/secure-uploads/meta/` URL은 현재 사용자가 미디어에 접근할 수 있는지 여부를 결정하고, 허용되면 해당 미디어를 제공합니다. 업로드가 생성될 때, 해당 업로드가 처음 나타나는 게시물이 “접근 제어 게시물(access control post)”로 설정되며, 모든 권한은 해당 게시물을 기반으로 합니다.

- “login required” 사이트 설정이 활성화되어 있으면,匿名用户는 URL에 접근할 때 항상 404 오류를 받게 됩니다.
- 접근 제어 게시물이 개인 메시지인 미디어에 접근하려면, 사용자는 해당 개인 메시지 토픽의 구성원이어야 하며, 그렇지 않으면 403 오류를 받게 됩니다.
- 접근 제어 게시물이 비공개 카테고리 내 토픽에 있는 미디어에 접근하려면, 사용자는 해당 카테고리에 대한 접근 권한이 있어야 하며, 그렇지 않으면 403 오류를 받게 됩니다.

`/secure-uploads/meta/` URL을 게시물과 토픽 사이에서 복사해 붙여넣는 것은 지혜롭지 않습니다. Discourse 포럼 내의 사용자는 서로 다른 접근 권한을 가지고 있기 때문입니다. 새로운 업로드는 항상 Composer를 통해 생성해야 합니다. Oneboxes와 핫링크된 이미지도 Secure Uploads 규칙을 따릅니다. 사이트 설정 업로드, 이모지, 테마 업로드는 공개되어야 하므로 Secure Uploads의 영향을 _받지 않습니다_.

⚠ 접근 제어 게시물이 삭제되면, 첨부된 업로드는 _더 이상 접근할 수 없게_ 됩니다. ⚠

### Secure Uploads가 포함된 게시물 이동

“접근 제어 게시물”을 다른 보안 컨텍스트 사이에서 이동하면 첨부된 업로드가 보안으로 변경되거나 보안이 해제될 수 있습니다. 업로드의 보안 상태를 변경할 수 있는 상황은 다음과 같습니다:

- 토픽 카테고리 변경. 토픽 내 모든 게시물을 순회하여 업로드 보안 상태를 그에 따라 업데이트합니다.
- 공개 토픽과 개인 메시지 사이에서 토픽 변경. 위와 동일한 작업을 수행합니다.
- 게시물을 다른 기존 또는 새 토픽으로 이동. 대상 토픽에 대해 위와 동일한 작업을 수행합니다.

### 이메일 내 Secure Uploads

이메일에 보안 이미지 임베드는 기본적으로 활성화되어 있습니다. 추가 제어를 위해 다음 사이트 설정을 구성할 수 있습니다:

- `secure_uploads_allow_embed_images_in_emails`: 이메일 내 보안 이미지를 삭제(마스킹)하려면 이 설정을 비활성화합니다.
- `secure_uploads_max_email_embed_image_size_kb`: 임베드할 보안 이미지의 크기 상한으로, 기본값은 1mb이며 이메일이 너무 커지지 않도록 합니다. 최대 10mb입니다. `email_total_attachment_size_limit_kb`와 함께 작동합니다.

보안 이미지는 이메일 첨부 파일로 추가되고 `cid:` URL 형식을 사용하여 임베드됩니다. 이는 이메일 클라이언트에서 base64 URL 지원이 여전히 불안정하기 때문입니다.

`secure_uploads_allow_embed_images_in_emails`가 활성화되어 있지 않거나 이미지가 크기 제한을 초과하기 시작하면, 보안 이미지(임베드되지 않는 보안 오디오 및 비디오 포함) 대신 다음을 보게 됩니다:

![image](https://cdck-file-uploads-global.s3.dualstack.us-west-2.amazonaws.com/meta/optimized/3X/5/c/5caa0dcd0c6fdf0ff271b853df47fe4ce909f762_2_690x46.png)

### 호스팅 고객

현재 Secure Uploads는 Enterprise 플랜 고객에게만 제공됩니다. 자세한 내용은 [우리에게 문의](mailto:team@discourse.org)하세요.

---

_[View the full topic](https://meta.discourse.org/t/secure-uploads/140017)._
