2013-07-03 1 views
4

나는 많은 것을 시도하고 패배를 인정합니다. (나는 많은 응답을 읽었지만 아무도 지금까지 나를 도왔습니다.) Cloudfont에 보관 된 파일의 서명 된 URL을 설정하려고합니다. S3 용으로 서명 된 URL을 만들 수 있지만 Cloudfront에서 사용할 수있는 항목이 없습니다. CloudFront를 위해 나는하여 AWS SDK에서 다음 사용하고 있습니다 : Cloudfront 서명 된 URL을 사용하여 C#

var url = AmazonCloudFrontUrlSigner.GetCannedSignedURL( AmazonCloudFrontUrlSigner.Protocol.http, "cdn.coffeebreakgrooves.com", privateKey, 
file, cloudFrontKeyPairID, DateTime.Now.AddDays(2)); 

나는 서명 된 URL이 생성 얻을 그러나 나는 그것이 내가 설정 원산지 액세스 신원 제안에 대해 내가 읽은 링크를, 다음의 경우 액세스가 거부 얻을. 그래서 나는 그 기원 액세스 신원 내 배포 설정 및 설정에 가서 선택 :

  • 제한 버킷 액세스 : 예
  • 원산지 액세스 정체성 : 예, 업데이트 버킷 정책 : 기존 신원
  • 부여 읽기 권한을 사용하여

그렇다면 S3의 ACL에 대한 설정에 관계없이 모든 파일을 Cloudfront에서 공개적으로 사용할 수 있습니다 (따라서 file.txt에 Cloudfront를 통해 액세스 할 수있는 S3의 사용자에게는 권한이 없음). 서명 된 URL이 작동하는지 여부를 알려주지 않습니다. 다운로드는 쿼리 문자열 유무와 상관없이 작동하며 파일은 공개적으로 사용할 수있게되었습니다. 기본적으로 파일을 비공개로 설정하고 서명 된 URL로 다운로드 할 수있는 방법은 무엇입니까 (내 서명 방법이 맞습니까?). 생성 된 버킷 정책을 삭제하면 액세스가 다시 제한됩니다. 나는 원래의 액세스 ID가 서명 된 URL로만 버킷에 액세스 할 수 있도록 버킷 정책을 설정하는 방법을 알아야한다고 생각합니다. 아마도.

사전 도움을 주셔서 감사합니다.

답변

4

잠시 휴식을 취하고 여기에서 다시 생각해 보면 내가 잘못 가고있는 부분이 있습니다. 동일한 배포 물에서 일부 콘텐츠를 보안 설정하거나 다른 콘텐츠를 보호하지 못할 수 있습니다. 전체 분배가 보안되는지 여부. 여기 내 해결책이있다.

  1. 설정 AWS
  2. 에 보안 항목에 대한 새로운 버킷은 '제한 뷰어 액세스'와 '예'앞으로 조회 '에 대해 예 1에서 만든 새 버킷 CloudFront를 가리키는에서 새로운 유통을 추가하고 선택 문자열 '(특정 다운로드에 콘텐츠 처리 기능을 추가하는 기능 만 추가)'신뢰할 수있는 서명자 '에 대해'자체 '를 선택하십시오.
  3. AWS 상단에서 사용자의 이름을 클릭하고'보안 자격 증명 '을 선택한 다음'계속 '우리는 위의'자아 '를 선택했습니다.
  4. 'CloudFront Key Pairs'를 클릭하고 'Create New Key Pair'를 선택하십시오. 제공되는 키 파일을 다운로드하면 (다시 제공되지 않음) 개인 키가 필요합니다. 또한 필요에 따라 액세스 키 ID를 복사하십시오.
  5. 보안 배포 옆의 i를 클릭하고 원본 탭을 클릭 한 다음 '원본 생성'을 클릭하거나 원본을 선택하고 편집을 선택한 다음 양동이 액세스 제한, 새 ID 만들기에서 '예'를 선택하십시오. 예 업데이트 버킷 정책. 이는 기본적으로 Cloudfront가 버킷에 대해 인증 할 수 있음을 의미합니다.
  6. 프로젝트에서 NuGet으로 이동하여 'AWS'를 검색하고 AWS SDK를 설치하십시오.
  7. 복사 개인 키 파일이 내용 처리와 보안 URL을 생성하기 위해 다음과 같은 당 일부 코드를 추가
  8. 웹 사이트 루트 위의 폴더 (PK의 * ** .PEM) (또는 어딘가에 상대적으로 개인) 머리글.

나는 PHP에 https://forums.aws.amazon.com/thread.jspa?messageID=421768에 스텐의 게시물의 도움없이이 문제를 해결할 수 없었다 '라고해야하지만, 올바른 방향으로 절 지적했다 : 그 사람을 도움이 나는 희망

string cloudFrontKeyPairID = "myaccesskeyidfrompoint4"; 
string pathtokey = HttpContext.Current.Request.MapPath("~/").Replace("wwwroot", "ssl") + "pk-mykeyidfilenamesavedin4.pem"; 
FileInfo privateKey = new FileInfo(pathtokey); 
string file = "folder/mytrack.mp3?response-content-disposition=" + 
HttpContext.Current.Server.UrlEncode("attachment;filename='a_filename_with_no_spaces.mp3'"); 
//I can't figure out how to do spaces or odd characters. 

url = AmazonCloudFrontUrlSigner.GetCannedSignedURL(
    AmazonCloudFrontUrlSigner.Protocol.http, 
    "customcname.mydomain.com", 
    privateKey, 
    file, 
    cloudFrontKeyPairID, 
    DateTime.Now.AddDays(2)); 

어쨌든 저는 이것을 개인 자료로 사용하게 될 것입니다! '뷰어 액세스 제한'이 설정되지 않은 기존 버킷에서 Origin Access Identity를 활성화하면 본질적으로 버킷의 모든 항목에 대한 사용 권한이 열립니다. 이것은 바람직하지 않을 수도 있습니다! 내가 잘못 알고 있으면 알려줘.이게 다 내게 새로운 소식이야.

관련 문제