API Gateway에서 백엔드 인증을 위한 SSL 인증서 생성 및 구성
API Gateway를 사용하면 SSL 인증서를 생성한 다음, 백엔드에서 퍼블릭 키를 사용하여 백엔드 시스템에 대한 HTTP 요청의 출처가 API Gateway인지 확인할 수 있습니다. 이렇게 하면 백엔드에 공개적으로 액세스할 수 있는 경우에도 HTTP 백엔드가 Amazon API Gateway에서 시작된 요청만 제어 및 수락하도록 할 수 있습니다.
참고
일부 백엔드 서버는 API Gateway처럼 SSL 클라이언트 인증을 지원하지 않으며, SSL 인증서 오류를 반환할 수 있습니다. 호환되지 않는 백엔드 서버의 목록은 Amazon API Gateway 중요 정보를 참조하십시오.
API Gateway에서 생성된 SSL 인증서는 자체 서명되며 인증서의 퍼블릭 키만 API Gateway 콘솔에 표시되거나 API를 통해서 볼 수 있습니다.
주제
API Gateway 콘솔을 사용하여 클라이언트 인증서 생성
https://console.aws.amazon.com/apigateway/
에서 Amazon API Gateway 콘솔을 엽니다. REST API를 선택합니다.
기본 탐색 창에서 클라이언트 인증서를 선택합니다.
클라이언트 인증서 페이지에서 인증서 생성을 선택합니다.
-
(선택 사항) 설명에 설명을 입력합니다.
-
인증서 생성을 선택하여 인증서를 생성합니다. API Gateway는 새로운 인증서를 생성하고 새 인증서 GUID를 PEM 인코딩된 퍼블릭 키와 함께 반환합니다.
이제 인증서를 사용하도록 API를 구성할 준비가 되었습니다.
SSL 인증서를 사용하도록 API 구성
이 지침에서는 API Gateway 콘솔을 사용하여 클라이언트 인증서 생성을 이미 완료한 것으로 가정합니다.
-
클라이언트 인증서를 사용하고자 하는 API를 API Gateway 콘솔에서 생성하거나 엽니다. API가 스테이지에 배포되었는지 확인합니다.
기본 탐색 창에서 스테이지를 선택합니다.
스테이지 세부 정보 섹션에서 편집을 선택합니다.
클라이언트 인증서에서 인증서를 선택합니다.
-
Save changes(변경 사항 저장)를 선택합니다.
API Gateway 콘솔에서 이전에 API를 배포한 경우 변경 사항을 적용하려면 API를 다시 배포해야 합니다. 자세한 내용은 API Gateway에서 REST API의 배포 생성 단원을 참조하십시오.
API에 대한 인증서를 선택하고 저장하면 API Gateway는 API의 HTTP 통합에 대한 모든 호출에 인증서를 사용합니다.
클라이언트 인증서 구성을 확인하기 위한 호출 테스트
-
API 메서드를 선택합니다. 테스트 탭을 선택합니다. 테스트 탭을 표시하려면 오른쪽 화살표 버튼을 선택해야 할 수도 있습니다.
-
클라이언트 인증서에서 인증서를 선택합니다.
테스트를 선택합니다.
API Gateway는 선택된 SSL 인증서를 제공하여 HTTP 백엔드에서 API를 인증할 수 있도록 합니다.
클라이언트 인증서의 유효성 검사를 위해 백엔드 HTTPS 서버 구성
이 지침에서는 이미 API Gateway 콘솔을 사용하여 클라이언트 인증서 생성을 완료하고 클라이언트 인증서 사본을 다운로드한 것으로 가정합니다. API Gateway REST API의 clientcertificate:by-id
또는 AWS CLI의 get-client-certificate
를 호출하여 클라이언트 인증서를 다운로드할 수 있습니다.
API Gateway의 클라이언트 SSL 인증서를 확인하기 위해 백엔드 HTTPS 서버를 구성하기 전에 신뢰할 수 있는 인증 기관에서 제공한 PEM 인코딩된 프라이빗 키와 서버 측 인증서를 입수해야 합니다.
서버 도메인 이름이 myserver.mydomain.com
일 경우, 서버 인증서의 CNAME 값이 myserver.mydomain.com
또는 *.mydomain.com
이어야 합니다.
지원되는 인증 기관에는 Let's Encrypt
예를 들어 클라이언트 인증서 파일이 apig-cert.pem
이고 서버 프라이빗 키와 인증서 파일이 각각 server-key.pem
및 server-cert.pem
이라고 가정합니다. 백엔드에 있는 Node.js 서버의 경우 다음과 유사하게 서버를 구성할 수 있습니다.
var fs = require('fs'); var https = require('https'); var options = { key: fs.readFileSync('server-key.pem'), cert: fs.readFileSync('server-cert.pem'), ca: fs.readFileSync('apig-cert.pem'), requestCert: true, rejectUnauthorized: true }; https.createServer(options, function (req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(443);
node-express
다른 HTTPS 서버는 해당 서버에 대한 설명서를 참조하세요.
기존 클라이언트 인증서 교체
API Gateway에 의해 생성된 클라이언트 인증서는 365일간 유효합니다. API 가동 중지를 방지하려면 API 단계의 클라이언트 인증서가 만료되기 전에 인증서를 교체해야 합니다. API Gateway REST API의 clientCertificate:by-id 또는 get-client-certificate의 AWS CLI 명령을 호출하여 반환된 expirationDate 속성에서 인증서 만료 날짜를 확인할 수 있습니다.
클라이언트 인증서를 교체하려면 다음을 수행합니다.
-
API Gateway REST API의 clientcertificate:generate 또는 AWS CLI generate-client-certificate 명령을 호출하여 새 클라이언트 인증서를 생성합니다. 자습서에서는 새 클라이언트 인증서 ID가
ndiqef
라고 가정합니다. -
백엔드 서버를 업데이트하여 새 클라이언트 인증서를 포함시킵니다. 아직 기존 클라이언트 인증서를 제거하지 마세요.
업데이트를 완료하려면 일부 서버를 재시작해야 할 수 있습니다. 서버 설명서를 참조하여 업데이트 도중 서버를 재시작해야 하는지 확인하세요.
-
API Gateway REST API의 stage:update를 호출하여 새 클라이언트 인증서 ID(
ndiqef
)의 새 클라이언트 인증서를 사용하도록 API 단계를 업데이트합니다.PATCH /restapis/{restapi-id}/stages/stage1 HTTP/1.1 Content-Type: application/json Host: apigateway.us-east-1.amazonaws.com X-Amz-Date: 20170603T200400Z Authorization: AWS4-HMAC-SHA256 Credential=... { "patchOperations" : [ { "op" : "replace", "path" : "/clientCertificateId", "value" : "ndiqef" } ] }
또는 CLI update-stage 명령을 호출할 수 있습니다.
-
백엔드 서버를 업데이트하여 기존 인증서를 제거합니다.
-
기존 인증서의 clientCertificateId(
a1b2c3
)를 지정해 API Gateway REST API의 clientcertificate:delete를 호출하여 API Gateway에서 기존 인증서를 삭제합니다.DELETE /clientcertificates/a1b2c3
또는 CLI delete-client-certificate 명령을 호출할 수 있습니다.
aws apigateway delete-client-certificate --client-certificate-id a1b2c3
이전에 배포한 API에 대해 콘솔에서 클라이언트 인증서를 교체하려면 다음과 같이 합니다.
기본 탐색 창에서 클라이언트 인증서를 선택합니다.
클라이언트 인증서 창에서 인증서 생성을 선택합니다.
-
클라이언트 인증서를 사용하려는 API를 엽니다.
선택한 API에 있는 단계(Stages)를 선택한 다음 단계를 선택합니다.
스테이지 세부 정보 섹션에서 편집을 선택합니다.
클라이언트 인증서에서 새 인증서를 선택합니다.
-
설정을 저장하려면 변경 사항 저장을 선택합니다.
변경을 적용하려면 API를 재배포해야 합니다. 자세한 내용은 API Gateway에서 REST API의 배포 생성 단원을 참조하십시오.