약 10분

Amazon S3에 파일을 업로드하고 공개 링크를 공유하는 방법

Amazon S3는 객체 스토리지의 원조이며, Aktar의 Amazon S3 프리셋으로 연결할 수 있습니다. 신경 써야 할 부분은 공개 접근뿐입니다. S3는 기본적으로 공개 접근을 막기 때문에, 공개 읽기용 버킷 정책을 추가하거나 버킷 앞에 CloudFront를 둬야 합니다.

준비물

  • AWS 계정
  • S3 버킷과 IAM 사용자를 만들 수 있는 권한
  • Mac에 설치된 Aktar

단계별 안내

  1. 1

    버킷 만들기

    S3 콘솔에서 Create bucket을 클릭하고, 전 세계에서 고유한 이름과 가까운 리전(예: eu-central-1)을 고릅니다. 객체 소유권은 기본값인 "Bucket owner enforced"로 두어도 됩니다. Aktar는 ACL을 쓰지 않습니다.

  2. 2

    공개 읽기 허용하기

    방법 A, 버킷 정책: 버킷의 Permissions 탭에서 공개 버킷 정책을 차단하는 "Block public access" 설정을 끈 다음, 다음 버킷 정책을 추가합니다(YOUR-BUCKET을 바꿔 넣으세요).

    {
      "Version": "2012-10-17",
      "Statement": [{
        "Sid": "PublicRead",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:GetObject",
        "Resource": "arn:aws:s3:::YOUR-BUCKET/*"
      }]
    }

    방법 B, CloudFront: 버킷은 비공개로 두고, 버킷을 오리진으로 하는 CloudFront 배포를 만듭니다(Origin Access Control 사용). 이렇게 하면 사용자 도메인에서 HTTPS와 캐싱을 쓸 수 있습니다.

  3. 3

    Aktar용 IAM 사용자 만들기

    IAM에서 사용자를 만들고, 해당 버킷에서 Aktar에 필요한 작업만 허용하는 정책을 연결합니다.

    {
      "Version": "2012-10-17",
      "Statement": [
        { "Effect": "Allow", "Action": "s3:ListBucket",
          "Resource": "arn:aws:s3:::YOUR-BUCKET" },
        { "Effect": "Allow",
          "Action": ["s3:PutObject", "s3:GetObject", "s3:DeleteObject"],
          "Resource": "arn:aws:s3:::YOUR-BUCKET/*" }
      ]
    }

    그런 다음 사용자의 액세스 키를 만들고 Access Key ID와 Secret Access Key를 복사합니다.

  4. 4

    Aktar에 대상 추가하기

    설정 → 대상 → 대상 추가에서 Amazon S3를 고르고 아래 값을 입력합니다. 엔드포인트와 리전은 버킷의 리전과 일치해야 합니다.

  5. 5

    테스트하고 저장하기

    연결 테스트를 클릭해 버킷에 쓸 수 있는지, 공개 URL이 파일을 제공하는지 확인한 다음 저장을 클릭합니다.

Aktar 설정 값

설정 → 대상 → 대상 추가에서 다음 값을 입력하세요. 항목 이름은 앱과 같습니다.

항목예시 값
제공업체Amazon S3
엔드포인트https://s3.eu-central-1.amazonaws.com버킷의 리전을 사용하세요.
리전eu-central-1
액세스 키 IDAKIA…IAM 사용자에서 가져옵니다.
비밀 액세스 키••••••••
버킷your-bucket
공개 기본 URLyour-bucket.s3.eu-central-1.amazonaws.com또는 CloudFront 도메인.

팁

  • 링크를 공개적으로 공유한다면 사용자 도메인을 붙인 CloudFront를 권장합니다. 캐싱을 쓸 수 있고 버킷 자체는 비공개로 둘 수 있습니다.
  • IAM 정책은 버킷 하나로 범위를 제한하세요. Aktar에는 계정 전체 권한이 필요 없습니다.
  • 업로드 속도를 위해 가까운 리전을 고르고, CDN을 쓰지 않는다면 링크를 열어 볼 사람들과 가까운 리전을 고르세요.
  • 저절로 삭제되는 업로드를 쓰려면 IAM 사용자에게 버킷에 대한 s3:GetLifecycleConfiguration 및 s3:PutLifecycleConfiguration 권한도 있어야 합니다. 아니면 수명 주기 규칙을 직접 추가하세요. 만료 업로드를 참고하세요.

문제 해결

연결 테스트에서 리전이나 리디렉션 관련 오류가 나와요

엔드포인트와 리전은 버킷을 만든 리전과 일치해야 합니다. 예를 들어 https://s3.eu-central-1.amazonaws.com와 eu-central-1입니다.

업로드가 Access Denied로 실패해요

IAM 사용자에게 YOUR-BUCKET/*에 대한 s3:PutObject와 버킷 자체에 대한 s3:ListBucket 권한이 필요합니다.

링크를 열면 403이 나와요

버킷 정책이 없거나 아직 "Block public access"에 막혀 있거나, CloudFront가 버킷을 읽지 못하는 상태입니다. Access Denied 오류를 참고하세요.

아직 해결되지 않았나요?FAQ를 살펴보거나 GitHub에서 물어보세요.