2012-01-17 8 views
4

GetSessionToken/GetFederationToken과 함께 Amazon S3에 임시 세션을 사용하고 있습니다. 각 사용자가 버킷을 사용하도록 생각하고 초기화 할 수 있도록 각 사용자가 S3에 업로드 할 수있는 10K 명 이상의 사용자가 필요합니다. 업로드) 권한을 각 사용자별로 설정하지만, Amazon 계정 당 버킷 수에 제한이 있기 때문에 저 아이디어를 버렸습니다.Amazon S3 권한

공개 읽기 허용과 같은 권한을 설정하고 업로드하려는 객체의 키에있는 접두사가있는 경우에만 업로드 할 수 있습니까?

예를 들어 사용자 이름 X가 파일을 업로드하면 키는 X_filename과 같아야합니다.

또는 다른 어떤 방법 으로든 보안을 유지할 수 있습니다. 이는 모바일 앱용이며 파일 업로드시 자체 서버를 거치지 않으려합니다.

편집 :

나는 다음과 같은 정책을 GetFederationToken 작업을 시도했습니다

"{ 
    "Statement":[{ 
     "Effect":"Allow", 
     "Action":["s3:PutObject","s3:GetObject","s3:GetObjectVersion", 
     "s3:DeleteObject",\"s3:DeleteObjectVersion"], 
     "Resource":"arn:aws:s3:::user.uploads/john/*" 
    } 
    ] 
}" 

나는 세션과 버킷 S3에 user.uploads과 폴더 존

그러나 어떤 업로드가 키 john/filename을 버킷 user.uploads에 대한 액세스가 거부됨에 따라 액세스가 거부 됨 "

+0

이 방법은 효과가 있지만 모든 것을 확인해야합니다. 예를 들어 정책이 잘못되었을 수 있습니다. - 내부 테스트를 위해 크게 열어 본 다음 좁히십시오. 또한 iOS에서 amazon S3 로의 모든 호출은 반송 된 페더레이션 토큰을 사용해야합니다. –

답변

5

Amazon's Identity and Access Management (IAM) 서비스가 무엇인지 요 너는 필요하다. documentation에는 많은 예제가 있으며 그 중 일부는 시나리오와 일치합니다. 워드 프로세서

:

예 5는 : 파트너가이 예에서 기업 버킷

의 특정 부분으로 파일을 드롭 할 수 있도록 허용, 우리가 만들 수는 WidgetCo라는 그룹을 나타냅니다 파트너 회사 인 경우 액세스가 필요한 파트너 회사에서 특정 사용자 (또는 애플리케이션)의 사용자를 만든 다음 사용자를 그룹에 추가하십시오.

우리는 다음 그룹에게 기업 버킷에 다음 디렉토리로 PutObject 액세스를 제공하는 정책 첨부 : my_corporate_bucket/업로드/widgetco합니다.

우리는 또한 버킷 아무것도 일에서 WidgetCo 그룹을 방지하려면, 그래서 우리는 AWS 계정에있는 아마존 S3 리소스에 PutObject를 제외한 모든 아마존 S3 작업 권한을 거부하는 문을 추가합니다. 이는 AWS 계정의 다른 곳에서 사용자가 Amazon S3에 대한 광범위한 액세스를 허용하는 광범위한 정책이있는 경우에만 필요합니다.

{ 
    "Statement":[{ 
     "Effect":"Allow", 
     "Action":"s3:PutObject", 
     "Resource":"arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*" 
    }, 
    { 
     "Effect":"Deny", 
     "NotAction":"s3:PutObject", 
     "Resource":["arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*"] 
    }, 
    { 
     "Effect":"Deny", 
     "Action":"s3:*", 
     "NotResource": ”arn:aws:s3:::my_corporate_bucket/uploads/widgetco/*" 
    }] 
} 

각 사용자에 대한 새로운 정체성을 만들고 필요에 따라 하위 폴더 (접두사)에 대한 액세스를 제어하는 ​​것을 사용한다.

+0

예하지만 그룹을 사용하지 않습니다 AWS 사용자 AWS 외부에서 관리되는 페더레이션 사용자를 사용하지 않습니다 \ – forcewill

+0

페더레이션 사용자는 모든 사용자와 동일한 정책 문서를 사용할 수 있습니다. 그러나 정책 의사는 작아야합니다. 위의 예는 연합을 위해 작동 할 수도 있지만 시도하지 않았습니다. 따라서 각 사용자에 대해 사용자 정의 된 정책 문서를 만듭니다. 공식 AWS iOS SDK를 사용해야합니다. 세션 토큰을 지원합니다. –