IAM에서 서버 인증서 관리

IAM에서 서버 인증서 관리

AWS에서 웹사이트나 애플리케이션에 HTTPS 연결을 활성화하려면 SSL/TLS *서버 인증서(server certificate)*가 필요해요. AWS Certificate Manager(ACM)가 지원하는 리전의 인증서는 ACM을 사용해 서버 인증서를 프로비저닝, 관리, 배포할 것을 권장해요. 지원하지 않는 리전에서는 인증서 관리자로 IAM을 사용해야 해요. ACM이 지원하는 리전을 알아보려면 AWS 일반 참조의 AWS Certificate Manager 엔드포인트 및 할당량을 참고하세요.

출처: 문서

본문

중요 ACM은 서버 인증서를 프로비저닝, 관리, 배포하는 데 권장되는 도구입니다. ACM으로 인증서를 요청하거나 기존 ACM 또는 외부 인증서를 AWS 리소스에 배포할 수 있어요. ACM이 제공하는 인증서는 무료이고 자동으로 갱신됩니다. 지원 리전에서는 콘솔이나 프로그래매틱 방식으로 ACM을 사용해 서버 인증서를 관리할 수 있어요. ACM 사용에 대한 자세한 내용은 AWS Certificate Manager 사용자 가이드를 참고하세요. ACM 인증서 요청에 대한 자세한 내용은 AWS Certificate Manager 사용자 가이드의 공용 인증서 요청 또는 프라이빗 인증서 요청을 참고하세요. 써드파티 인증서를 ACM으로 가져오는 방법은 AWS Certificate Manager 사용자 가이드의 인증서 가져오기를 참고하세요.

IAM을 인증서 관리자로 사용하는 것은 ACM이 지원하지 않는 리전에서 HTTPS 연결을 지원해야 할 때만 하세요. IAM은 개인 키를 안전하게 암호화하고 암호화된 버전을 IAM SSL 인증서 저장소에 저장합니다. IAM은 모든 리전에서 서버 인증서 배포를 지원하지만, AWS에 사용할 인증서는 외부 공급자에서 받아야 해요. ACM 인증서를 IAM에 업로드할 수는 없어요. 또한 IAM 콘솔에서 인증서를 관리할 수 없어요.

써드파티 인증서를 IAM에 업로드하는 방법은 다음 문서를 참고하세요.

  • 서버 인증서 업로드 (AWS API)
  • 서버 인증서용 AWS API 작업
  • 서버 인증서 문제 해결

서버 인증서 업로드 (AWS API)

서버 인증서를 IAM에 업로드하려면 인증서와 일치하는 개인 키를 제공해야 해요. 인증서가 자체 서명(self-signed)이 아닌 경우 인증서 체인도 제공해야 해요. (자체 서명 인증서를 업로드할 때는 인증서 체인이 필요 없어요.) 인증서를 업로드하기 전에 다음 항목이 모두 있고 다음 기준을 충족하는지 확인하세요.

  • 인증서는 업로드 시점에 유효해야 해요. 유효 기간이 시작되기 전(인증서의 NotBefore 날짜)이나 만료된 후(인증서의 NotAfter 날짜)에는 인증서를 업로드할 수 없어요.
  • 개인 키는 암호화되지 않아야 해요. 비밀번호나 암호구로 보호되는 개인 키는 업로드할 수 없어요. 암호화된 개인 키를 해독하는 데 도움이 필요하면 "서버 인증서 문제 해결"을 참고하세요.
  • 인증서, 개인 키, 인증서 체인은 모두 PEM 인코딩이어야 해요. 이 항목을 PEM 형식으로 변환하는 데 도움이 필요하면 "서버 인증서 문제 해결"을 참고하세요.

IAM API로 인증서를 업로드하려면 UploadServerCertificate 요청을 보내세요. 다음 예제는 AWS Command Line Interface(AWS CLI)로 이를 수행하는 방법을 보여줍니다. 예제는 다음을 가정합니다.

  • PEM 인코딩된 인증서가 Certificate.pem이라는 파일에 저장되어 있습니다.
  • PEM 인코딩된 인증서 체인이 CertificateChain.pem이라는 파일에 저장되어 있습니다.
  • PEM 인코딩되고 암호화되지 않은 개인 키가 PrivateKey.pem이라는 파일에 저장되어 있습니다.
  • (선택) 서버 인증서에 키-값 쌍으로 태그를 지정하려고 합니다. 예를 들어 인증서를 식별하고 구성하기 위해 태그 키 Department와 태그 값 Engineering을 추가할 수 있어요.

다음 예제 명령을 사용하려면 이 파일 이름을 자신의 것으로 교체하세요. ExampleCertificate를 업로드한 인증서의 이름으로 교체하세요. 인증서에 태그를 지정하려면 ExampleKey와 ExampleValue 태그 키-값 쌍을 자신의 값으로 교체하세요. 명령을 한 줄로 입력하세요. 다음 예제는 읽기 쉽게 줄 바꿈과 여분의 공백을 포함하고 있어요.

aws iam upload-server-certificate --server-certificate-name ExampleCertificate
                                    --certificate-body file://Certificate.pem
                                    --certificate-chain file://CertificateChain.pem
                                    --private-key file://PrivateKey.pem
                                    --tags '{"Key": "ExampleKey", "Value": "ExampleValue"}'

앞의 명령이 성공하면 업로드된 인증서에 대한 메타데이터가 반환됩니다. 여기에는 Amazon Resource Name(ARN), 친근한 이름, 식별자(ID), 만료 날짜, 태그 등이 포함됩니다.

참고 Amazon CloudFront에 사용할 서버 인증서를 업로드하는 경우 --path 옵션으로 경로를 지정해야 해요. 경로는 /cloudfront로 시작하고 후행 슬래시를 포함해야 해요(예: /cloudfront/test/).

AWS Tools for Windows PowerShell로 인증서를 업로드하려면 Publish-IAMServerCertificate를 사용하세요.

서버 인증서용 AWS API 작업

다음 명령을 사용해 서버 인증서를 보고, 태그하고, 이름을 바꾸고, 삭제하세요.

  • GetServerCertificate를 사용해 인증서를 검색합니다. 이 요청은 인증서, 인증서 체인(업로드한 경우), 인증서에 대한 메타데이터를 반환합니다.

참고 업로드한 후에는 IAM에서 개인 키를 다운로드하거나 검색할 수 없어요.

  • Get-IAMServerCertificate를 사용해 인증서를 검색합니다.
  • ListServerCertificates를 사용해 업로드한 서버 인증서를 나열합니다. 이 요청은 각 인증서에 대한 메타데이터를 포함한 목록을 반환합니다.
  • Get-IAMServerCertificates를 사용해 업로드한 서버 인증서를 나열합니다.
  • TagServerCertificate를 사용해 기존 서버 인증서에 태그를 답니다.
  • UntagServerCertificate를 사용해 서버 인증서 태그를 제거합니다.
  • UpdateServerCertificate를 사용해 서버 인증서 이름을 바꾸거나 경로를 업데이트합니다. 다음 예제는 AWS CLI로 이를 수행하는 방법을 보여줍니다. 다음 예제 명령을 사용하려면 이전 및 새 인증서 이름과 인증서 경로를 교체하고 한 줄로 입력하세요. 다음 예제는 읽기 쉽게 줄 바꿈과 여분의 공백을 포함하고 있어요.
aws iam update-server-certificate --server-certificate-name ExampleCertificate
                                    --new-server-certificate-name CloudFrontCertificate
                                    --new-path /cloudfront/

AWS Tools for Windows PowerShell로 서버 인증서 이름을 바꾸거나 경로를 업데이트하려면 Update-IAMServerCertificate를 사용하세요.

서버 인증서 문제 해결

인증서를 IAM에 업로드하기 전에 인증서, 개인 키, 인증서 체인이 모두 PEM 인코딩인지 확인해야 해요. 또한 개인 키가 암호화되지 않았는지 확인해야 해요. 다음 예제를 참고하세요.

예제 PEM 인코딩 인증서

-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----

예제 PEM 인코딩된 암호화되지 않은 개인 키

-----BEGIN RSA PRIVATE KEY-----
Base64-encoded private key
-----END RSA PRIVATE KEY-----

예제 PEM 인코딩 인증서 체인

인증서 체인에는 하나 이상의 인증서가 포함됩니다. 텍스트 편집기, Windows의 복사 명령, Linux의 cat 명령을 사용해 인증서 파일을 하나의 체인으로 연결할 수 있어요. 여러 인증서를 포함할 때 각 인증서는 앞선 인증서를 인증해야 해요. 루트 CA 인증서를 마지막에 포함해 인증서를 연결하면 됩니다.

다음 예제에는 세 개의 인증서가 포함되어 있지만 인증서 체인에는 그보다 많거나 적은 인증서가 포함될 수 있어요.

-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
Base64-encoded certificate
-----END CERTIFICATE-----

이 항목들이 IAM에 업로드하기에 올바른 형식이 아니면 OpenSSL을 사용해 올바른 형식으로 변환할 수 있어요.

인증서 또는 인증서 체인을 DER에서 PEM으로 변환 다음 예제처럼 OpenSSL x509 명령을 사용하세요. 다음 예제 명령에서 DER 인코딩 인증서가 포함된 파일 이름으로 Certificate.der를 교체하세요. PEM 인코딩 인증서를 포함할 출력 파일의 원하는 이름으로 Certificate.pem을 교체하세요.

openssl x509 -inform DER -in Certificate.der -outform PEM -out Certificate.pem

개인 키를 DER에서 PEM으로 변환 다음 예제처럼 OpenSSL rsa 명령을 사용하세요. 다음 예제 명령에서 DER 인코딩 개인 키가 포함된 파일 이름으로 PrivateKey.der를 교체하세요. PEM 인코딩 개인 키를 포함할 출력 파일의 원하는 이름으로 PrivateKey.pem을 교체하세요.

openssl rsa -inform DER -in PrivateKey.der -outform PEM -out PrivateKey.pem

암호화된 개인 키 해독 (비밀번호 또는 암호구 제거) 다음 예제처럼 OpenSSL rsa 명령을 사용하세요. 다음 예제 명령을 사용하려면 암호화된 개인 키가 포함된 파일 이름으로 EncryptedPrivateKey.pem을 교체하세요. PEM 인코딩된 암호화되지 않은 개인 키를 포함할 출력 파일의 원하는 이름으로 PrivateKey.pem을 교체하세요.

openssl rsa -in EncryptedPrivateKey.pem -out PrivateKey.pem

인증서 번들을 PKCS#12(PFX)에서 PEM으로 변환 다음 예제처럼 OpenSSL pkcs12 명령을 사용하세요. 다음 예제 명령에서 PKCS#12 인코딩 인증서 번들이 포함된 파일 이름으로 CertificateBundle.p12를 교체하세요. PEM 인코딩 인증서 번들을 포함할 출력 파일의 원하는 이름으로 CertificateBundle.pem을 교체하세요.

openssl pkcs12 -in CertificateBundle.p12 -out CertificateBundle.pem -nodes

인증서 번들을 PKCS#7에서 PEM으로 변환 다음 예제처럼 OpenSSL pkcs7 명령을 사용하세요. 다음 예제 명령에서 PKCS#7 인코딩 인증서 번들이 포함된 파일 이름으로 CertificateBundle.p7b를 교체하세요. PEM 인코딩 인증서 번들을 포함할 출력 파일의 원하는 이름으로 CertificateBundle.pem을 교체하세요.

openssl pkcs7 -in CertificateBundle.p7b -print_certs -out CertificateBundle.pem

더 알아보기 (Learn more)