EP11 연결에 대한 두 번째 인증 계층 사용-표준 플랜 전용

암호화 조작의 실행에 대한 독점 제어를 보장하기 위해 Hyper Protect Crypto Services 인증서 관리자 CLI를 사용하여 EP11(GREP11 또는 PKCS #11 API) 연결에 대한 두 번째 인증 계층을 사용할 수 있습니다. 이 기능을 사용으로 설정하는 경우 IAM(Identity and Access Management) 토큰의 맨 위에 있는 추가적인 액세스 제어 계층이 EP11 애플리케이션에 추가됩니다. 유효한 클라이언트 인증서가 있는 EP11 애플리케이션만 EP11 조작을 수행할 수 있도록 하기 위해 상호 TLS 연결이 설정됩니다.

EP11 연결에 대한 두 번째 인증 계층은 현재 Hyper Protect Crypto Services 표준 플랜에서만 지원됩니다.

상호 TLS 인증을 사용하기 위한 보안 및 가용성 우수 사례

EP11에 액세스하기 위한 두 번째 인증 계층으로 상호 TLS를 사용하는 경우 다음과 같은 보안 및 가용성 고려사항에 대해 인지하고 있어야 합니다.

  • 특정 사용자가 EP11에 액세스하지 못하도록 차단해야 하는 경우 인증서 관리자를 서비스 사용자와 분리하십시오. 클라이언트 인증서를 관리하는 사용자에게만 인증서 관리자 역할을 지정하고 다른 서비스 사용자에게는 해당 운영 사용 역할을 지정하여 액세스를 제어하십시오. 사용자 액세스를 관리하려면 계정 관리 액세스 권한이 있는 관리자 역할이 지정되어 있어야 합니다.
  • 올바르지 않은 클라이언트 인증서를 사용하거나 사용 불가능한 개인 키를 사용하여 클라이언트 인증서에 서명하는 경우 EP11 API에 액세스할 수 없습니다. 가용성을 보장하려면 두 명 이상의 사용자에게 인증서 관리자 역할을 백업으로 지정하십시오. 인증서 관리자는 고유한 관리자 개인 키를 안전하게 유지보수해야 합니다. 또한 인증서 관리자는 Hyper Protect Crypto Services 인스턴스 외부에서 모든 클라이언트 인증서의 백업을 유지보수해야 합니다 (예: IBM Cloud Secrets Manager사용). 또한 인증서의 만기를 모니터하는 것이 좋습니다.

시작하기 전에

GREP11 또는 PKCS #11 API 연결에 대한 두 번째 인증 계층을 사용으로 설정하기 전에 다음과 같은 전제조건을 완료해야 합니다.

  1. 해당 조치를 수행하기 위한 인증서 관리자 IAM 역할이 지정되어 있어야 합니다. IAM 역할을 지정하는 방법에 대한 자세한 정보는 사용자 액세스 관리리소스에 대한 액세스 관리를 참조하십시오.

  2. TLS 인증에 사용되는 워크스테이션에서 준비된 클라이언트 인증서가 있습니다. IBM Cloud Secrets Manager 를 사용하여 애플리케이션 및 서비스에 대한 SSL/TLS 인증서를 관리하는 것이 좋습니다. 이 관리자는 무료이며 인증서에 대한 지속적 스토리지를 제공합니다.

  3. IBM Cloud CLI를 설치하십시오.

  4. 다음 명령을 사용하여 최신 인증서 관리자 CLI 플러그인을 설치하십시오.

    ibmcloud plugin install hpcs-cert-mgr
    
  5. CLI를 사용하여 IBM Cloud 에 로그인하십시오. 여러 개의 계정이 있으면 서비스 인스턴스가 작성된 계정을 선택하십시오. 다음 명령을 사용하여 서비스 인스턴스가 있는 올바른 지역 및 리소스 그룹에 로그인하십시오.

    ibmcloud target -r <region> -g <resource_group>
    

1단계: 관리자 서명 키 구성

두 번째 인증 계층을 사용으로 설정하려면 먼저 관리자 서명 키를 구성해야 합니다. 서명 키는 인증서 관리자 CLI 명령을 처리하는 인스턴스 인증서 관리자 서버에 연결하기 위해 사용됩니다.

  1. 다음 명령을 사용하여 서명 키 쌍을 생성하십시오.

    ibmcloud hpcs-cert-mgr adminkey set --crn HPCS_CRN [--private]
    

    HPCS_CRN 변수를 Hyper Protect Crypto Services 인스턴스의 CRN(Cloud Resource Name) 으로 대체하십시오. ibmcloud resource service-instances --long 명령을 사용하여 CRN을 검색할 수 있습니다. 매개변수 --private는 선택사항입니다. 이 옵션을 사용하는 경우 인증서 관리자 서버 URL에서 개인 엔드포인트를 지시하며 사설 네트워크를 사용하여 서비스 인스턴스를 연결해야 합니다.

    이 명령을 실행하면 공개 및 개인 키 쌍이 생성되어 로컬 워크스테이션에 저장됩니다. 기본 파일 경로는 /Users/<username>/.hpcs-cert-mgr-cfg/입니다. 예를 들면 비밀번호 보호를 사용하여 서명 키를 안전하게 저장해야 합니다. 공개 키는 서명 확인을 위해 인스턴스 인증서 관리자 서버에 자동으로 업로드됩니다.

    서명 키를 새로 고치고 업데이트하려는 경우 ibmcloud hpcs-cert-mgr adminkey update 명령을 사용하여 조치를 수행할 수 있습니다. CLI 사용법에 대한 자세한 정보는 Hyper Protect Crypto Services 인증서 관리자 CLI 참조를 참조하십시오.

  2. (선택사항) 다음 명령어를 사용하여 공개 키가 서버에 업로드되었는지 확인하십시오.

    ibmcloud hpcs-cert-mgr adminkey get --crn HPCS_CRN [--private]
    

    이 명령에서 공개 키 값이 리턴되는 경우 공개 키가 정상적으로 업로드되었음을 의미합니다.

2단계: 인증을 위한 클라이언트 CA 인증서 설정

관리자 서명 키를 구성한 후 TLS 클라이언트 인증을 위해 클라이언트 인증 기관(CA)A trusted third-party organization or company that issues the digital certificates. The certificate authority typically verifies the identity of the individuals who are granted the unique certificate. 인증서를 인스턴스 인증서 관리자 서버에 업로드해야 합니다.

클라이언트 CA 인증서를 설정한 후에는 더 이상 UI를 통해 EP11 키 저장소 및 EP11 키에 액세스할 수 없습니다.

  1. (선택사항) CA및 클라이언트 인증서 준비

    OpenSSL 유틸리티를 사용하여 GREP11 인프라에 대해 CA 인증서를 생성할 수 있습니다.

    인증서를 생성하기 위해 사용할 수 있는 워크스테이션에 OpenSSL을 설치해야 합니다. 워크스테이션에서 다음 단계를 완료하십시오.

    1. 다음 명령을 실행하여 CA키를 생성하십시오.
      openssl genrsa -out ca.key 2048
      
    2. 다음 명령을 실행하여 CA 인증서를 작성하십시오.
      openssl req -new -x509 -key ca.key -days 730 -out ca.pem
      
    3. 다음 명령을 실행하여 클라이언트 키를 작성하십시오.
      openssl genrsa -out client-key.pem 2048
      
    4. 다음 명령을 실행하여 클라이언트 인증서 서명 요청을 작성하십시오.
      openssl req -new -key client-key.pem -out client.csr
      
    5. 다음 명령을 실행하여 클라이언트 인증서를 작성하십시오.
      openssl x509 -req -days 730 -in client.csr -CA ca.pem -CAcreateserial -CAkey ca.key -out client.pem
      
  2. 다음 명령을 사용하여 클라이트 CA 인증서를 서버에 업로드하십시오.

    클라이언트 인증서가 인증서 체인의 중간 CA 인증서에서 서명되는 경우 해당 중간 CA 인증서를 업로드해야 합니다.

    ibmcloud hpcs-cert-mgr cert set --crn HPCS_CRN --admin-priv-key ADMIN_PRIV_KEY --cert-id CERT_ID --cert CERT_FILE [--private]
    

    다음 표에 따라 예제 요청의 변수를 대체하십시오.

    표 1. TLS 인증서를 업로드하는 데 필요한 변수를 설명합니다.
    가변 설명
    HPCS_CRN 필수입니다. Hyper Protect Crypto Services 인스턴스의 CRN(Cloud Resource Name)입니다. ibmcloud resource service-instances --long 명령을 사용하여 CRN을 검색할 수 있습니다.
    ADMIN_PRIV_KEY 필수입니다. 1단계에서 생성하거나 업데이트하는 로컬 워크스테이션에 있는 현재 개인 키의 파일 경로입니다. 개인 키는 인스턴스 인증서 관리자 서버에 대한 이 명령 조치에 서명하기 위해 사용됩니다.
    CERT_ID 필수입니다. 간단히 식별할 수 있도록 클라이언트 CA 인증서에 지정할 문자열 ID입니다.
    CERT_FILE 필수입니다. 로컬 워크스테이션에 있는 클라이언트 CA 인증서의 파일 경로입니다.

    매개변수 --private는 선택사항입니다. 이 옵션을 사용하는 경우 인증서 관리자 서버 URL에서 개인 엔드포인트를 지시하며 사설 네트워크를 사용하여 서비스 인스턴스를 연결해야 합니다.

  3. (선택사항) 다음 명령을 사용하여 클라이언트 CA 인증서가 서버에 업로드되었는지 검사한 후 확인하십시오.

    ibmcloud hpcs-cert-mgr cert list --crn HPCS_CRN [--private]
    

    이 명령은 해당 서버에서 사용자가 관리하는 사용 가능한 모든 클라이언트 CA 인증서를 나열합니다. 목록에 이전에 업로드된 인증서가 포함된 경우 이는 조치가 성공적으로 완료되었음을 의미합니다.

3단계: EP11 애플리케이션에 대한 상호 TLS 연결 설정

관리자 서명 키 및 클라이언트 CA 인증서를 설정한 후 EP11 사용자는 GREP11 또는 PKCS #11 API를 사용하는 애플리케이션에 대한 상호 TLS 연결을 설정할 수 있습니다. EP11 사용자가 이 작업을 수행하려면 먼저 클라이언트 인증서를 사용하여 GREP11 또는 PKCS #11 애플리케이션을 구성해야 합니다.

GREP11 또는 PKCS #11 API를 사용하려는 경우 EP11 사용자에게 EP11 조작을 수행하기 위한 적절한 IAM 역할이 지정되어 있는지 확인하십시오. 자세한 정보는 IAM 서비스 액세스 역할의 HSM API 탭을 참조하십시오.

  • GREP11 애플리케이션 구성

    GREP11 애플리케이션에 사용하는 프로그래밍 언어에 따른 구성 메소드는 해당 gRPC 패키지에 따라 달라집니다. 다음은 Golang 및 JavaScript에 대한 예제를 제공합니다.

    • Golang 예제 코드 스니펫

      cert, _ := tls.LoadX509KeyPair("client.pem", "client-key.pem")
      var callOpts = []grpc.DialOption{
        grpc.WithTransportCredentials(credentials.NewTLS(&tls.Config{Certificates: []tls.Certificate{cert}}))
      }
      

      tls.Config{}Config 유형 구조체를 기반으로 올바르게 정의되어야 합니다. 최소한 Certificates 필드를 설정해야 합니다. 클라이언트 키 및 클라이언트 인증서를 사용해야 합니다. 전체 Golang 예제 코드는 Golang에 대한 샘플 GitHub 저장소를 참조하십시오.

    • JavaScript 예제 코드 스니펫

      credentials.push(grpc.credentials.createSsl());
      

      함수 및 매개변수에 대한 자세한 정보는 신임 정보 모듈 문서 를 참조할 수 있습니다. private_key 함수에 대한 cert_chaincreateSsl() 매개변수를 설정해야 합니다. 전체 JavaScript 예제 코드는 JavaScript용 샘플 GitHub 저장소를 참조하십시오.

  • PKCS #11 애플리케이션 구성

    PKCS #11은 구성 파일에서 상호 TLS를 처리합니다. 다음 예제에 따라 tls 필드를 업데이트하십시오.

    tls:
      enabled: true
      mutual: true
      cacert:
      certfile: "<client_certificate>"
      keyfile: "<client_certificate_private_key>"
    

    다음 표에 따라 예제의 변수를 대체하십시오.

    표 3. PKCS #11 애플리케이션을 구성하는 데 필요한 변수를 설명합니다.
    가변 설명
    client_certificate 필수입니다. 인증서 관리자가 서버에 업로드한 클라이언트 인증서의 파일 경로입니다.
    client_certificate_private_key 필수입니다. 인증서에 서명하기 위해 사용된 클라이언트 인증서 개인 키의 파일 경로입니다.

구성 후 애플리케이션에서 GREP11 또는 PKCS #11 API를 사용하여 암호화 조작을 수행하는 경우 상호 TLS 연결이 설정되고 추가 인증 계층에 대해 클라이언트 인증서의 유효성이 검증됩니다.

(선택사항) 상호 TLS 연결 사용 안함

두 번째 인증 계층이 더 이상 필요하지 않은 경우 서버에서 모든 클라이언트 CA 인증서를 삭제하여 해당 기능을 사용 안함으로 설정할 수 있습니다.

  1. 다음 명령을 사용하여 CA 인증서를 삭제하십시오. EP11 애플리케이션에서 TLS 연결을 사용 안함으로 설정하려면 이 단계를 반복하여 서버에서 사용 가능한 모든 인증서를 삭제하십시오.

    ibmcloud hpcs-cert-mgr cert delete --crn HPCS_CRN --admin-priv-key ADMIN_PRIV_KEY --cert-id CERT_ID [--private]
    

    다음 표에 따라 예제 요청의 변수를 대체하십시오.

    표 2. CA 인증서를 삭제하는 데 필요한 변수에 대해 설명합니다.
    가변 설명
    HPCS_CRN 필수입니다. Hyper Protect Crypto Services 인스턴스의 CRN(Cloud Resource Name)입니다. ibmcloud resource service-instances --long 명령을 사용하여 CRN을 검색할 수 있습니다.
    ADMIN_PRIV_KEY 필수입니다. 로컬 워크스테이션에 저장된 현재 개인 키의 파일 경로입니다. 개인 키는 인스턴스 인증서 관리자 서버에 대한 이 명령 조치에 서명하기 위해 사용됩니다.
    CERT_ID 필수입니다. 삭제할 CA 인증서의 문자열 ID입니다. 먼저 ibmcloud hpcs-cert-mgr cert list --crn HPCS_CRN 명령을 사용하여 ID를 포함한 모든 인증서를 나열할 수 있습니다.

    매개변수 --private는 선택사항입니다. 이 옵션을 사용하는 경우 인증서 관리자 서버 URL에서 개인 엔드포인트를 지시하며 사설 네트워크를 사용하여 서비스 인스턴스를 연결해야 합니다.

    서비스 인스턴스에 대해 복수의 인증서 관리자가 설정되어 있는 경우 해당 관리자 아래에 있는 모든 CA 인증서를 삭제해야 합니다.

    인증서 관리자 서버에서 CA 인증서를 삭제하는 경우 이 CA 인증서를 통해 발행된 클라이언트 인증서를 사용하는 모든 애플리케이션에서 상호 TLS 연결을 통해 GREP11 인스턴스에 액세스할 수 없게 됩니다.

    인증서 관리자 서버에서 모든 CA 인증을 삭제한 후에는 GREP11 인스턴스에 대한 상호 TLS 인증을 사용할 수 없게 됩니다. 이제 애플리케이션에서 GREP11 인스턴스에 연결하기 위한 상호 TLS 연결이 필요하지 않습니다.

  2. (선택사항) 다음 명령을 사용하여 모든 CA 인증서가 삭제되었는지 검사한 후 확인하십시오.

    ibmcloud hpcs-cert-mgr cert list --crn HPCS_CRN [--private]
    

    인증서가 리턴되지 않을 경우 서비스 인스턴스의 모든 인증서가 삭제되었음을 의미합니다.

  3. (선택사항) 추후 API 연결 시 애플리케이션에서 더 이상 해당 인증서를 사용하지 않도록 GREP11 또는 PKCS #11 애플리케이션을 업데이트하여 인증서 구성을 삭제하십시오.

다음에 수행할 작업