2014-12-16 3 views
0

나는 carrierwave와 fog를 사용하는 S3 지원 이미지 모델을 가지고 있습니다. 이미지를 rmagick으로 처리하고 다른 버전을 Amazon S3에 업로드합니다. 더 작은 버전. 두 개의 더 작은 버전을 공개적으로 액세스 할 수있게하려고하지만 S3의 다른 폴더에 저장된 것과 같은 원래 버전이 다른 액세스 또는 이와 유사한 방식으로 보호되므로 내 응용 프로그램 백엔드에서 액세스 할 수 있지만 액세스 할 수는 없습니다. 일반인은 다른 두 버전 만 있어야합니다.아마존 S3에서 공공 액세스에서 하나의 carrierwave 이미지 버전을 보호하는 방법

이것은 두 가지 질문으로 다시 시작한다고 생각합니다. 반송파가 버킷의 다른 위치 또는 다른 버킷에 이미지 버전을 저장하도록 구성하십시오. 응용 프로그램 프론트 엔드에서 model.image_url (: small)을 사용할 수 있고 다른 곳에서 model.image_url을 사용하여 원본을 검색 할 수 있도록 요청되는 이미지 버전에 따라 사용할 다양한 액세스로 carrierwave/fog를 구성하십시오 , 다른 액세스를 사용합니다.

다른 아이디어가 있으십니까?

답변

3

좋아, 그래서 나는이 작업을 수행하기 위해 관리 : 나는 특정 폴더가 작은 버전의 것이며, 이는 공개되며, 나머지는 개인이 될 것이며, carrierwave를 구성한다는 나의 버킷에 대한 정책을 만들어

이미지를 다른 경로에 저장합니다.

먼저 carrierwave에서 기본 설정 인 store_dir (기본 버전을 저장 했음)을 설정하면 원하는대로 경로를 변경할 수 있습니다.

def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}/public" 
end 

그리고 버전 블록 내부에 나는이 같은 여기서 store_dir 방법 오버라이드 (override) :

version :thumb do 
    process :resize_to_fill => [200, 200] 
    process :optimize 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}/private" 
    end 

end 

당신이 기본 버전에 대한이 같은 것을하게 될 겁니다이 방법 :

/uploads/model/attribute/id/private/000564cf-c7e9-3d7b-bf7f-48dd-1910667-e0bbd8b3.jpg 

을 이 버전의 다른 버전에서는 기본 store_dir을 덮어 씁니다.

/uploads/model/attribute/id/public/thumb_000564cf-c7e9-3d7b-bf7f-48dd-1910667-e0bbd8b3.jpg 
/uploads/model/attribute/id/public/display_000564cf-c7e9-3d7b-bf7f-48dd-1910667-e0bbd8b3.jpg 

그런 다음 경로를 통해 와일드 카드를 사용하여 공용 폴더에 공용 액세스 권한을 부여하면서 amazon s3 버킷에 정책을 정의합니다.

{ 
    "Version": "2008-10-17", 
    "Statement": [ 
     { 
     "Sid": "AllowPublicRead", 
     "Effect": "Allow", 
     "Principal": { 
     "AWS": "*" 
     }, 
     "Action": "s3:GetObject", 
     "Resource": "arn:aws:s3:::BUCKETNAME/uploads/*/*/*/public/*" 
     } 
    ] 
} 

동일한 요구 사항을 가진 다른 사용자에게 도움이되기를 바랍니다.

관련 문제