클라우드 애플리케이션에 엔드 투 엔드 보안 적용

이 튜토리얼에서는 비용이 발생할 수 있습니다. Cost Estimator를 사용하여 예상 사용량을 기반으로 비용 추정값을 생성하십시오.

이 튜토리얼에서는 IBM Cloud® 카탈로그에서 사용 가능한 주요 보안 서비스와 이를 사용하는 방법을 함께 안내합니다. 파일 공유를 제공하는 애플리케이션은 보안 개념을 실제 상황에 적용합니다.

잠재적인 보안 위험과 이러한 위험에 대한 보호 방법을 명확히 이해하지 않으면 완벽한 애플리케이션 아키텍처를 구축할 수 없습니다. 애플리케이션 데이터는 유실되거나, 침해되거나 도난되어서는 안 되는 중요한 리소스입니다. 또한 데이터는 암호화 기술을 통해 저장 또는 전송 중에 보호되어야 합니다. 저장 데이터를 암호화하면 데이터가 유실되거나 도난당한 후에도 정보가 노출되지 않도록 보호할 수 있습니다. HTTPS, SSL 및 TLS과 같은 방법을 통해 전송(예: 인터넷을 통해) 데이터를 암호화하면 도청을 방지하여 중간자 공격을 막을 수 있습니다.

특정 리소스에 대한 사용자의 액세스를 인증하고 권한 부여하는 것은 많은 애플리케이션의 또 다른 일반적인 요구사항입니다. 소셜 ID를 사용하는 고객 및 공급자, 클라우드 호스팅 디렉토리를 사용하는 파트너, 조직의 ID 제공자를 사용하는 직원 등으로 인해 다양한 인증 체계를 지원해야 할 수 있습니다.

목표

  • 저장 버킷의 콘텐츠를 자신의 암호화 키로 암호화하세요.
  • 사용자가 애플리케이션에 액세스하기 전에 인증을 요구합니다.
  • 클라우드 서비스 전반에 걸쳐 보안 관련 API 호출 및 기타 작업을 모니터링하고 감사합니다.

이 튜토리얼은 사용자 그룹이 공통 스토리지 풀에 파일을 업로드할 수 있도록 하고 공유 가능한 링크를 통해 이러한 파일에 대한 액세스를 제공하는 샘플 애플리케이션을 제공합니다. 이 애플리케이션은 Node.js 로 작성되어 IBM Cloud Kubernetes Service 또는 Red Hat OpenShift on IBM Cloud 에 컨테이너로 배포됩니다. 이는 애플리케이션의 보안 상태를 향상시키기 위해 몇 가지 보안 관련 서비스 및 기능을 이용합니다.

이 튜토리얼은 클래식 인프라 또는 VPC 인프라에서 실행되는 클러스터에서 작동합니다.

*
아키텍처 다이어그램 *

  1. 사용자가 애플리케이션에 연결합니다.
  2. 사용자 지정 도메인과 TLS 인증서를 사용하는 경우, 인증서는 Secrets Manager 에서 관리 및 배포됩니다.
  3. App ID에서는 애플리케이션을 보안하고 사용자를 인증 페이지로 경로 재지정합니다. 사용자는 여기서 가입할 수도 있습니다.
  4. 애플리케이션이 Container Registry에 저장된 이미지의 Kubernetes 클러스터에서 실행됩니다. 이 이미지의 취약성 여부가 자동으로 스캔됩니다.
  5. 업로드된 파일이 Object Storage에 저장되고 해당 메타데이터는 IBM Cloudant에 저장됩니다.
  6. 오브젝트 스토리지 버킷, App ID 및 Secrets Manager 서비스는 사용자 제공 키를 활용하여 데이터를 암호화합니다.
  7. 애플리케이션 관리 활동은 IBM Cloud Activity Tracker Event Routing 의해 기록되고 분석을 위해 IBM Cloud Logs 라우팅됩니다.

시작하기 전에

이 튜토리얼에는 다음 항목이 필요합니다.

  • IBM Cloud CLI
    • IBM Cloud Kubernetes Service 플러그인(kubernetes-service)
    • Container Registry 플러그인(container-registry)
  • kubectl: Kubernetes 클러스터와 상호작용함
  • git: 소스 코드 저장소를 복제함

솔루션 튜토리얼 시작하기 가이드에서 운영 환경에 맞는 도구를 다운로드하고 설치하는 방법을 확인할 수 있습니다.

이러한 도구의 설치를 피하기 위해 Cloud ShellIBM Cloud 의 콘솔에서.

서비스 작성

다음 절에서는 애플리케이션에서 사용하는 서비스를 작성합니다.

애플리케이션 배치 위치 결정

작성하는 모든 리소스의 위치리소스 그룹 은 Kubernetes 클러스터의 위치리소스 그룹 과 일치해야 합니다.

사용자 및 애플리케이션 활동 캡처

IBM Cloud Activity Tracker Event Routing 감사 이벤트를 IBM Cloud Logs 대상 인스턴스로 라우팅하도록 구성해야 합니다. 현재 계정에 구성되어 있지 않은 경우 IBM 로그 대상 구성에 설명된 대로 감사 이벤트를 라우팅합니다.

이 튜토리얼의 끝에서는 튜토리얼의 단계를 완료하여 생성된 이벤트를 검토합니다.

애플리케이션을 위한 클러스터 작성

IBM Cloud Kubernetes Service 및 Red Hat OpenShift on IBM Cloud 은 Kubernetes 클러스터에서 실행되는 컨테이너에 고가용성 앱을 배치하기 위한 환경을 제공합니다.

이 튜토리얼에서 재사용하려는 기존 Kubernetes 클러스터가 있는 경우 이 섹션을 건너뛰십시오. 이 튜토리얼의 나머지 부분에서 클러스터 이름은 secure-file-storage-cluster 로 참조되므로 클러스터 이름으로 간단히 대체하십시오.

이 튜토리얼을 수행하는 데는 하나의 구역과 하나의 작업자 노드가 있고 사용 가능한 크기가 가장 작은(특성) 최소 클러스터로 충분합니다. IBM Cloud Kubernetes Service 클러스터를 만들려면 VPC 클러스터 만들기 또는 클래식 클러스터 만들기 의 단계를 따르세요. Red Hat OpenShift on IBM Cloud 클러스터를 만들려면 VPC 클러스터 만들기 또는 클래식 클러스터 만들기 의 단계를 따르세요.

고유 암호화 키 사용

Key Protect은(는) IBM Cloud 서비스에서 앱에 대해 암호화된 키를 프로비저닝하는 데 도움을 줍니다. Key Protect과(와) IBM Cloud Object Storage은(는) 함께 작동하여 저장 중인 데이터를 보호합니다. 이 절에서는 스토리지 버킷을 위한 하나의 루트 키를 작성합니다.

  1. Key Protect의 인스턴스를 작성하십시오.
    1. 위치를 선택하십시오.
    2. 이름을 secure-file-storage-kp 로 설정합니다.
    3. 서비스 인스턴스를 작성할 리소스 그룹을 선택하고 작성을 클릭하십시오.
  2. 에서 추가 단추를 클릭하여 새 루트 키를 작성하십시오. 스토리지 버킷 및 App ID 데이터를 암호화하는 데 사용됩니다.
    1. 키 유형을 루트 키로 설정하십시오.
    2. 이름을 secure-file-storage-root-enckey 로 설정합니다.
    3. 그런 다음 키를 추가하십시오.

기존 루트 키 가져오기를 통해 BYOK(Bring Your Own Key)를 수행하십시오.

사용자 파일의 스토리지 설정

파일 공유 응용 프로그램은 파일을 Object Storage 버킷에 저장합니다. 파일과 사용자 간의 관계는 IBM Cloudant 데이터베이스에 메타데이터로 저장됩니다. 이 절에서는 이러한 서비스를 작성하고 구성합니다.

컨텐츠를 위한 버킷

  1. Object Storage의 인스턴스를 작성하십시오.
    1. 표준 플랜을 선택하고 이름을 secure-file-storage-cos 로 설정합니다.
    2. 이전 서비스와 동일한 리소스 그룹을 사용하고 작성을 클릭하십시오.
  2. 서비스 인증 정보에서 새 인증 정보를 작성하십시오.
    1. 이름을 secure-file-storage-cos-acckey 로 설정합니다.
    2. 역할 에 대해 작성자를 선택하십시오.
    3. 고급 옵션에서 HMAC 인증 정보 포함을 선택하십시오. 이는 사전 서명된 URL을 생성하는 데 필요합니다.
    4. 추가 를 클릭하십시오.
    5. 인증 정보를 기록하십시오. 이는 나중 단계에서 필요합니다.
  3. 탐색 사이드바에서 엔드포인트 를 클릭하십시오.
    1. 복원성지역으로 설정하고 위치를 대상 위치로 설정하십시오.
    2. 클래식 인프라의 경우: 개인용 서비스 엔드포인트를 복사하십시오. 이는 나중에 애플리케이션 구성에서 사용됩니다.
    3. VPC 인프라의 경우: 직접 서비스 엔드포인트를 복사하십시오. 이는 나중에 애플리케이션 구성에서 사용됩니다.

버킷을 작성하기 전에, Object Storage 서비스 인스턴스에 저장된 루트 키에 대한 액세스 권한을 Key Protect 서비스 인스턴스에 부여하십시오.

  1. IBM Cloud 의 관리 > 접근(IAM)> 권한으로 이동합니다.
  2. 작성 단추를 클릭하십시오.
  3. 소스 서비스 메뉴에서 Cloud Object Storage를 선택하십시오.
  4. 선택된 속성을 기반으로 하는 리소스로 전환하고 소스 서비스 인스턴스를 선택하고 이전에 작성된 Object Storage 서비스 인스턴스를 선택하십시오.
  5. 대상 서비스 메뉴에서 Key Protect를 선택하십시오.
  6. 선택한 속성을 기반으로 하는 리소스로 전환하고 인스턴스 ID를 선택하고, 이전에 작성된 Key Protect 서비스 인스턴스를 선택하십시오.
  7. 독자 역할을 사용으로 설정하십시오.
  8. 권한 부여 단추를 클릭하십시오.

마지막으로 버켓을 작성한다.

  1. 리소스 목록 의 저장 공간 아래 에서 Object Storage 서비스 인스턴스에 액세스합니다.
  2. 버킷 만들기를 클릭한 다음, 버킷을 사용자 지정하세요.
    1. name 에 고유한 값을 사용하십시오 (예: <your-initials>-secure-file-upload).
    2. 복원성지역으로 설정하십시오.
    3. 위치를 Key Protect 서비스 인스턴스를 작성한 위치와 동일하게 설정하십시오.
    4. 스토리지 클래스표준으로 설정하십시오.
  3. 서비스 통합(선택사항)/암호화에서 키 관리를 사용 가능하게 하십시오.
    1. 기존 인스턴스 사용을 클릭하여 이전에 작성된 Key Protect 서비스 인스턴스를 선택하십시오.
    2. secure-file-storage-root-root를 키로 선택하고 키 연관을 클릭하십시오.
  4. 서비스 통합(선택 사항) / 모니터링 및 활동 추적에서 활동 추적을 사용 설정하여 분석을 위해 감사 이벤트가 지속되도록 합니다.
    1. 체크 표시를 클릭하면 해당 지역의 Activity Tracker 인스턴스에 대한 서비스 정보가 표시되어야 합니다.
    2. 이제 데이터 이벤트 추적을 사용으로 설정하고 읽기 및 쓰기데이터 이벤트로 선택하십시오.
  5. 버킷 작성을 클릭하십시오.

사용자와 파일 간의 데이터베이스 맵 관계

IBM Cloudant 데이터베이스는 애플리케이션에서 업로드된 모든 파일에 대한 메타데이터를 포함합니다.

  1. IBM Cloudant 서비스의 인스턴스를 작성하십시오.
    1. 오퍼링으로 Cloudant를 선택하십시오.
    2. 멀티테넌트 환경을 선택하고 이전 서비스와 동일한 지역을 선택하십시오.
    3. 이름을 secure-file-storage-cloudant 로 설정합니다.
    4. 이전 서비스와 동일한 리소스 그룹을 사용하십시오.
    5. 인증 메소드IAM으로 설정하십시오.
    6. 작성을 클릭하십시오.
  2. 리소스 목록으로 돌아가서 새로 작성된 서비스를 찾은 후 이를 클릭하십시오. 참고: 상태가 활성으로 변경될 때까지 대기해야 합니다.
    1. 서비스 인증 정보에서 새 인증 정보를 작성하십시오.
    2. 이름을 secure-file-storage-cloudant-acckey 로 설정합니다.
    3. 역할 에 대해 관리자를 선택하십시오.
    4. 나머지 필드에 대해서는 기본값을 그대로 유지하십시오.
    5. 추가 를 클릭하십시오.
  3. 새로 작성한 인증 정보를 펼치고 값을 기록하십시오. 이는 나중 단계에서 필요합니다.
  4. 관리아래에서 대시보드 실행을 클릭하십시오.
  5. 데이터베이스 만들기를 클릭하여 secure-file-storage-metadata 라는 이름의 비분할 데이터베이스를 만듭니다.

사용자 인증

App ID를 사용하면 리소스를 보안하고 애플리케이션에 인증을 추가할 수 있습니다. 이 학습서에서 사용되지 않는 대안으로, App ID 는 Kubernetes Service 를 사용하여 통합 클러스터에 배치된 애플리케이션에 액세스하는 사용자를 인증할 수 있습니다.

App ID 서비스를 작성하기 전에 Key Protect 서비스에 대한 서비스 액세스 권한을 부여하십시오. 사용자가 사용 중인 Key Protect 인스턴스의 관리자 또는 계정 소유자여야 합니다. 또한 App ID 서비스에 대한 뷰어 액세스 권한이 있어야 합니다.

  1. 관리 > IAM 액세스 권한 > 권한으로 이동한 다음, 생성을 클릭합니다.
  2. 선택하십시오 App ID 서비스로 소스 서비스를 사용합니다.
  3. Key Protect을(를) 대상 서비스로 선택하십시오.
  4. 선택한 속성을 기반으로 하는 리소스로 전환하고 인스턴스 ID를 선택하고, 이전에 작성된 Key Protect 서비스 인스턴스를 선택하십시오.
  5. 서비스 액세스에서 독자 역할을 지정하십시오.
  6. 권한 부여를 클릭하여 위임된 권한을 확인하십시오.

이제 App ID 서비스의 인스턴스를 작성하십시오.

  1. 다음으로 이동합니다 App ID 서비스 생성 페이지.

    1. 이전 서비스에 사용된 것과 동일한 위치를 사용하십시오.
    2. 누진 계층을 플랜으로 선택하십시오.
    3. 서비스 이름을 secure-file-storage-appid 로 설정합니다.
    4. 이전 서비스와 동일한 리소스 그룹을 선택하십시오.
    5. 각각의 드롭 다운에서 권한 부여된 Key Protect 서비스 이름루트 키를 선택하십시오.
    6. 작성을 클릭하십시오.
  2. 인증 관리인증 설정 탭에서 애플리케이션에 사용할 도메인을 가리키는 웹 경로 재지정 URL을 추가하십시오. URL 형식은 https://secure-file-storage.<Ingress subdomain>/redirect_uri입니다. 예를 들어, 다음과 같습니다.

    • ingress 서브도메인: mycluster-1234-d123456789.us-south.containers.appdomain.cloud
    • URL 의 리디렉션은 https://secure-file-storage.mycluster-1234-d123456789.us-south.containers.appdomain.cloud/redirect_uri 입니다.

    App ID 사용하려면 웹 리디렉션 URL https 또는 http 여야 합니다. 클러스터 대시보드 또는 ibmcloud ks cluster get --cluster <cluster-name> 에서 Ingress 하위 도메인을 볼 수 있습니다.

  3. 런타임 활동인증 설정 아래에 있는 동일한 탭에서 IBM Cloud Activity Tracker Event Routing의 이벤트 캡처를 사용으로 설정하십시오.

  4. 서비스 인증 정보를 작성하십시오.

    1. 서비스 인증 정보에서 새 인증 정보를 작성하십시오.
    2. 이름을 secure-file-storage-appid-acckey 로 설정합니다.
    3. 역할 에 대해 관리자를 선택하십시오.
    4. 나머지 필드에 대해서는 기본값을 그대로 유지하십시오.
    5. 추가 를 클릭하십시오.

App ID 대시보드에서는 사용되는 ID 관리자, 그리고 로그인 및 사용자 관리 경험을 사용자 정의해야 합니다. 이 튜토리얼에서는 작업을 간단하게 하기 위해 기본값을 사용합니다. 프로덕션 환경에서는 다요소 인증(MFA) 및 고급 비밀번호 규칙을 사용하는 것을 고려하십시오.

앱 배치

모든 서비스가 구성되었습니다. 이 절에서는 클러스터에 튜토리얼 애플리케이션을 배치합니다. 이 모든 작업은 셸 환경(터미널)에서 수행할 수 있습니다.

코드 가져오기

  1. 애플리케이션의 코드를 가져오십시오.
    git clone https://github.com/IBM-Cloud/secure-file-storage
    
  2. secure-file-storage/app 디렉토리로 이동하십시오.
    cd secure-file-storage/app
    

구성 설정 및 신임 정보 채우기

  1. 로그인하지 않은 경우, ibmcloud login 또는 ibmcloud login --sso 을 사용하여 대화형으로 로그인하십시오. IBM Cloud 지역 및 리소스 그룹을 대상으로 지정하십시오.

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

    문서에 있는 일반 IBM Cloud CLI(ibmcloud) 명령 주제에서 더 많은 CLI 명령을 찾아볼 수 있습니다.

  2. 다음 단계에서 구성 파일을 생성하는 데 필요한 환경 변수를 설정하십시오.

    1. 먼저 <YOUR_CLUSTER_NAME>을(를) 바꾸어 클러스터 이름을 설정하십시오.
      export MYCLUSTER=<YOUR_CLUSTER_NAME>
      
    2. ibmcloud ks 명령을 사용하여 Ingress 하위 도메인을 설정하십시오.
      export INGRESS_SUBDOMAIN=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressHostname) // .ingress.hostname')
      
    3. ibmcloud ks 명령을 사용하여 Ingress 시크릿을 설정하십시오.
      export INGRESS_SECRET=$(ibmcloud ks cluster get --cluster $MYCLUSTER --output json | jq -r 'try(.ingressSecretName) // .ingress.secretName')
      
    4. 이미지 저장소 이름을 사전 빌드된 이미지 icr.io/solution-tutorials/tutorial-cloud-e2e-security(으)로 설정하십시오.
      export IMAGE_REPOSITORY=icr.io/solution-tutorials/tutorial-cloud-e2e-security
      
    5. 기본값을 대체하여 추가 환경 변수를 설정하십시오.
      export BASENAME=secure-file-storage
      
    6. 사용할 네임스페이스를 설정하십시오.
      export TARGET_NAMESPACE=default
      
    7. 선택적으로 default 네임스페이스와 다른 Kubernetes 네임스페이스 및 이미지용 IBM Cloud Container Registry 를 사용하는 경우에만 환경 변수 $IMAGE_PULL_SECRET 를 설정합니다. 이는 추가 Kubernetes 구성(예: 새 네임스페이스에 컨테이너 레지스트리 시크릿 작성)을 필요로 합니다.
  3. secure-file-storage.yamlsecure-file-storage-ingress.yaml 를 생성하려면 아래 명령어를 실행하십시오. 방금 구성한 환경 변수를 템플릿 파일인 secure-file-storage.template.yamlsecure-file-storage-ingress.template.yaml 와 함께 사용합니다.

    ./generate_yaml.sh
    

    예를 들어, 애플리케이션이 default Kubernetes 네임스페이스에 배치된다고 가정해 보십시오.

    스크립트에서 사용하는 환경 변수
    가변 설명
    $IMAGE_PULL_SECRET 제공된 이미지를 사용할 때 정의하지 않음 레지스트리에 액세스하는 데 필요한 시크릿입니다.
    $IMAGE_REPOSITORY icr.io/solution-tutorials/tutorial-cloud-e2e-security 또는 icr.io/namespace/image-name 이전 절의 레지스트리 URL, 네임스페이스 및 이미지 이름을 기반으로 빌드된 이미지의 URL과 유사한 ID입니다.
    $TARGET_NAMESPACE default 앱이 푸시될 Kubernetes 네임스페이스입니다.
    $INGRESS_SUBDOMAIN secure-file-stora-123456.us-south.containers.appdomain.cloud 클러스터 개요 페이지에서, 또는 ibmcloud ks cluster get --cluster <your-cluster-name>을(를) 사용하여 검색합니다.
    $INGRESS_SECRET secure-file-stora-123456 ibmcloud ks cluster get --cluster <your-cluster-name>(을)를 사용하여 검색합니다.
    $BASENAME secure-file-storage 리소스를 식별하는 데 사용되는 접두부입니다.
  4. credentials.template.envcredentials.env에 복사하십시오.

    cp credentials.template.env credentials.env
    
  5. credentials.env를 편집하고 공백을 다음 값으로 채우십시오.

    • Object Storage 서비스 지역 엔드포인트, 버킷 이름, Object Storage 서비스에 대해 작성된 인증 정보
    • secure-file-storage-cloudant의 자격 증명,
    • 및 App ID에 대한 신임 정보입니다. appid_redirect_uris 변수는 위에서 설명한 대로 경로 재지정 URI의 쉼표로 구분된 목록입니다.

    Cloud Shell을(를) 사용할 때 nano credentials.env를 사용하여 파일을 편집할 수 있습니다.

클러스터 배치

  1. 지침에 설명된 대로 클러스터에 액세스하십시오. 콘솔 개요 페이지의 작업... 메뉴 에서 액세스할 수 있는 CLI를 통해 연결하십시오.
    ibmcloud ks cluster config --cluster $MYCLUSTER --admin
    
  2. 대상 네임스페이스에서 Ingress 시크릿을 사용할 수 있는지 확인하십시오. 그렇지 않은 경우에는 이를 작성해야 합니다.
    ibmcloud ks ingress secret ls -c $MYCLUSTER
    
    Ingress 시크릿에 CRN이 있는 경우 해당 이름 및 CRN을 사용하여 대상 네임스페이스에서 시크릿을 작성하십시오.
    ibmcloud ks ingress secret create -c $MYCLUSTER -n $TARGET_NAMESPACE --cert-crn <crn-shown-in-the-output-above> --name <secret-name-shown-above>
    
    Ingress 시크릿에 CRN이 없는 경우 다음 명령을 사용하여 대상 네임스페이스에서 다시 작성하십시오.
    kubectl get secret $INGRESS_SECRET --namespace=ibm-cert-store -oyaml | grep -v '^\s*namespace:\s'| kubectl apply  --namespace=$TARGET_NAMESPACE -f -
    
  3. 애플리케이션에서 서비스 인증 정보를 얻는 데 사용하는 시크릿을 작성하십시오.
    kubectl create secret generic secure-file-storage-credentials --from-env-file=credentials.env
    
  4. 앱을 배치하십시오.
    kubectl apply -f secure-file-storage.yaml
    
  5. 공용 인터넷에서 액세스할 수 있도록 앱에 대한 네트워크 라우팅 ( ClusterIP 서비스 및 Ingress) 을 배치하십시오.
    kubectl apply -f secure-file-storage-ingress.yaml
    

애플리케이션 테스트

애플리케이션은 https://secure-file-storage.<your-cluster-ingress-subdomain>/에서 액세스할 수 있습니다.

  1. 애플리케이션의 홈 페이지로 이동하십시오. App ID 기본 로그인 페이지로 경로 재지정됩니다.
  2. 유효한 이메일 주소를 사용하여 새 계정으로 가입하십시오.
  3. 받은 편지함에서 계정 확인을 위한 이메일이 수신되기를 기다리십시오.
  4. 로그인하십시오.
  5. 업로드할 파일을 선택하십시오. 업로드를 클릭하십시오.
  6. 파일에 대해 공유 조치를 사용하여 다른 사용자가 파일에 액세스할 수 있도록 공유 가능한, 사전 서명된 URL을 생성하십시오. 이 링크는 5분 후 만료되도록 설정됩니다.

인증된 사용자는 파일을 저장할 수 있는 고유 공간을 갖습니다. 다른 사용자의 파일은 볼 수 없지만, 사전 서명된 URL을 생성하여 특정 파일에 대한 임시 액세스 권한을 부여하는 것은 가능합니다.

소스 코드 저장소에서 이 애플리케이션에 대한 자세한 내용을 확인할 수 있습니다.

보안 이벤트 검토

이제 애플리케이션 및 해당 서비스가 배치되었으므로, 이 프로세스에서 생성된 보안 이벤트를 검토할 수 있습니다. 모든 이벤트는 IBM Cloud Logs 인스턴스에서 사용 가능합니다.

  1. Observability 대시보드에서 클라우드 로그 탭을 선택하고 감사 이벤트를 수신하고 있는 IBM Cloud Logs 인스턴스를 찾은 다음 대시보드 열기를 클릭합니다.
  2. 리소스를 프로비저닝하고 이와 상호 작용하면서 서비스에 전송한 모든 로그를 검토하십시오.

선택사항: 사용자 정의 도메인 사용 및 네트워크 트래픽 암호화

기본적으로, 이 애플리케이션은 containers.appdomain.cloud 의 일반 하위 도메인에서 액세스할 수 있습니다. 그러나 배치된 앱에 사용자 정의 도메인을 사용할 수도 있습니다. https, 암호화된 네트워크 트래픽을 사용한 액세스를 계속 지원하기 위해서는 원하는 호스트 이름에 대한 인증서 또는 와일드카드 인증서를 제공해야 합니다. Kubernetes 애플리케이션으로 통합하기 위해 DNS 이름 및 TLS 인증서를 관리하는 데 사용할 수 있는 다양한 서비스 조합이 있습니다. 이 학습서에서는 다음 서비스를 사용합니다.

  • IBM Cloud Internet Services (CIS) 서비스에서 관리하는 자체 사용자 정의 DNS 도메인의 DNS 하위 도메인, secure-file-storage. 이 학습서의 단계를 단순화하기 위해 사용자 정의 DNS 도메인의 이름으로 example.com 를 사용합니다. 모든 단계에서 사용자 정의 DNS 도메인으로 대체해야 합니다.
  • Let's Encrypt 는 TLS 인증서를 생성합니다.
  • IBM Cloud Secrets Manager-Let's Encrypt와 통합하여 secure-file-storage.example.com 에 대한 TLS 인증서를 생성하고 안전하게 저장합니다.
  • Secrets Manager 에서 직접 시크릿 TLS 인증서를 가져오기 위한 Kubernetes 외부 시크릿 운영자

다음 단계 대신 DNS 제공자에서 앱 URI를 가리키는 CNAME을 작성하고 TLS 인증서를 생성하고 해당 컴포넌트를 Secrets Manager로 가져올 수도 있습니다.

CIS 및 Secrets Manager 인스턴스 프로비저닝

  • IBM Cloud Internet Services 인스턴스가 필요합니다. 기존 인스턴스를 사용하거나 이 카탈로그 항목 에서 인스턴스를 작성하십시오. 무료 평가판을 포함하여 여러 가격 플랜을 사용할 수 있습니다. 새 CIS 의 프로비저닝 프로세스는 CIS제공 도메인 이름 서버를 사용하도록 기존 DNS 등록자 ( IBM Cloud에 없을 수 있음) 를 구성하는 방법을 설명합니다. 쉘 창에서 사용자 정의 도메인을 내보내십시오.
    export MYDOMAIN=example.com
    
  • Secrets Manager 인스턴스가 필요합니다. 기존 인스턴스를 사용하거나 Secrets Manager 서비스 인스턴스 작성 에 설명된 새 인스턴스를 작성하십시오. 새 인스턴스를 작성하는 경우, 이름을 secure-file-storage-sm 으로 지정하십시오. 앞서 만든 비밀번호 저장소( Key Protect ) 인스턴스와 통합하면 휴면 비밀번호의 보안을 강화할 수 있습니다.

Kubernetes 클러스터 Ingress 하위 도메인 을 별명으로 사용하여 CIS 인스턴스에서 DNS 항목을 작성하십시오.

  1. CIS 서비스 인스턴스를 여십시오. 리소스 목록 에서 찾을 수 있습니다.
  2. 왼쪽의 신뢰성 탭을 클릭합니다.
  3. 상단의 DNS 탭을 클릭합니다.
  4. DNS 레코드 섹션으로 아래로 스크롤하고 추가 를 클릭하여 새 레코드를 작성하십시오.
    1. 유형: CNAME
    2. 이름: secure-file-storage
    3. 별명: 클러스터의 Ingress 하위 도메인. 다음 명령을 실행하여 쉘에서 올바른 값을 얻을 수 있습니다.
      echo $INGRESS_SUBDOMAIN
      
    4. 추가 를 클릭하여 새 레코드를 추가하십시오.

Let's Encrypt에 Secrets Manager 인스턴스를 연결하십시오.

  1. Let's Encrypt ACME 계정 및 연관된 .pem 파일이 필요합니다. 기존 항목을 사용하거나 항목을 작성 하십시오.

    1. acme-account-creation-tool 을 설치하십시오. Let's Encrypt ACME 계정 작성 에는 지시사항 및 작성 도구에 대한 링크가 포함되어 있습니다.
    2. acme-account-creation-tool 을 실행하여 이 secure-file-storage 예제에 대해 특별히 계정을 작성하십시오. 다음은 예제입니다.
      $ ./acme-account-creation-tool-darwin-amd64 -e YOUREMAIL -o secure-file-storage.example.com -d letsencrypt-prod
      INFO[2022-12-28T13:30:00-08:00] Registering a new account with the CA
      INFO[2022-12-28T13:30:00-08:00] Account information written to file : secure-file-storage.example.com-account-info.json
      INFO[2022-12-28T13:30:00-08:00] Private key written to file : secure-file-storage.example.com-private-key.pem
      
      Account Info
      {
         "email": "YOUREMAIL",
         "registration_uri": "https://acme-v02.api.letsencrypt.org/acme/acct/891897087",
         "registration_body": {
            "status": "valid",
            "contact": [
               "mailto:YOUREMAIL"
            ]
         }
      }%
      $ ls
      secure-file-storage.example.com-account-info.json secure-file-storage.example.com-private-key.pem
      
  2. Let's Encrypt ACME 계정을 Secrets Manager 인스턴스에 연결하십시오. 자세한 정보는 UI에서 인증 기관 구성 추가 를 참조하십시오.

    1. Secrets Manager 서비스 인스턴스를 여십시오. 리소스 목록 에서 찾을 수 있습니다.
    2. 왼쪽에서 시크릿 엔진 을 열고 공용 인증서를 클릭하십시오.
    3. 인증 기관 아래에서 추가를 클릭하십시오.
    4. 이름: LetsEncrypt 및 인증 기관: Let's Encrypt.
    5. 파일 선택 아래에서 파일 추가 를 클릭하고 선택기에서 secure-file-storage.example.com-private-key.pem 또는 기존 .pem 파일을 선택하십시오.
    6. 추가 를 클릭하십시오.
  3. CIS 을 DNS 제공자로 연결하십시오.

    1. DNS 제공자 아래에서 추가를 클릭하십시오.
    2. 이름 cis를 지정하고 드롭 다운에서 Cloud Internet Services 를 선택하십시오.
    3. 다음 을 클릭하십시오.
    4. 권한 탭에서 CIS 인스턴스를 선택하십시오.
    5. 추가 를 클릭하십시오.
  4. Secrets Manager에서 인증서를 주문하십시오.

    1. Secrets Manager 서비스를 열고 왼쪽에서 시크릿을 선택하십시오.
    2. 추가 를 클릭하십시오.
    3. 공용 인증서 를 클릭한 후 다음을 클릭하십시오.
    4. 다음 양식을 완료하십시오.
      • 이름 -기억할 수 있는 이름을 입력하십시오.
      • 설명 -선택사항에 대한 설명을 입력합니다.
      • 다음을 클릭하십시오.
      • 인증 기관에서 구성된 Let's Encrypt 인증 기관 엔진을 선택하십시오.
      • 키 알고리즘 아래에서 원하는 알고리즘을 선택하십시오.
      • 번들 인증서 -중단
      • 자동 인증서 순환 - 중단
      • DNS 제공자에서 구성된 DNS 제공자 인스턴스를 선택하십시오.
      • 도메인 선택을 클릭하고 와일드카드로 선택을 클릭하고 도메인 자체를 선택하지 않은 상태로 두고 완료를 클릭하십시오.
    5. 다음 을 클릭하십시오.
    6. 선택사항을 검토하고 추가를 클릭하십시오.
    7. 활성 시크릿에 대한 세 개의 세로 점 메뉴를 클릭하고 세부사항 을 선택한 후 대화 상자에서 CRN 을 복사하십시오. 쉘의 값을 내보내십시오. 이는 다음과 같습니다.
      export PUBLIC_CERT_CRN=crn:v1:bluemix:public:secrets-manager:eu-de:a/abc123abc123abc123abc123:99999999-9999-9999-9999-999999999999:secret:aaaaaaaa-9999-9999-aaaa-123456781234
      
  5. 이 튜토리얼에서는 서비스 대 서비스 권한을 활용하여 클러스터에 Secrets Manager 서비스 인스턴스 및 해당 관리 시크릿에 대한 액세스를 제공합니다.

    1. IAM 권한 부여 페이지 로 이동하고 작성 을 클릭하여 새 권한을 추가하십시오.
    2. 소스 에서 Kubernetes Service 를 선택한 후 특정 리소스를 클릭하여 선택하십시오. 그런 다음 소스 서비스 인스턴스에 대해 클러스터를 선택하십시오.
    3. 대상 아래에서 Secrets Manager 를 선택한 후 특정 리소스인스턴스 ID 로 이동하여 Secrets Manager 서비스 인스턴스를 선택하십시오.
    4. 마지막으로 역할 에서 관리자 를 선택하고 권한 부여를 클릭하여 권한을 부여하십시오.
  6. MYDOMAIN및 PUBLIC_CERT_CRN의 값이 환경으로 반출되었는지 확인하십시오.

    echo MYDOMAIN $(printenv MYDOMAIN)
    echo PUBLIC_CERT_CRN $(printenv PUBLIC_CERT_CRN)
    
  7. 새 TLS 인증서에서 Ingress 시크릿을 작성하십시오.

    ibmcloud ks ingress secret create --name secure-file-storage-certificate --cluster $MYCLUSTER --cert-crn $PUBLIC_CERT_CRN --namespace $TARGET_NAMESPACE
    
  8. 아래 명령을 실행하여 구성 파일의 새 사본을 생성하십시오. 템플리트 파일 secure-file-storage.template.yamlsecure-file-storage.template-ingress.yaml 와 함께 구성한 모든 환경 변수를 사용합니다. 먼저 현재 버전을 저장할 수 있습니다.

    cp secure-file-storage.yaml /tmp
    cp secure-file-storage-ingress.yaml /tmp
    
    ./generate_yaml.sh
    
  9. 클러스터에 구성 변경 사항을 적용합니다

    kubectl apply -f secure-file-storage-ingress.yaml
    
  10. 브라우저로 다시 전환하십시오. IBM Cloud 리소스 목록에서 이전에 작성하여 구성한 App ID 서비스를 찾고 해당 관리 대시보드를 실행하십시오.

  • 왼쪽에서 인증 관리 를 클릭하고 맨 위에서 인증 설정 탭을 클릭하십시오.
  • 웹 경로 재지정 URL 추가 양식에서 https://secure-file-storage.example.com/redirect_uri을(를) 다른 URL로 추가하십시오.
  1. 이제 모든 항목의 설정이 완료되었습니다. 구성된 사용자 정의 도메인 https://secure-file-storage.<your custom domain>에서 앱에 액세스하여 앱을 테스트하십시오.

보안: 서비스 인증 정보 순환

보안을 유지하려면 서비스 인증 정보, 비밀번호 및 기타 키를 정기적으로 교체(순환)해야 합니다. 많은 보안 정책에는 90일마다 또는 유사한 빈도로 비밀번호와 인증 정보를 변경해야 하는 요구사항이 있습니다. 또한 직원이 팀을 떠나거나 보안 사고가 의심되는 경우, 즉시 액세스 권한을 변경해야 합니다.

이 튜토리얼에서는 파일 및 메타데이터의 저장부터 애플리케이션 액세스 보호, 컨테이너 이미지 관리에 이르기까지 다양한 목적을 위해 서비스가 사용됩니다. 서비스 인증 정보 순환은 일반적으로 다음과 관련됩니다.

  • 기존 서비스 키 이름 바꾸기
  • 이전에 사용된 이름으로 인증 정보 새 세트 작성하기
  • 기존 Kubernetes 시크릿의 액세스 데이터를 바꾸고 변경 적용하기
  • 검증 후에 기존 서비스 키를 삭제하여 이전 인증 정보 비활성화하기

튜토리얼 확장

보안은 절대 완벽하지 않습니다. 아래 제안사항을 수행하여 애플리케이션의 보안을 강화해 보십시오.

리소스 공유

이 솔루션 학습서의 리소스에 대해 다른 사용자와 협력하려는 경우에는 구성요소를 전부, 또는 일부 공유할 수 있습니다. IBM Cloud Identity and Access Management(IAM)는 사용자 및 서비스 ID의 인증과 클라우드 리소스에 대한 액세스 제어를 가능하게 합니다. 리소스에 대한 액세스 권한을 부여하기 위해 사용자, 서비스 ID 또는 액세스 그룹사전 정의된 액세스 역할을 지정할 수 있습니다. 액세스 그룹을 작성하여 사용자 및 서비스 ID 세트를 단일 엔티티로 구성할 수 있습니다. 그러면 사용자가 액세스 권한을 쉽게 지정할 수 있습니다. 개별 사용자 또는 서비스 ID마다 동일한 액세스 권한을 여러 번 지정하는 대신 그룹에 단일 정책을 지정할 수 있습니다. 따라서 개발 프로젝트에서 역할 그룹을 구성하고 보안 및 프로젝트 관리를 조정할 수 있습니다.

개별 서비스 및 사용 가능한 IAM 액세스 역할에 대한 정보는 다음을 참조하십시오.

시작하려면 액세스 관리 우수 사례 및 액세스 그룹을 정의하는 방법을 확인하십시오.

자원 제거

리소스를 제거하려면 배치된 컨테이너를 삭제한 후 프로비저닝된 서비스를 삭제하십시오.

다른 사용자와 계정을 공유하는 경우에는 항상 자신의 자원만 삭제해야 합니다.

  1. 배치된 네트워크 구성 및 컨테이너를 삭제하십시오.

    kubectl delete -f secure-file-storage-ingress.yaml
    

    그 다음에 다음 명령을 실행합니다:

    kubectl delete -f secure-file-storage.yaml
    
  2. 배치에 대한 시크릿을 삭제하십시오.

    kubectl delete secret secure-file-storage-credentials
    
  3. Secrets Manager를 활용한 경우 서비스 권한에 대한 관련 서비스를 제거하십시오.

  4. IBM Cloud 리소스 목록에서 이 튜토리얼을 위해 작성된 리소스를 찾으십시오. 검색 상자를 사용하고 secure-file-storage를 패턴으로 사용하십시오. 각 서비스 옆에 있는 컨텍스트 메뉴를 클릭하고 서비스 삭제를 선택하여 서비스를 삭제하십시오. Key Protect 서비스는 키가 삭제된 후에만 제거할 수 있다는 점을 참고하십시오. 관련 대시보드로 이동하여 키를 삭제하려면 서비스 인스턴스를 클릭하십시오.

리소스에 따라 즉시 삭제되지 않고 보유될 수 있습니다(기본 7일 동안). 리소스를 영구적으로 삭제하여 재확보하거나 보유 기간 내에 리소스를 복원할 수 있습니다. 리소스 재확보 사용 방법은 이 문서를 참조하십시오.

관련 컨텐츠