InfoGrab DocsInfoGrab Docs

튜토리얼: GitLab에서 Fortanix Data Security Manager(DSM) 사용하기

요약

Fortanix Data Security Manager(DSM)를 GitLab CI/CD 파이프라인의 시크릿 관리자로 사용할 수 있습니다. 이 튜토리얼에서는 Fortanix DSM에서 새 시크릿을 생성하거나 기존 시크릿을 사용하여 GitLab CI/CD job에서 활용하는 데 필요한 단계를 설명합니다.

Fortanix Data Security Manager(DSM)를 GitLab CI/CD 파이프라인의 시크릿 관리자로 사용할 수 있습니다.

이 튜토리얼에서는 Fortanix DSM에서 새 시크릿을 생성하거나 기존 시크릿을 사용하여 GitLab CI/CD job에서 활용하는 데 필요한 단계를 설명합니다. 데이터 보안을 강화하고 CI/CD 파이프라인을 최적화하도록 이 통합을 구현하려면 안내를 주의 깊게 따르십시오.

시작하기 전에#

다음 사항을 준비했는지 확인합니다:

  • 적절한 관리자 권한을 가진 Fortanix DSM 계정 액세스 권한. 자세한 내용은 Fortanix Data Security Manager 시작하기를 참고합니다.
  • 통합을 설정하려는 프로젝트에 액세스할 수 있는 GitLab 계정.
  • 시크릿 생성 및 가져오기를 포함하여 Fortanix DSM에 시크릿을 저장하는 프로세스에 대한 지식.
  • 그룹, 애플리케이션, 플러그인, 변수, 시크릿 관리를 위해 Fortanix DSM 및 GitLab에서 필요한 권한.

새 시크릿 생성 및 가져오기#

Fortanix DSM에서 새 시크릿을 생성하여 GitLab에서 사용하려면:

  1. Fortanix DSM 계정에 로그인합니다.

  2. Fortanix DSM에서 새 그룹과 애플리케이션을 생성합니다.

  3. 애플리케이션의 인증 방법으로 API 키를 구성합니다.

  4. 다음 코드를 사용하여 Fortanix DSM에서 새 플러그인을 생성합니다:

    numericAlphabet = "0123456789"
    alphanumericAlphabet = numericAlphabet .. "abcdefghijklmnopqrstuvwxyz"
    alphanumericCapsAlphabet = alphanumericAlphabet .. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    alphanumericCapsSymbolsAlphabets = alphanumericCapsAlphabet .. "!@#$&*_%="
    
    function genPass(alphabet, len, name, import)
        local alphabetSize = #alphabet
        local password = ''
    
        for i = 1, len, 1 do
            local random_char = math.random(alphabetSize)
            password = password .. string.sub(alphabet, random_char, random_char)
        end
    
        local pass = Blob.from_bytes(password)
    
        if import == "yes" then
            local sobject = assert(Sobject.import { name = name, obj_type = "SECRET", value = pass, key_ops = {'APPMANAGEABLE', 'EXPORT'} })
            return password
        end
    
        return password;
    end
    
    function run(input)
        if input.type == "numeric" then
            return genPass(numericAlphabet, input.length, input.name, input.import)
        end
    
        if input.type == "alphanumeric" then
            return genPass(alphanumericAlphabet, input.length, input.name, input.import)
        end
    
        if input.type == "alphanumeric_caps" then
            return genPass(alphanumericCapsAlphabet, input.length, input.name, input.import)
        end
    
        if input.type == "alphanumeric_caps_symbols" then
            return genPass(alphanumericCapsSymbolsAlphabets, input.length, input.name, input.import)
        end
    end
    

    자세한 내용은 Fortanix 문서의 Plugin Library를 참고합니다.

    • Fortanix DSM에 시크릿을 저장하려면 import 옵션을 yes로 설정합니다:

      {
          "type": "alphanumeric_caps",
          "length": 64,
          "name": "GitLab-Secret",
          "import": "yes"
      }
      
    • 순환(rotation)을 위해 새 값만 생성하려면 import 옵션을 no로 설정합니다:

      {
          "type": "numeric",
          "length": 64,
          "name": "GitLab-Secret",
          "import": "no"
      }
      
  5. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  6. 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.

  7. Variables를 펼치고 다음 변수를 추가합니다:

    • FORTANIX_API_ENDPOINT
    • FORTANIX_API_KEY
    • FORTANIX_PLUGIN_ID
  8. 통합을 사용하도록 프로젝트에서 .gitlab-ci.yml 구성 파일을 생성하거나 편집합니다:

    stages:
      - build
    
    build:
      stage: build
      image: ubuntu
      script:
        - apt-get update
        - apt install --assume-yes jq
        - apt install --assume-yes curl
        - jq --version
        - curl --version
        - secret=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/sys/v1/plugins/${FORTANIX_PLUGIN_ID} --data "{\"type\":\"alphanumeric_caps\", \"name\":\"$CI_PIPELINE_ID\",\"import\":\"yes\", \"length\":\"48\"}" | jq --raw-output)
        - nsecret=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/sys/v1/plugins/${FORTANIX_PLUGIN_ID} --data "{\"type\":\"alphanumeric_caps\", \"import\":\"no\", \"length\":\"48\"}" | jq --raw-output)
        - encodesecret=$(echo $nsecret | base64)
        - rotate=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/rekey --data "{\"name\":\"$CI_PIPELINE_ID\", \"value\":\"$encodesecret\"}" | jq --raw-output .kid)
    
  9. .gitlab-ci.yml 파일을 저장하면 파이프라인이 자동으로 실행되어야 합니다. 실행되지 않으면 Build > Pipelines > Run pipeline을 선택합니다.

  10. Build > Jobs로 이동하여 build job의 로그를 확인합니다:

    Fortanix DSM 구성이 성공적으로 완료된 것을 보여주는 build job 로그.

Fortanix Data Security Manager 시크릿 보기.

Fortanix DSM의 기존 시크릿 사용#

Fortanix DSM에 이미 존재하는 시크릿을 GitLab에서 사용하려면:

  1. Fortanix에서 시크릿이 내보내기 가능(exportable)으로 표시되어 있어야 합니다:

    Fortanix Data Security Manager의 내보내기 가능 시크릿 설정.

  2. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  3. 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.

  4. Variables를 펼치고 다음 변수를 추가합니다:

    • FORTANIX_API_ENDPOINT
    • FORTANIX_API_KEY
    • FORTANIX_PLUGIN_ID
  5. 통합을 사용하도록 프로젝트에서 .gitlab-ci.yml 구성 파일을 생성하거나 편집합니다:

    stages:
      - build
    
    build:
      stage: build
      image: ubuntu
      script:
      - apt-get update
      - apt install --assume-yes jq
      - apt install --assume-yes curl
      - jq --version
      - curl --version
      - secret=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/export --data "{\"name\":\"${FORTANIX_SECRET_NAME}\"}" | jq --raw-output .value)
    
  6. .gitlab-ci.yml 파일을 저장하면 파이프라인이 자동으로 실행되어야 합니다. 실행되지 않으면 Build > Pipelines > Run pipeline을 선택합니다.

  7. Build > Jobs로 이동하여 build job의 로그를 확인합니다:

    • 기존 Fortanix 시크릿을 성공적으로 가져온 것을 보여주는 build job 로그.

코드 서명#

GitLab 환경에서 안전하게 코드 서명을 설정하려면:

  1. Fortanix DSM 계정에 로그인합니다.

  2. keystore_password와 key_password를 Fortanix DSM에 시크릿으로 가져옵니다. 내보내기 가능으로 표시되어 있는지 확인합니다.

    Fortanix Data Security Manager에 내보내기 가능 시크릿으로 가져온 keystore 및 key 암호.

  3. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  4. 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.

  5. Variables를 펼치고 다음 변수를 추가합니다:

    • FORTANIX_API_ENDPOINT
    • FORTANIX_API_KEY
    • FORTANIX_SECRET_NAME_1(keystore_password용)
    • FORTANIX_SECRET_NAME_2(key_password용)
  6. 통합을 사용하도록 프로젝트에서 .gitlab-ci.yml 구성 파일을 생성하거나 편집합니다:

    stages:
      - build
    
    build:
      stage: build
      image: ubuntu
      script:
      - apt-get update -qy
      - apt install --assume-yes jq
      - apt install --assume-yes curl
      - apt-get install wget
      - apt-get install unzip
      - apt-get install --assume-yes openjdk-8-jre-headless openjdk-8-jdk   # Install Java
      - keystore_password=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/export --data "{\"name\":\"${FORTANIX_SECRET_NAME_1}\"}" | jq --raw-output .value)
      - key_password=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/export --data "{\"name\":\"${FORTANIX_SECRET_NAME_2}\"}" | jq --raw-output .value)
      - echo "yes" | keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore keystore.jks -storepass $keystore_password -keypass $key_password -dname "CN=test"
      - mkdir -p src/main/java
      - echo 'public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }' > src/main/java/HelloWorld.java
      - javac src/main/java/HelloWorld.java
      - mkdir -p target
      - jar cfe target/HelloWorld.jar HelloWorld -C src/main/java HelloWorld.class
      - jarsigner -keystore keystore.jks -storepass $keystore_password -keypass $key_password -signedjar signed.jar target/HelloWorld.jar mykey
    
  7. .gitlab-ci.yml 파일을 저장하면 파이프라인이 자동으로 실행되어야 합니다. 실행되지 않으면 Build > Pipelines > Run pipeline을 선택합니다.

  8. Build > Jobs로 이동하여 build job의 로그를 확인합니다:

    • Fortanix 시크릿을 사용한 코드 서명 프로세스를 보여주는 build job 로그.

튜토리얼: GitLab에서 Fortanix Data Security Manager(DSM) 사용하기

GitLab v19.5
Tier: Free, Premium, Ultimate
Offering: GitLab.com, GitLab Self-Managed, GitLab Dedicated
원문 보기

요약

Fortanix Data Security Manager(DSM)를 GitLab CI/CD 파이프라인의 시크릿 관리자로 사용할 수 있습니다. 이 튜토리얼에서는 Fortanix DSM에서 새 시크릿을 생성하거나 기존 시크릿을 사용하여 GitLab CI/CD job에서 활용하는 데 필요한 단계를 설명합니다.

Fortanix Data Security Manager(DSM)를 GitLab CI/CD 파이프라인의 시크릿 관리자로 사용할 수 있습니다.

이 튜토리얼에서는 Fortanix DSM에서 새 시크릿을 생성하거나 기존 시크릿을 사용하여 GitLab CI/CD job에서 활용하는 데 필요한 단계를 설명합니다. 데이터 보안을 강화하고 CI/CD 파이프라인을 최적화하도록 이 통합을 구현하려면 안내를 주의 깊게 따르십시오.

시작하기 전에#

다음 사항을 준비했는지 확인합니다:

  • 적절한 관리자 권한을 가진 Fortanix DSM 계정 액세스 권한. 자세한 내용은 Fortanix Data Security Manager 시작하기를 참고합니다.
  • 통합을 설정하려는 프로젝트에 액세스할 수 있는 GitLab 계정.
  • 시크릿 생성 및 가져오기를 포함하여 Fortanix DSM에 시크릿을 저장하는 프로세스에 대한 지식.
  • 그룹, 애플리케이션, 플러그인, 변수, 시크릿 관리를 위해 Fortanix DSM 및 GitLab에서 필요한 권한.

새 시크릿 생성 및 가져오기#

Fortanix DSM에서 새 시크릿을 생성하여 GitLab에서 사용하려면:

  1. Fortanix DSM 계정에 로그인합니다.

  2. Fortanix DSM에서 새 그룹과 애플리케이션을 생성합니다.

  3. 애플리케이션의 인증 방법으로 API 키를 구성합니다.

  4. 다음 코드를 사용하여 Fortanix DSM에서 새 플러그인을 생성합니다:

    numericAlphabet = "0123456789"
    alphanumericAlphabet = numericAlphabet .. "abcdefghijklmnopqrstuvwxyz"
    alphanumericCapsAlphabet = alphanumericAlphabet .. "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
    alphanumericCapsSymbolsAlphabets = alphanumericCapsAlphabet .. "!@#$&*_%="
    
    function genPass(alphabet, len, name, import)
        local alphabetSize = #alphabet
        local password = ''
    
        for i = 1, len, 1 do
            local random_char = math.random(alphabetSize)
            password = password .. string.sub(alphabet, random_char, random_char)
        end
    
        local pass = Blob.from_bytes(password)
    
        if import == "yes" then
            local sobject = assert(Sobject.import { name = name, obj_type = "SECRET", value = pass, key_ops = {'APPMANAGEABLE', 'EXPORT'} })
            return password
        end
    
        return password;
    end
    
    function run(input)
        if input.type == "numeric" then
            return genPass(numericAlphabet, input.length, input.name, input.import)
        end
    
        if input.type == "alphanumeric" then
            return genPass(alphanumericAlphabet, input.length, input.name, input.import)
        end
    
        if input.type == "alphanumeric_caps" then
            return genPass(alphanumericCapsAlphabet, input.length, input.name, input.import)
        end
    
        if input.type == "alphanumeric_caps_symbols" then
            return genPass(alphanumericCapsSymbolsAlphabets, input.length, input.name, input.import)
        end
    end
    

    자세한 내용은 Fortanix 문서의 Plugin Library를 참고합니다.

    • Fortanix DSM에 시크릿을 저장하려면 import 옵션을 yes로 설정합니다:

      {
          "type": "alphanumeric_caps",
          "length": 64,
          "name": "GitLab-Secret",
          "import": "yes"
      }
      
    • 순환(rotation)을 위해 새 값만 생성하려면 import 옵션을 no로 설정합니다:

      {
          "type": "numeric",
          "length": 64,
          "name": "GitLab-Secret",
          "import": "no"
      }
      
  5. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  6. 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.

  7. Variables를 펼치고 다음 변수를 추가합니다:

    • FORTANIX_API_ENDPOINT
    • FORTANIX_API_KEY
    • FORTANIX_PLUGIN_ID
  8. 통합을 사용하도록 프로젝트에서 .gitlab-ci.yml 구성 파일을 생성하거나 편집합니다:

    stages:
      - build
    
    build:
      stage: build
      image: ubuntu
      script:
        - apt-get update
        - apt install --assume-yes jq
        - apt install --assume-yes curl
        - jq --version
        - curl --version
        - secret=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/sys/v1/plugins/${FORTANIX_PLUGIN_ID} --data "{\"type\":\"alphanumeric_caps\", \"name\":\"$CI_PIPELINE_ID\",\"import\":\"yes\", \"length\":\"48\"}" | jq --raw-output)
        - nsecret=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/sys/v1/plugins/${FORTANIX_PLUGIN_ID} --data "{\"type\":\"alphanumeric_caps\", \"import\":\"no\", \"length\":\"48\"}" | jq --raw-output)
        - encodesecret=$(echo $nsecret | base64)
        - rotate=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/rekey --data "{\"name\":\"$CI_PIPELINE_ID\", \"value\":\"$encodesecret\"}" | jq --raw-output .kid)
    
  9. .gitlab-ci.yml 파일을 저장하면 파이프라인이 자동으로 실행되어야 합니다. 실행되지 않으면 Build > Pipelines > Run pipeline을 선택합니다.

  10. Build > Jobs로 이동하여 build job의 로그를 확인합니다:

    Fortanix DSM 구성이 성공적으로 완료된 것을 보여주는 build job 로그.

Fortanix Data Security Manager 시크릿 보기.

Fortanix DSM의 기존 시크릿 사용#

Fortanix DSM에 이미 존재하는 시크릿을 GitLab에서 사용하려면:

  1. Fortanix에서 시크릿이 내보내기 가능(exportable)으로 표시되어 있어야 합니다:

    Fortanix Data Security Manager의 내보내기 가능 시크릿 설정.

  2. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  3. 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.

  4. Variables를 펼치고 다음 변수를 추가합니다:

    • FORTANIX_API_ENDPOINT
    • FORTANIX_API_KEY
    • FORTANIX_PLUGIN_ID
  5. 통합을 사용하도록 프로젝트에서 .gitlab-ci.yml 구성 파일을 생성하거나 편집합니다:

    stages:
      - build
    
    build:
      stage: build
      image: ubuntu
      script:
      - apt-get update
      - apt install --assume-yes jq
      - apt install --assume-yes curl
      - jq --version
      - curl --version
      - secret=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/export --data "{\"name\":\"${FORTANIX_SECRET_NAME}\"}" | jq --raw-output .value)
    
  6. .gitlab-ci.yml 파일을 저장하면 파이프라인이 자동으로 실행되어야 합니다. 실행되지 않으면 Build > Pipelines > Run pipeline을 선택합니다.

  7. Build > Jobs로 이동하여 build job의 로그를 확인합니다:

    • 기존 Fortanix 시크릿을 성공적으로 가져온 것을 보여주는 build job 로그.

코드 서명#

GitLab 환경에서 안전하게 코드 서명을 설정하려면:

  1. Fortanix DSM 계정에 로그인합니다.

  2. keystore_password와 key_password를 Fortanix DSM에 시크릿으로 가져옵니다. 내보내기 가능으로 표시되어 있는지 확인합니다.

    Fortanix Data Security Manager에 내보내기 가능 시크릿으로 가져온 keystore 및 key 암호.

  3. 상단 바에서 Search or go to를 선택하고 프로젝트를 찾습니다.

  4. 왼쪽 사이드바에서 Settings > CI/CD를 선택합니다.

  5. Variables를 펼치고 다음 변수를 추가합니다:

    • FORTANIX_API_ENDPOINT
    • FORTANIX_API_KEY
    • FORTANIX_SECRET_NAME_1(keystore_password용)
    • FORTANIX_SECRET_NAME_2(key_password용)
  6. 통합을 사용하도록 프로젝트에서 .gitlab-ci.yml 구성 파일을 생성하거나 편집합니다:

    stages:
      - build
    
    build:
      stage: build
      image: ubuntu
      script:
      - apt-get update -qy
      - apt install --assume-yes jq
      - apt install --assume-yes curl
      - apt-get install wget
      - apt-get install unzip
      - apt-get install --assume-yes openjdk-8-jre-headless openjdk-8-jdk   # Install Java
      - keystore_password=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/export --data "{\"name\":\"${FORTANIX_SECRET_NAME_1}\"}" | jq --raw-output .value)
      - key_password=$(curl --silent --request POST --header "Authorization:Basic ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/export --data "{\"name\":\"${FORTANIX_SECRET_NAME_2}\"}" | jq --raw-output .value)
      - echo "yes" | keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore keystore.jks -storepass $keystore_password -keypass $key_password -dname "CN=test"
      - mkdir -p src/main/java
      - echo 'public class HelloWorld { public static void main(String[] args) { System.out.println("Hello, World!"); } }' > src/main/java/HelloWorld.java
      - javac src/main/java/HelloWorld.java
      - mkdir -p target
      - jar cfe target/HelloWorld.jar HelloWorld -C src/main/java HelloWorld.class
      - jarsigner -keystore keystore.jks -storepass $keystore_password -keypass $key_password -signedjar signed.jar target/HelloWorld.jar mykey
    
  7. .gitlab-ci.yml 파일을 저장하면 파이프라인이 자동으로 실행되어야 합니다. 실행되지 않으면 Build > Pipelines > Run pipeline을 선택합니다.

  8. Build > Jobs로 이동하여 build job의 로그를 확인합니다:

    • Fortanix 시크릿을 사용한 코드 서명 프로세스를 보여주는 build job 로그.