서명된 URL 및 서명된 쿠키를 생성할 수 있는 서명자 지정 - Amazon CloudFront

서명된 URL 및 서명된 쿠키를 생성할 수 있는 서명자 지정

서명된 URL 또는 서명된 쿠키를 만들려면 서명자가 필요합니다. 서명자는 CloudFront에 생성하는 신뢰할 수 있는 키 그룹이거나, CloudFront 키 페어가 포함된 AWS 계정입니다. 서명된 URL 및 서명된 쿠키와 함께 신뢰할 수 있는 키 그룹을 사용하는 것이 좋습니다. 자세한 내용은 신뢰할 수 있는 키 그룹(권장)과 AWS 계정 중에서 선택 단원을 참조하세요.

서명자에는 두 가지 목적이 있습니다.

  • 배포에 서명자를 추가하는 즉시 CloudFront에서는 파일에 액세스할 때 서명된 URL 또는 서명된 쿠키를 사용할 것을 최종 사용자에게 요구하기 시작합니다.

  • 서명된 URL 또는 서명된 쿠키를 만들 때는 서명자의 키 페어에서 프라이빗 키를 사용하여 URL 또는 쿠키의 일부분에 서명합니다. 제한된 객체에 대한 요청이 들어오면 CloudFront는 URL 또는 쿠키의 서명을 서명되지 않은 URL 또는 쿠키와 비교하여 URL 또는 쿠키가 변조되지 않았는지 확인합니다. 또한 CloudFront는 URL 또는 쿠키가 유효한지, 의미가 있는지를 확인합니다(예: 만료 날짜 및 시간 이전인지 확인).

서명자를 지정할 때 서명자를 캐시 동작에 추가하여 서명된 URL 또는 서명된 쿠키가 필요한 파일을 간접적으로 지정합니다. 배포에 캐시 동작이 한 개뿐이라면 최종 사용자는 반드시 서명된 URL 또는 서명된 쿠키를 사용하여 해당 배포의 파일에 액세스해야 합니다. 여러 가지 캐시 동작을 만들고 일부 캐시 동작에만 서명자를 추가하는 경우, 일부 파일에 액세스할 때만 서명된 URL 또는 서명된 쿠키를 사용하도록 최종 사용자에게 요구할 수 있습니다.

서명된 URL 또는 서명된 쿠키를 만들고 CloudFront 배포에 서명자를 추가할 수 있는 서명자(프라이빗 키)를 지정하려면 다음 작업을 수행하세요.

  1. 신뢰할 수 있는 키 그룹 또는 AWS 계정을 서명자로 사용할지 결정합니다. 신뢰할 수 있는 키 그룹을 사용하는 것이 좋습니다. 자세한 내용은 신뢰할 수 있는 키 그룹(권장)과 AWS 계정 중에서 선택 단원을 참조하십시오.

  2. 1단계에서 선택한 서명자에 대해 퍼블릭–프라이빗 키 페어를 만듭니다. 자세한 내용은 서명자에 대해 키 페어 생성 단원을 참조하십시오.

  3. .NET 또는 Java를 사용하여 서명된 URL 또는 서명된 쿠키를 만드는 경우, 프라이빗 키를 다시 포맷해야 합니다. 자세한 내용은 프라이빗 키 재포맷(.NET 및 Java만 해당) 단원을 참조하십시오.

  4. 서명된 URL 또는 서명된 쿠키를 만들려는 배포에서 서명자를 지정합니다. 자세한 내용은 배포에 서명자 추가 단원을 참조하십시오.

신뢰할 수 있는 키 그룹(권장)과 AWS 계정 중에서 선택

서명된 URL 또는 서명된 쿠키를 사용하려면 서명자가 필요합니다. 서명자는 CloudFront에 생성하는 신뢰할 수 있는 키 그룹이거나, CloudFront 키 페어가 포함된 AWS 계정입니다. 다음과 같은 이유로 신뢰할 수 있는 키 그룹을 사용하는 것이 좋습니다.

  • CloudFront 키 그룹을 사용하면 CloudFront 서명된 URL 및 서명된 쿠키에 대한 퍼블릭 키를 관리하기 위해 AWS 계정 루트 사용자를 사용할 필요가 없습니다. AWS 모범 사례에서는 필요 없을 때는 루트 사용자를 사용하지 않도록 권장합니다.

  • CloudFront 키 그룹을 사용하면 CloudFront API를 사용하여 퍼블릭 키, 키 그룹 및 신뢰할 수 있는 서명자를 관리할 수 있습니다. API를 사용하여 키 생성 및 키 회전을 자동화할 수 있습니다. AWS 루트 사용자를 사용할 때는 AWS Management Console을 사용하여 CloudFront 키 페어를 관리해야 하므로 프로세스를 자동화할 수 없습니다.

  • CloudFront API를 사용하여 키 그룹을 관리할 수 있으므로 AWS Identity and Access Management(IAM) 권한 정책을 사용하여 다른 사용자가 수행할 수 있는 작업을 제한할 수도 있습니다. 예를 들어 사용자가 퍼블릭 키를 업로드하되 삭제할 수는 없도록 할 수 있습니다. 또는 멀티 팩터 인증을 사용하거나 특정 네트워크에서 요청을 보내거나 특정 날짜 및 시간 범위 내에서 요청을 보내는 등 특정 조건을 충족하는 경우에만 사용자가 퍼블릭 키를 삭제하도록 허용할 수 있습니다.

    AWS 계정 루트 사용자를 사용하여 CloudFront 키 페어를 관리하는 경우 루트 사용자가 수행할 수 있는 작업 또는 수행할 수 있는 조건을 제한할 수 없습니다. 루트 사용자에게는 IAM 권한 정책을 적용할 수 없습니다. 이는 AWS 모범 사례에서 루트 사용자 사용을 권장하지 않는 이유 중 하나입니다.

  • CloudFront 키 그룹을 사용하면 더 많은 수의 퍼블릭 키를 CloudFront 배포와 연결할 수 있으므로 퍼블릭 키를 더 유연하게 사용하고 관리할 수 있습니다. 기본적으로 단일 배포에 최대 4개의 키 그룹을 연결할 수 있으며 키 그룹에 최대 5개의 퍼블릭 키를 포함할 수 있습니다.

    루트 사용자를 사용하여 CloudFront 키 페어를 관리하는 경우 AWS 계정당 최대 두 개의 활성 CloudFront 키 페어만 가질 수 있습니다.

서명자에 대해 키 페어 생성

CloudFront 서명된 URL 또는 서명된 쿠키를 만드는 데 사용하는 각 서명자에게는 퍼블릭–프라이빗 키 페어가 있어야 합니다. 서명자는 프라이빗 키를 사용하여 URL 또는 쿠키에 서명하고 CloudFront는 퍼블릭 키를 사용하여 서명을 확인합니다.

키 페어를 생성하는 방법은 신뢰할 수 있는 키 그룹을 서명자(권장)로 사용하는지 또는 CloudFront 키 페어로 사용하는지에 따라 다릅니다. 자세한 내용은 다음 단원을 참조하십시오. 생성하는 키 페어는 다음 요구 사항을 충족해야 합니다.

  • SSH-2 RSA 키 페어여야 합니다.

  • base64로 인코딩된 PEM 형식이어야 합니다.

  • 1024, 2048 또는 4096비트 키 페어여야 합니다.

애플리케이션 보안을 위해 키 페어를 주기적으로 교체하는 것이 좋습니다. 자세한 내용은 키 페어 교체 단원을 참조하십시오.

신뢰할 수 있는 키 그룹에 대한 키 페어 생성(권장)

신뢰할 수 있는 키 그룹에 대한 키 페어를 생성하려면 다음 단계를 수행합니다.

  1. 퍼블릭–프라이빗 키 페어를 생성합니다.

  2. CloudFront에 퍼블릭 키를 업로드합니다.

  3. CloudFront 키 그룹에 퍼블릭 키를 추가합니다.

자세한 내용은 다음 절차를 참조하십시오.

키 페어를 생성하려면

참고

다음 단계에서는 키 페어를 생성하는 방법의 일례로 OpenSSL을 사용합니다. RSA 키 페어를 생성하는 방법에는 여러 가지가 있습니다.

  1. 다음 예제 명령은 OpenSSL을 사용하여 길이가 2048비트인 RSA 키 페어를 생성하고 private_key.pem이라는 파일에 저장합니다.

    openssl genrsa -out private_key.pem 2048
  2. 이렇게 만들어진 파일은 퍼블릭 키와 프라이빗 키를 모두 포함합니다. 다음 예제 명령은 private_key.pem이라는 파일에서 퍼블릭 키를 추출합니다.

    openssl rsa -pubout -in private_key.pem -out public_key.pem

    나중에 다음 절차에서 public_key.pem 파일의 퍼블릭 키를 업로드합니다.

퍼블릭 키를 CloudFront에 업로드하려면

  1. AWS Management Console에 로그인하여 https://console.aws.amazon.com/cloudfront/에서 CloudFront 콘솔을 엽니다.

  2. 탐색 메뉴에서 퍼블릭 키(Public keys)를 선택합니다.

  3. Add public key(퍼블릭 키 추가)를 선택합니다.

  4. 퍼블릭 키 추가(Add public key) 창에서 다음을 수행합니다.

    1. 키 이름(Key name)에 퍼블릭 키를 식별할 이름을 입력합니다.

    2. 키 값(Key value)에 퍼블릭 키를 붙여 넣습니다. 이전 절차의 단계를 수행한 경우 퍼블릭 키는 public_key.pem이라는 파일에 있습니다. 퍼블릭 키의 내용을 복사하여 붙여 넣으려면 다음과 같이 하면 됩니다.

      • 다음과 같이 macOS 또는 Linux 명령줄에서 cat 명령을 사용합니다.

        cat public_key.pem

        해당 명령의 출력을 복사한 다음 키 값(Key value) 필드에 붙여 넣습니다.

      • 메모장(Windows) 또는 TextEdit(macOS)와 같은 일반 텍스트 편집기로 public_key.pem 파일을 엽니다. 파일의 내용을 복사한 다음 키 값(Key value) 필드에 붙여 넣습니다.

    3. (선택 사항) 설명(Comment)에 퍼블릭 키에 대한 설명을 추가합니다.

    완료되면 추가(Add)를 선택합니다.

  5. 퍼블릭 키 ID를 적어 둡니다. 나중에 서명된 URL 또는 서명된 쿠키를 만들 때 Key-Pair-Id 필드 값으로 이를 사용합니다.

키 그룹에 퍼블릭 키를 추가하려면

  1. https://console.aws.amazon.com/cloudfront/에서 CloudFront 콘솔을 엽니다.

  2. 탐색 메뉴에서 키 그룹(Key groups)을 선택합니다.

  3. 키 그룹 추가(Add key group)를 선택합니다.

  4. 키 그룹 만들기(Create key group) 페이지에서 다음을 수행합니다.

    1. 키 그룹 이름(Key group name)에 키 그룹을 식별할 이름을 입력합니다.

    2. (선택 사항) 설명(Comment)에 키 그룹에 대한 설명을 입력합니다.

    3. 퍼블릭 키(Public keys)에서 키 그룹에 추가할 퍼블릭 키를 선택한 다음 추가(Add)를 선택합니다. 키 그룹에 추가할 각 퍼블릭 키에 대해 이 단계를 반복합니다.

  5. 키 그룹 만들기(Create Key Pair)를 선택합니다.

  6. 키 그룹 이름을 적어 둡니다. 나중에 키 그룹을 CloudFront 배포의 캐시 동작과 연결하는 데 이를 사용합니다. CloudFront API에서 키 그룹 ID를 사용하여 키 그룹을 캐시 동작과 연결합니다.

중요

다음 단계를 수행하는 대신 신뢰할 수 있는 키 그룹에 대한 퍼블릭 키를 만드는 것이 좋습니다. 서명된 URL 및 서명된 쿠키에 대한 퍼블릭 키를 만드는 권장 방법은 신뢰할 수 있는 키 그룹에 대한 키 페어 생성(권장) 단원을 참조하세요.

CloudFront 키 페어를 만드는 방법은 다음과 같습니다.

  • AWS Management Console에서 키 페어를 생성하고 프라이빗 키를 다운로드합니다. 다음 절차를 참조하십시오.

  • OpenSSL과 같은 애플리케이션을 사용하여 RSA 키 페어를 생성한 후 퍼블릭 키를 AWS Management Console에 업로드합니다. RSA 키 페어 생성에 대한 자세한 내용은 신뢰할 수 있는 키 그룹에 대한 키 페어 생성(권장) 단원을 참조하세요.

AWS Management Console에서 CloudFront 키 페어를 생성하려면

  1. AWS 계정 루트 사용자의 자격 증명을 사용하여 AWS Management Console에 로그인합니다.

    중요

    IAM 사용자는 CloudFront 키 페어를 만들 수 없습니다. 키 페어를 만들려면 루트 사용자 자격 증명을 사용하여 로그인해야 합니다.

  2. 계정 이름을 선택한 다음 내 보안 자격 증명을 선택합니다.

  3. CloudFront 키 페어(CloudFront key pairs)를 선택합니다.

  4. 활성 키 페어가 하나만 있는지 확인합니다. 활성 키 페어가 이미 두 개라면 키 페어를 만들 수 없습니다.

  5. 새 키 페어 생성을 선택합니다.

  6. 키 페어 생성 대화 상자에서 프라이빗 키 파일 다운로드를 선택한 다음 컴퓨터에 파일을 저장합니다.

    중요

    CloudFront 키 페어의 프라이빗 키를 안전한 위치에 저장하고 파일에 대한 권한을 설정하여 원하는 관리자만 읽을 수 있도록 합니다. 다른 사람이 프라이빗 키를 가지게 되면 이들이 유효한 서명된 URL과 서명된 쿠키를 만들어 콘텐츠를 다운로드할 수 있게 됩니다. 프라이빗 키는 다시 가져올 수 없기 때문에 이를 잃어버리거나 삭제한 경우 새 CloudFront 키 페어를 만들어야 합니다.

  7. 키 페어의 키 페어 ID를 기록합니다. (AWS Management Console에서는 액세스 키 ID라고 합니다.) 서명된 URL 또는 서명된 쿠키를 만들 때 이것을 사용합니다.

프라이빗 키 재포맷(.NET 및 Java만 해당)

.NET 또는 Java를 사용하여 서명된 URL 또는 서명된 쿠키를 만드는 경우, 기본 PEM 형식의 키 페어에서 프라이빗 키를 사용하여 서명을 만들 수 없습니다. 대신 다음을 수행합니다.

  • .NET 프레임워크 – 프라이빗 키를 .NET 프레임워크에서 사용하는 XML 형식으로 변환합니다. 몇 가지 도구를 사용할 수 있습니다.

  • Java – 프라이빗 키를 DER 형식으로 변환합니다. 이 작업을 수행하는 한 가지 방법은 다음 OpenSSL 명령을 사용하는 것입니다. 다음 명령에서 private_key.pem은 PEM 형식의 프라이빗 키가 들어 있는 파일의 이름이며, private_key.der은 명령을 실행한 후 DER 형식의 프라이빗 키가 들어 있는 파일의 이름입니다.

    openssl pkcs8 -topk8 -nocrypt -in private_key.pem -inform PEM -out private_key.der -outform DER

    인코더가 정확하게 작동하려면 Bouncy Castle Java 암호화 API에 대한 JAR을 프로젝트에 추가한 다음 Bouncy Castle 공급자를 추가합니다.

배포에 서명자 추가

서명자는 배포에 대해 서명된 URL 및 서명된 쿠키를 만들 수 있는 신뢰할 수 있는 키 그룹(권장) 또는 CloudFront 키 페어입니다. CloudFront 배포와 함께 서명된 URL 또는 서명된 쿠키를 사용하려면 서명자를 지정해야 합니다.

서명자는 캐시 동작과 연결됩니다. 이렇게 하면 같은 배포의 일부 파일에 대해서만 서명된 URL 또는 서명된 쿠키를 요구할 수 있습니다. 배포에는 해당 캐시 동작과 연결된 파일에 대해서만 서명된 URL 또는 쿠키가 필요합니다.

마찬가지로 서명자는 해당 캐시 동작과 연결된 파일에 대해서만 URL 또는 쿠키에 서명할 수 있습니다. 예를 들어, 캐시 동작 하나당 서명자가 하나씩 있고 다른 캐시 동작에는 다른 서명자가 있다면 양쪽의 서명자 모두 상대편의 캐시 동작과 연결된 파일에 대해 서명된 URL 또는 쿠키를 만들 수 없습니다.

중요

배포에 서명자를 추가하기 전에 다음을 수행합니다.

  • 캐시 동작의 경로 패턴과 캐시 동작 순서를 신중하게 정의하여 콘텐츠 액세스 권한을 실수로 사용자에게 부여하거나 일부 공개 콘텐츠에 사용자가 액세스하는 일이 없도록 해야 합니다.

    예를 들어, 하나의 요청이 두 캐시 동작의 경로 패턴과 일치한다고 가정합니다. 첫 번째 캐시 동작에는 서명된 URL 또는 서명된 쿠키가 필요하지 않고, 두 번째 캐시 동작에는 필요합니다. CloudFront에서는 첫 번째와 연결된 캐시 동작을 처리하므로 사용자는 서명된 URL 또는 서명된 쿠키 없이도 파일에 액세스할 수 있습니다.

    경로 패턴에 대한 자세한 내용은 경로 패턴을 참조하십시오.

  • 콘텐츠를 배포하는 데 이미 사용하고 있는 배포의 경우 서명자를 추가하기 전에 서명된 URL 및 서명된 쿠키를 생성할 준비가 되어 있어야 합니다. 서명자를 추가하면 CloudFront는 유효한 서명된 URL 또는 서명된 쿠키를 포함하지 않는 요청을 거부합니다.

CloudFront 콘솔 또는 CloudFront API를 사용하여 배포에 서명자를 추가할 수 있습니다.

CloudFront 콘솔을 사용하여 배포에 서명자 추가

다음 단계에서는 신뢰할 수 있는 키 그룹을 서명자로 추가하는 방법을 보여 줍니다. AWS 계정을 신뢰할 수 있는 서명자로 추가할 수도 있지만 권장하지 않습니다.

콘솔을 사용하여 배포에 서명자를 추가하려면

  1. 신뢰할 수 있는 서명자로 사용할 키 그룹의 키 그룹 ID를 적어 둡니다. 자세한 내용은 신뢰할 수 있는 키 그룹에 대한 키 페어 생성(권장) 단원을 참조하십시오.

  2. https://console.aws.amazon.com/cloudfront/에서 CloudFront 콘솔을 엽니다.

  3. 서명된 URL 또는 서명된 쿠키로 보호하려는 파일의 배포를 선택합니다.

    참고

    새 배포에 서명자를 추가하려면 배포를 만들 때 6단계에서 설명하는 것과 동일한 설정을 지정합니다.

  4. 동작 탭을 선택합니다.

  5. 경로 패턴이 서명된 URL 또는 서명된 쿠키로 보호하려는 파일과 일치하는 캐시 동작을 선택한 다음 편집을 선택합니다.

  6. 동작 편집(Edit Behavior) 페이지에서 다음을 수행합니다.

    1. 최종 사용자 액세스 제한(서명된 URL 또는 서명된 쿠키 사용)(Restrict Viewer Access (Use Signed URLs or Signed Cookies)에서 를 클릭합니다.

    2. 신뢰할 수 있는 키 그룹 또는 신뢰할 수 있는 서명자(Trusted Key Groups or Trusted Signer)에서 신뢰할 수 있는 키 그룹(Trusted Key Groups)을 선택합니다.

    3. 신뢰할 수 있는 키 그룹(Trusted Key Groups)에서 추가할 키 그룹을 선택한 다음 추가를 선택합니다. 두 개 이상의 키 그룹을 추가하려면 이 과정을 반복합니다.

  7. 예, 편집합니다를 선택하여 캐시 동작을 업데이트합니다.

CloudFront API를 사용하여 배포에 서명자 추가

CloudFront API를 사용하여 신뢰할 수 있는 키 그룹을 서명자로 추가할 수 있습니다. 기존 배포 또는 새 배포에 서명자를 추가할 수 있습니다. 두 경우 모두 TrustedKeyGroups 요소에 값을 지정합니다.

AWS 계정을 신뢰할 수 있는 서명자로 추가할 수도 있지만 권장하지 않습니다.

Amazon CloudFront API 참조에서 다음 주제를 참조하세요.

키 페어 교체

서명된 URL 및 서명된 쿠키에 대한 키 페어를 주기적으로 교체(변경)하는 것이 좋습니다. 아직 만료되지 않은 서명된 URL 또는 서명된 쿠키를 무효화하지 않고 URL 또는 쿠키를 만들기 위해 사용 중인 키 페어를 교체하려면 다음 작업을 수행하십시오.

  1. 새 키 페어를 만들고 키 그룹에 퍼블릭 키를 추가합니다. 자세한 내용은 신뢰할 수 있는 키 그룹에 대한 키 페어 생성(권장) 단원을 참조하십시오.

  2. 이전 단계에서 새 키 그룹을 만든 경우 키 그룹을 배포에 서명자로 추가합니다.

    중요

    키 그룹에서 기존 퍼블릭 키를 제거하거나 배포에서 키 그룹을 제거하지 마십시오. 새것만 추가하십시오.

  3. 새로운 키 페어의 프라이빗 키를 사용하여 서명을 만들도록 애플리케이션을 업데이트합니다. 새 프라이빗 키로 서명된 URL 또는 서명된 쿠키가 작동하는지 확인합니다.

  4. 이전 프라이빗 키로 서명한 URL 또는 쿠키의 만료 날짜가 지날 때까지 기다립니다. 그런 다음 키 그룹에서 이전 프라이빗 키를 제거합니다. 2단계에서 새 키 그룹을 만든 경우 배포에서 이전 키 그룹을 제거합니다.