달력

082018  이전 다음

  •  
  •  
  •  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  •  

Building a Low Cost Web Page - Authentication


S3를 이용해서 web page를 만들면서 사실 이 문제를 해결하는데 대부분의 시간을 소모했습니다.  이것 저것 해본것 중 제일 간단한 방법을 소개하도록 하겠습니다.


S3Auth 라는 open source project을 이용하는 방법인데, 설명이 제대로 되어 있지 않아 많이 애를 먹었습니다.  이 방법을 사용하기 위해 미리 알아 두어야 할 사항들은 다음과 같습니다.

  • 자신의 앞으로 등록된 domain이 있어야만 합니다.
  • S3의 bucket당 한개만의 username & password를 사용할 수 있습니다.
  • Bucket 전체에 보안이 걸립니다.  Open access로 유지할 부분은 별도의 bucket으로 잡아두세요.


벌어지는 과정은 대충 아래와 같습니다.  예를 들어 web browser 에서 goojs.us/test.htm 이라고 주소를 입력하면 goojs.us라는 domain이 AWS의 Route 53로 일단 가겠지요.  (사전에 설정한 것에 따라) Route 53에게 이걸 relay.s3auth.com 로 보내면, relay.s3auth.com은 (미리 등록된 내용을 이용해서) AWS IAM 이라는 security access control 을 통해 S3에 있는 test.htm을 보내달라고 요청합니다.  그럼 S3가 route.s3auth.com에 결과를 전달하고 이것이 최종적으로 web browser로 보내집니다.



자 그럼, 설정을 시작 해볼까요.  


AWS S3에 보안용 Bucket 만들기


제 경우에는 open access로 쓰는 goojs.us 외에 (위의 flow chart에서는 주소를 가급적 짧게 하느라고 goojs.us가 보안처리된 것으로 가정한 것이니 헷갈리지 마세요) 제 개인용 보안 bucket으로 secure.goojs.us, 타인과 공유할 보안 bucket으로 download.goojs.us 이렇게 2개를 추가로 만들었습니다.  Open access용과는 달리 보안용 bucket에는 "Static Web Hosting" 이나 "Add bucket policy"를 하지 마세요.



AWS Route 53에서 s3auth.com으로 보내기 설정


이미 설정된 goojs.us라는 hosted zone으로 가서 "Create Record Set"을 선택합니다.



보안용 bucket을 위해 (Name: secure.goojs.us & download.goojs.usType: CNAME, Alias: No, Value: relay.s3auth.com 으로 각각 record set을 만들어 줍니다.  즉 goojs.us로 오는 것은 직접 S3로 보내주고, secure.goojs.us & download.goojs.us는 relay.s3auth.com으로 보내주라고 설정한 것이지요.




AWS IAM에 암호 등록


보안용 bucket들은 앞에서 bucket policy를 공개로 설정하지 않았기 때문에 access를 하려면 암호가 필요합니다.  AWS 계정을 만들때 사용된 내 master password 외에 user를 추가할때 사용하는 것이 IAM 이라는 service입니다. 



제 경우에는 개인용 보안 bucket용으로 family라는 username을, 타인과 공유할 보안 bucket용으로 guest라는 username을 등록했습니다.  "Generate an access key"라는 option이 check되었는지 확인하세요.



그러면 아래와 같이 사용자가 성공적으로 생성되었다는 창이 뜹니다.  여기서 "Show User Security Credentials"를 누르고 20자인 Access Key ID와 40자인 Secret Access Key를 메모장에 copy/paste해서 기록해 두세요.



그 다음에는 내가 원하는 password를 지정합니다.  Option에서 "Assign a custom password"를 선택하세요.



끝으로 "Permissions" tab으로 이동해 "Attach User Policy"를 click하세요.  Option중에 "Custom Policy" -> "Select"를 선택하고 적당한 Policy Name을 입력하고 Policy Document 항목란에 다음 내용을 추가하세요.  여기서 secure_bucket_name은 제경우 secure.goojs.us 혹은 download.goojs.us 가 되겠습니다. 

{

   "Statement": [

      {

         "Effect": "Allow",

         "Action": ["s3:GetObject", "s3:GetBucketWebsite"],

         "Resource": [

           "arn:aws:s3:::secure_bucket_name/*"

         ]

      }

   ]

}


한 username 으로 여러개의 bucket을 access할 때에는 다음과 같이 합니다. 

{

   "Statement": [

      {

         "Effect": "Allow",

         "Action": ["s3:GetObject", "s3:GetBucketWebsite"],

         "Resource": [

           "arn:aws:s3:::secure_bucket_name_1/*",

           "arn:aws:s3:::secure_bucket_name_2/*",

           "arn:aws:s3:::secure_bucket_name_3/*"

         ]

      }

   ]

}



S3Auth에 정보 등록


이제 http://www.s3auth.com/ 으로 이동해 보겠습니다.  이 site를 이용하려면 Facebook이나 Gmail account로 login을 해야 하는데 정보 유출 우려로 찜찜하실 수 있으니 임시 account를 하나 만들어 이 목적으로만 사용하기를 추천합니다. (통상 쓰는 account 에서 logout하시고 임시 account로 login한 상태에서 진행하세요)



등록 양식에 따라 S3 의 secure bucket information을 넣오주고 "Submit"하면 끝납니다.  여기서 submit form은 AWS key (master) 를 넣으라고 하지만 IAM에서 생성한 user 용을 넣는것이 맞으니 조심하세요. (잘못된 내용인데 수정을 하지 않네요)




.htpasswd File 만들기


마지막으로 .htpasswd 라는 file을 만들어 S3 bucket 의 root  upload해야합니다.  


한줄짜리 ASCII text file인데 내용은 http://aspirine.org/htpasswd_en.html  로 가서 아래와 같이 username (예: family) & password (예: wearehappy) 를 입력하고 algorithm은 "SHA-1"을 선택하여 "Generate htpasswd content"를 누르면 encrypted된 결과가 나옵니다.  그 내용을 copy/past하여 .htpasswd를 만드세요.   여기서 username & password는 앞서 IAM에서 입력한 것들입니다.



[관련 글]


Posted by 더가까이

댓글을 달아 주세요