CloudFront Password Protect로 보안 웹사이트를 구축하는 방법

게시 됨: 2023-01-15

AWS(Amazon Web Service)는 클라우드 컴퓨팅 시장에서 41.5%로 가장 큰 점유율을 차지하고 있는 현재 가장 인기 있는 클라우드 컴퓨팅 서비스입니다. 이를 통해 기업과 개인은 Amazon 서버에서 애플리케이션과 웹사이트를 저렴하게 호스팅할 수 있습니다.

AWS의 중요한 구성 요소 중 하나는 Amazon CloudFront입니다. AWS에서 호스팅하는 웹 사이트 방문자의 로딩 속도를 최대화하도록 구축된 콘텐츠 전송 네트워크(CDN)입니다.

하지만 CloudFront를 사용하여 암호 프롬프트 뒤에 웹 사이트를 잠글 수 있다는 것을 알고 계십니까? 이 안내서는 AWS CloudFront 암호 보호 기능을 사용하여 웹 사이트를 보호하는 방법을 보여줍니다.

  • CloudFront 암호 보호란 무엇입니까?
  • 암호로 CloudFront 웹 사이트를 보호하는 방법
    • [이메일 보호] 사용
    • AWS S3 및 Lambda를 활용하여 기본 인증 추가

CloudFront 암호 보호란 무엇입니까?

Amazon CloudFront는 전 세계의 다양한 데이터 센터를 통해 콘텐츠를 제공하여 애플리케이션 및 웹 사이트에 대한 사용자의 액세스 속도를 높입니다. 사용자가 귀하의 웹사이트에 접속하면 그의 지리적 위치에 가장 가까운 중앙에서 콘텐츠가 전달됩니다. 결과적으로 로딩 속도가 빨라집니다.

Amazon CloudFront를 사용하여 콘텐츠를 배포하는 한 시스템의 암호 보호 기능을 사용할 수 있습니다. 웹 사이트가 S3 버킷 또는 EC2 인스턴스 내부에서 호스팅되는 경우 시스템은 계속 작동합니다.

다음은 표준 CloudFront 시스템의 도식입니다. 웹 방문자(오른쪽)의 요청이 CloudFront 및 기타 하위 시스템을 거쳐 오리진(콘텐츠가 저장되는 위치)에 도달하는 방식을 설명합니다. 오리진에서 데이터가 검색되어 방문자에게 다시 전달됩니다.

ppwp-cloudfront-암호-보호-시스템

특히 CloudFront에 대해 처음 들어본 사람들에게는 혼란스러워 보일 수 있습니다. 그러나 이 차트와 해당 구성 요소를 이해하는 것은 이후 섹션에서 매우 중요합니다.

암호로 CloudFront 웹 사이트를 보호하는 방법

여러 가지 방법을 사용하여 CloudFront 제공 웹 사이트에 암호 프롬프트를 푸시할 수 있습니다. 이 가이드에서는 두 가지 방법을 보여드리겠습니다.

[이메일 보호] 사용

[email protected] 은 CloudFront의 기능으로 고객에게 더 가까운 곳에서 사용자 지정 코드를 실행할 수 있습니다. 그렇게 하면 로딩 성능이 향상됩니다. [email protected] 배포를 선택하면 방문자가 웹 사이트의 콘텐츠 검색을 요청할 때마다 먼저 이 기능을 거쳐야 합니다.

사용자가 올바른 암호를 제공하는 경우에만 작동하도록 [이메일 보호]를 수정한다면 웹 사이트에 대한 암호 보호 계층이 어느 정도 있는 것입니다.

이것이 이 CloudFront 보안 방법의 기본 아이디어입니다.

ppwp-람다-에지

1단계: [email protected] 기능 배포

[email protected]은 us-east-1 지역(버지니아 북부)에만 배포되는 Lambda 함수입니다. 따라서 배포하려면 올바른 지역에 로그인해야 합니다.

  1. AWS 계정에 로그인한 다음 Create Function 을 클릭하십시오.
  2. 함수 이름을 입력하라는 메시지가 표시됩니다. BasicAuth 와 같은 기본적인 것을 선택하십시오. 런타임으로 Node.js 12.x 를 선택합니다.
  3. Create Function 버튼을 눌러 생성을 완료합니다.
  4. 이제 함수 코드 창에 index.js 라는 파일이 표시됩니다. 그것을 클릭하면 기본 Lambda 코드가 표시됩니다. 다음 사용자 지정 코드로 바꿉니다.
 '엄격하게 사용';

exports.handler = (이벤트, 컨텍스트, 콜백) => {

// 인증 자격 증명
var i = 0, authStrings = [], authCredentials = [
'사용자1:사용자비밀번호',
];

// 기본 인증 문자열 구성
authCredentials.forEach(요소 => {
authStrings[i] = "기본" + new Buffer(element).toString('base64');
i++;
}
);

// 요청 및 요청 헤더 가져오기
const 요청 = event.Records[0].cf.request;
const 헤더 = request.headers;

// 기본 인증 필요
if (typeof headers.authorization == '정의되지 않음' ||
!authStrings.includes(headers.authorization[0].value)) {

const 응답 = {
상태: '401',
statusDescription: '승인되지 않음',
본문: '승인되지 않음',
헤더: {
'www-인증': [ {key: 'WWW-인증',
값: '기본 영역="인증"'} ]
},
};

콜백(널, 응답);
}

// 인증이 통과되면 요청 처리를 계속합니다.
콜백(널, 요청);
};

기본 로그인 자격 증명은 이 함수의 다음 줄에 저장됩니다.

 '사용자1:사용자비밀번호',

형식은 "계정:암호" 입니다. 원하는 것으로 변경할 수 있습니다. 또한 이 줄을 복제하여 더 많은 로그인 자격 증명을 추가할 수도 있습니다.

5. 사용자 지정 코드가 교체되면 배포 를 클릭하여 코드를 푸시합니다.

6. 상단의 작업 메뉴로 이동하여 새 버전 게시 를 클릭한 다음 게시 를 선택합니다. 거기에서 설정을 변경하지 마십시오.

7. 화면 오른쪽 상단에서 ARN 문자열을 찾아 복사합니다. 이 단계는 매우 중요합니다. ARN 문자열은 다음과 같습니다.

 아른:aws:람다:us-east-1:XXXXXXXXXXXX:함수:기본 인증:1

2단계: 신뢰 관계 설정

  1. IAM 콘솔로 이동하여 로그인합니다.
  2. [email protected] 기능의 이름을 입력합니다(이전 단계의 BasicAuth ).
  3. 신뢰 관계 탭을 찾아 편집 을 클릭합니다. 내부 코드를 다음으로 바꿉니다.
 {
"버전": "2012-10-17",
"성명": [
{
"효과": "허용",
"주요한": {
"서비스": [
"lambda.amazonaws.com",
"edgelambda.amazonaws.com"
]
},
"작업": "sts:AssumeRole"
}
]
}

4. 신뢰 정책 업데이트 를 클릭하여 프로세스를 완료합니다.

3단계: 캐시 동작 구성

  1. CloudFront로 이동하여 로그인합니다. 암호로 잠그려는 CloudFront 제공 웹사이트를 클릭합니다.
  2. 동작 을 선택하고 URL 경로 패턴 확인란을 찾아 선택합니다. 계속해서 편집 을 클릭합니다.
  3. Lambda 함수 연결 이라는 섹션을 찾습니다. 스크롤 다운 메뉴를 찾아 Select Event Type , Viewer Request 를 검색합니다. 앞의 1단계에서 복사한 ARN 문자열을 붙여넣습니다.
  4. 예, 편집 을 누릅니다. 그런 다음 CloudFront를 재부팅하고 새 설정을 다시 로드하는 데 약 5분이 걸립니다.

4단계: 웹사이트 재확인

CloudFront가 재부팅된 후 웹 사이트를 방문하십시오. 로그인 프롬프트가 표시되면 성공한 것입니다.

다음과 같아야 합니다.

ppwp-lambda-cloudfront-암호-보호

AWS S3 및 Lambda를 활용하여 기본 인증 추가

이 방법에서는 AWS S3와 Lambda의 결합된 접근 방식을 사용하여 위에서 수행한 것과 동일한 작업을 수행합니다. 즉, 웹 사이트에 대한 기본 인증 양식을 만듭니다.

1단계: S3 버킷 생성

AWS S3(Simple Storage Service)는 AWS의 클라우드 스토리지 솔루션입니다. Amazon 서버에 모든 종류의 데이터를 저장할 수 있는 기능을 제공합니다. S3에서 "버킷"은 개체(콘텐츠 데이터)에 대한 액세스를 포함하고 제어합니다.

  1. AWS Management Console을 통해 버킷을 생성할 수 있습니다. S3 탭을 클릭한 다음 버킷 생성 을 클릭합니다.
  2. 이름과 호스팅 지역을 입력합니다(더 쉬운 테스트를 위해 가장 가까운 지역 선택). 만들기 를 클릭하면 끝입니다!

2단계: 테스트 파일 만들기

  1. 시작 코드가 포함된 간단한 index.html 파일과 같은 테스트 파일을 만듭니다.
 <h2>안녕하세요</h2>

2. Objects 메뉴를 통해 이 파일을 새로 생성된 버킷에 업로드할 수 있습니다.

3단계: CloudFront Distro 생성

  1. CloudFront의 대시보드로 이동하여 배포 생성 을 누릅니다.
  2. 방금 생성한 S3 버킷으로 Origin 도메인 을 선택합니다. 원하는 대로 버킷의 정책 및 OAI(Origin Access Identity) 설정을 업데이트합니다.
  3. 선택적 기본 루트 개체 상자에 보호하려는 파일( index.html )의 이름을 입력합니다.
  4. CloudFront 배포판을 만들고 짜잔! 이제 CloudFront 엔드포인트가 생겼습니다.

4단계: 사용자 지정 Lambda 함수 생성

  1. 이제 AWS Management Console에서 Lambda 탭으로 이동하고 Create function 을 누릅니다.
  2. Blueprint 사용 옵션을 선택하고 CloudFront 를 검색한 다음 CloudFront-response-generation 템플릿을 선택합니다. 선택했으면 구성 을 클릭합니다.
  3. 다음 화면에서 함수 이름(AuthenticationTest)과 역할 이름(S3-Auth)을 입력합니다. 실행 역할 을 AWS 정책 템플릿에서 새 역할 생성 으로 선택합니다.
  4. 그런 다음 방금 생성한 CloudFront 엔드포인트의 세부 정보를 배포 상자에 붙여넣습니다. 캐시 동작 에서 * 로 두십시오. 마지막으로 CloudFront 이벤트 에서 뷰어 요청 을 선택합니다.
  5. 배포 를 클릭하여 새 기능을 만듭니다.

5단계: Lambda 함수 수정

  1. 기본 Lambda 코드를 이 사용자 지정 코드로 바꿉니다.
 '엄격하게 사용';
exports.handler = (이벤트, 컨텍스트, 콜백) => {

// 요청 및 요청 헤더 가져오기
const 요청 = event.Records[0].cf.request;
const 헤더 = request.headers;

// 인증 구성
const authUser = '사용자 이름';
const authPass = '비밀번호';

// 기본 인증 문자열 구성
const authString = '기본' + new Buffer(authUser + ':' + authPass).toString('base64');

// 기본 인증 필요
if (typeof headers.authorization == '정의되지 않음' || headers.authorization[0].value != authString) {
const body = '무단';
const 응답 = {
상태: '401',
statusDescription: '승인되지 않음',
몸: 몸,
헤더: {
'www-인증': [{key: 'WWW-인증', 값:'기본'}]
},
};
콜백(널, 응답);
}

// 인증이 통과되면 요청 처리를 계속합니다.
콜백(널, 요청);
};

원하는 대로 사용자 이름과 암호를 변경할 수 있습니다.

2. 상단의 배포 를 클릭하여 코드를 저장합니다. 그런 다음 작업 으로 이동 하고 [email protected]에 배포 하여 코드를 푸시합니다.

3. CloudFront 엔드포인트 주소를 배포 상자에 붙여넣고 캐시 동작* 로 두고 CloudFront 이벤트뷰어 요청 으로 선택합니다. 완료되면 새 CloudFront 트리거가 생성됩니다.

4. 그런 다음 배포하고 5분 동안 기다립니다.

5. 웹사이트를 다시 방문하십시오. 이제 CloudFront 인증 시스템에 따라 로그인 프롬프트가 표시됩니다.

CloudFront 암호 보호 기능을 최대한 활용

웹 관리자가 웹 사이트를 잠그려는 데에는 여러 가지 이유가 있습니다. 웹 사이트에 유지 관리, 보안 강화 또는 무단 액세스 방지가 필요하기 때문일 수 있습니다.

어떤 경우이든 이 안내서가 CloudFront 암호 보호를 사용하여 암호 체계를 성공적으로 배포하는 데 도움이 되기를 바랍니다.

웹 사이트를 암호로 보호하는 또 다른 방법은 PPWP Pro를 사용하는 것입니다. 확인 해봐!