IAM에서 서버 인증서 관리 - AWS Identity and Access Management

IAM에서 서버 인증서 관리

AWS에서 웹 사이트나 애플리케이션에 대한 HTTPS 연결을 활성화하려면 SSL/TLS 서버 인증서가 필요합니다. 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 사용 설명서인증서 가져오기를 참조하세요.

ACM에서 지원하지 않는 리전에서 HTTPS 연결을 지원해야 하는 경우에만 IAM을 인증서 관리자로 사용합니다. IAM은 프라이빗 키를 안전하게 암호화하고 암호화된 버전을 IAM SSL 인증서 스토리지에 저장합니다. IAM은 모든 리전에서 서버 인증서 배포를 지원하지만 외부 공급자로부터 AWS에서 사용할 인증서를 얻어야 합니다. ACM 인증서는 IAM에 업로드할 수 없습니다. 또한 IAM 콘솔에서 인증서를 관리할 수 없습니다.

서드 파티 인증서를 IAM에 업로드하는 방법에 대한 자세한 정보는 다음 주제를 참조하세요.

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

IAM에 서버 인증서를 업로드하려면 인증서와 함께 그에 딸린 프라이빗 키를 제공해야 합니다. 인증서에 자체 서명이 되어 있지 않은 경우, 인증서 체인도 제공해야 합니다. (자체 서명된 인증서를 업로드하는 경우에는 인증서 체인이 필요하지 않습니다). 인증서를 업로드하기 전에 이 모든 항목이 있는지, 있다면 각 항목이 다음 기준을 충족하는지 확인하세요.

  • 인증서는 업로드 시점에 유효해야 합니다. 유효 기간이 시작되기 전(인증서의 NotBefore 날짜) 또는 만료된 후(인증서의 NotAfter 날짜)에는 인증서를 업로드할 수 없습니다.

  • 프라이빗 키는 암호화되지 않은 것이어야 합니다. 패스워드나 패스프레이즈로 보호된 프라이빗 키는 업로드할 수 없습니다. 암호화된 프라이빗 키의 해독에 대한 도움말은 서버 인증서 문제 해결 섹션을 참조하세요.

  • 인증서, 프라이빗 키 및 인증서 체인은 모두 PEM 인코딩되어야 합니다. 이 항목들을 PEM 형식으로 변환하는 작업에 대한 도움말은 서버 인증서 문제 해결 섹션을 참조하세요.

IAM API를 사용하여 인증서를 업로드하려면 UploadServerCertificate 요청을 전송합니다. 다음 예에서는 AWS Command Line Interface(AWS CLI)에서 이 작업을 수행하는 방법을 보여줍니다. 이 예시에서는 다음과 같이 가정합니다.

  • PEM 인코딩된 인증서가 Certificate.pem이라는 파일에 저장되어 있다.

  • PEM 인코딩된 인증서 체인이 CertificateChain.pem이라는 파일에 저장되어 있다.

  • PEM 인코딩된 비암호화 프라이빗 키가 PrivateKey.pem이라는 파일에 저장되어 있다.

  • (선택 사항) 키 값 페어로 서버 인증서를 태깅하는 것이 좋습니다. 예를 들어 인증서를 식별하고 구성하는 데 도움이 되도록 태그 키 Engineering과 태그 값 Department를 추가할 수 있습니다.

다음 예제 명령을 사용하려면 이 같은 파일 이름을 고유한 이름으로 바꿉니다. ExampleCertificate를 업로드한 인증서의 이름으로 바꿉니다. 인증서를 태깅하려면 ExampleKeyExampleValue 태그 키 값 페어를 고유한 값으로 바꿉니다. 하나의 연속선에 명령을 입력합니다. 다음 예시에는 가독성을 높여주는 줄바꿈과 추가 공백이 포함되어 있습니다.

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을 사용하세요.

  • 서버 인증서를 삭제하려면 DeleteServerCertificate를 사용합니다.

    AWS Tools for Windows PowerShell을 사용하여 서버 인증서를 삭제하려면 Remove-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의 copy 명령 또는 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 명령을 사용합니다. 다음 예시 명령에서 Certificate.der을 DER 인코딩된 인증서가 포함된 파일의 이름으로 대체합니다. Certificate.pem을, PEM 인코딩된 인증서를 포함할 출력 파일에 지정하려는 이름으로 바꿉니다.

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

 

프라이빗 키를 DER에서 PEM으로 변환하려면

다음 예시와 같이 OpenSSL rsa 명령을 사용합니다. 다음 예시 명령에서 PrivateKey.der을 DER 인코딩된 프라이빗 키가 포함된 파일의 이름으로 대체해야 합니다. PrivateKey.pem을, PEM 인코딩된 프라이빗 키를 포함할 출력 파일에 지정하려는 이름으로 바꿉니다.

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

 

암호화된 프라이빗 키를 해독하려면(패스워드나 패스프레이즈 제거)

다음 예시와 같이 OpenSSL rsa 명령을 사용합니다. 다음 예시 명령을 사용하려면 EncryptedPrivateKey.pem을 암호화된 프라이빗 키가 포함된 파일의 이름으로 대체해야 합니다. PrivateKey.pem을, PEM 인코딩된 비암호화 프라이빗 키를 포함할 출력 파일에 지정하려는 이름으로 바꿉니다.

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

 

인증서 번들을 PKCS#12(PFX)에서 PEM으로 변환하려면

다음 예시와 같이 OpenSSL pkcs12 명령을 사용합니다. 다음 예시 명령에서 CertificateBundle.p12를 PKCS#12 인코딩된 인증서 번들이 포함된 파일의 이름으로 대체합니다. CertificateBundle.pem을, PEM 인코딩된 인증서 번들을 포함할 출력 파일에 지정하려는 이름으로 대체합니다.

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

 

인증서 번들을 PKCS#7에서 PEM으로 변환하려면

다음 예시와 같이 OpenSSL pkcs7 명령을 사용합니다. 다음 예시 명령에서 CertificateBundle.p7b를 PKCS#7 인코딩된 인증서 번들이 포함된 파일의 이름으로 대체합니다. CertificateBundle.pem을, PEM 인코딩된 인증서 번들을 포함할 출력 파일에 지정하려는 이름으로 대체합니다.

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