2017-10-12 3 views
1

Liip Imagine 번들로 Amazon S3 캐시 해결 프로그램을 설정하고 브라우저에서 디렉토리 콘텐츠가 표시되지 않도록 버킷에 올바른 권한을 설정하는 데 문제가 있습니다.Amazon S3 정책 + Liip Imagine Cache Resolver

내 시나리오 :

이 사이트는 S3에 꽤 많은 이미지 자산을 가지고 - 일부는 수동으로 업로드 많은 사람들이 또한 Vich 업로드 번들을 사용하여 CMS를 통해 업로드. 필자는 Imagine 번들을 사용하여 config.yml 파일에 정의 된 필터 (미리보기 및 미리보기와 같은 항목)에 정의 된 필터를 기반으로 캐시 된 이미지를 확인한 다음 필터 뒤에 이름이 지정된 S3 버킷의 별도 디렉토리에 저장합니다. 즉, 원본을 S3에 업로드 -> S3에 저장된 캐시 파일을 자동으로 확인합니다. 훌륭하게 작동합니다.

문제점

처음 요청했을 때 캐시 된 파일을 확인할 수 있었던 유일한 방법은 버킷에 활짝 열려 공개 권한이 있어야하는 것입니다. 이 작업을 수행하면 S3에서 전체 버킷 내용 (또는 적어도 처음 1000 개 레코드)을 나열하는 XML 파일의 방식으로 "버킷 탐색기"를 노출하기 때문에 좋지 않습니다. 모든 파일을 공개해야하지만, 신제품 출시 전에이 고객 사이트를 킁킁 거리는 사람들에게 문제가있어 특정 시점에 이들 파일을 공개 할 수는 없습니다. 나는 최소한 파일 이름 목록을 원하지 않는다.

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

그리고 제가 발견 한 것은이다 : 나는

나는 다음과 같은 버킷 정책과 함께 버킷 ACL의 설정의 여러 가지 조합을 시도했습니다 시도했다

공용 액세스 권한이있는 "Everyone"그룹에 "목록 개체"권한이 부여되지 않으면 캐싱 된 파일이 확인되지 않습니다. 해당 권한 (브라우저에서 XML 파일을 볼 수 없게 함)을 해제하자마자 캐시되지 않은 파일을 더 이상 업로드에서 확인할 수 없습니다.

enter image description here

내가

을 시도했습니다 뭐가 나는 또한 웹 사이트로 버킷을 구성 시도하고 내가 여기 몇 가지 제안에 따라, 루트에 기본 index.html 파일을 업로드했습니다. 이것은 아무것도하지 않았다. 어쩌면 내가 뭔가를 놓친 것 같아.

또한 캐시 해결 폴더가 버킷에서 개체 목록 사용 권한이 해제 된 상태에서 S3 내에서 공개되었음을 확인했습니다. 이것도 작동하지 않았다.

오류

목록이 해결 시도가

Error executing "CreateBucket" on "https://[MY_BUCKET].s3.amazonaws.com/"; 
AWS HTTP error: Client error: `PUT https://[MY_BUCKET].s3.amazonaws.com/` 
resulted in a `403 Forbidden` response: 

<?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code> 
<Message>Access Denied</Message><RequestId>94D939 (truncated...) 
AccessDenied (client): Access Denied - <?xml version="1.0" encoding="UTF-8"?> 
<Error><Code>AccessDenied</Code><Message>Access Denied</Message> 
<RequestId>[HIDDEN]</RequestId> 
<HostId>[HIDDEN]</HostId> 
</Error> 

버킷 구조는이

[MY_BUCKET] 
    -thumbnails // <-- where thumbnails are resolved 
    -previews // <-- where previews are resolved 
    -uploads // <-- primary uploads parent dir 
    --products // <-- where products are uploaded 
    --other // <-- where other files are uploaded 
    --images // <-- where images are manually uploaded 
처럼 장소를 취한다 때 권한을 다음과 같은 오류가 생성됩니다 제거 객체

내 가정은 리졸버가 c를 읽어야한다는 것입니다. 파일이 해석되었는지 여부를 결정하기 위해 디렉토리의 내용.

필요한 경우 심포니의 구성 정보를 제공 할 수는 있지만 문제가 없으므로 필요하지 않다고 생각했습니다.

궁극적으로 나는 리졸버가 그 일을하고 버킷 내용에 대한 브라우저 액세스를 막을 수 있어야합니다.

답변

0

나는 이것을 알아 냈다.

... 
"Resource":[ 
    "arn:aws:s3:::[MY_BUCKET]/*" 
] 

행 :

.... 
"Resource":[ 
    "arn:aws:s3:::*" 
] 
그것은에서 자원 노드 변경은 IAM 수준의 정책에 대한 조정을 필요