튜토리얼: GitLab에서 Fortanix Data Security Manager(DSM) 사용하기
튜토리얼: GitLab에서 Fortanix Data Security Manager(DSM) 사용하기
Fortanix Data Security Manager(DSM)를 GitLab CI/CD 파이프라인의 시크릿 매니저로 사용하는 방법을 설명하는 튜토리얼이에요. Fortanix DSM에서 새 시크릿을 생성하거나 기존 시크릿을 사용해 GitLab CI/CD 작업에서 활용하는 단계를 옆에서 설명해 주는 방식으로 진행할게요.
이 통합을 구현하면 데이터 보안을 강화하고 CI/CD 파이프라인을 최적화할 수 있어요.
출처: 문서
본문
Fortanix Data Security Manager(DSM)를 GitLab CI/CD 파이프라인의 시크릿 매니저로 사용할 수 있어요.
이 튜토리얼은 Fortanix DSM에서 새 시크릿을 생성하거나 기존 시크릿을 사용하고, 이를 GitLab CI/CD 작업에서 사용하는 데 필요한 단계를 설명해요. 지침을 주의 깊게 따라 구현하면 데이터 보안을 강화하고 CI/CD 파이프라인을 최적화할 수 있어요.
시작하기 전에
다음이 있는지 확인하세요.
- 적절한 관리 권한이 있는 Fortanix DSM 계정에 대한 접근 권한. 자세한 내용은 Getting Started with Fortanix Data Security Manager를 참고하세요.
- 통합을 설정하려는 프로젝트에 접근할 수 있는 GitLab 계정.
- 시크릿 생성 및 가져오기를 포함해 Fortanix DSM에서 시크릿을 저장하는 프로세스에 대한 지식.
- 그룹, 애플리케이션, 플러그인, 변수, 시크릿 관리를 위한 Fortanix DSM 및 GitLab의 필요한 권한에 대한 접근.
새 시크릿 생성 및 가져오기
Fortanix DSM에서 새 시크릿을 생성하고 GitLab에서 사용하려면:
- Fortanix DSM 계정에 로그인하세요.
- Fortanix DSM에서 새 그룹과 애플리케이션을 생성하세요.
- 애플리케이션의 인증 메서드로 API Key를 구성하세요.
- Fortanix DSM에서 새 플러그인을 생성하려면 다음 코드를 사용하세요.
자세한 내용은 Fortanix 문서의 Plugin Library를 참고하세요.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 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" }
- 시크릿을 Fortanix DSM에 저장하려면 import 옵션을
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾으세요.
- 왼쪽 사이드바에서 Settings > CI/CD를 선택하세요.
- Variables를 펼치고 다음 변수를 추가하세요.
FORTANIX_API_ENDPOINTFORTANIX_API_KEYFORTANIX_PLUGIN_ID
- 통합을 사용하도록 프로젝트의
.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 ${FORT...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 ${FORT...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 ${FORT...KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/rekey --data "{\"name\":\"$CI_PIPELINE_ID\", \"value\":\"$encodesecret\"}" | jq --raw-output .kid) .gitlab-ci.yml파일을 저장한 후 파이프라인이 자동으로 실행되어야 해요. 실행되지 않으면 Build > Pipelines > Run pipeline을 선택하세요.- Build > Jobs로 이동해
build작업의 로그를 확인하세요.
Fortanix DSM의 기존 시크릿 사용하기
이미 Fortanix DSM에 존재하는 시크릿을 GitLab에서 사용하려면:
- 시크릿이 Fortanix에서 내보내기 가능(exportable)으로 표시되어야 해요.
- 상단 바에서 Search or go to를 선택하고 프로젝트를 찾으세요.
- 왼쪽 사이드바에서 Settings > CI/CD를 선택하세요.
- Variables를 펼치고 다음 변수를 추가하세요.
FORTANIX_API_ENDPOINTFORTANIX_API_KEYFORTANIX_PLUGIN_ID
- 통합을 사용하도록 프로젝트의
.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 ${FORT...KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/export --data "{\"name\":\"${FORTANIX_SECRET_NAME}\"}" | jq --raw-output .value) .gitlab-ci.yml파일을 저장한 후 파이프라인이 자동으로 실행되어야 해요. 실행되지 않으면 Build > Pipelines > Run pipeline을 선택하세요.- Build > Jobs로 이동해
build작업의 로그를 확인하세요.
코드 서명(Code Signing)
GitLab 환경에서 안전하게 코드 서명을 설정하려면:
- Fortanix DSM 계정에 로그인하세요.
- Fortanix DSM에
keystore_password와key_password를 시크릿으로 가져오세요. 내보내기 가능으로 표시해야 해요. - 상단 바에서 Search or go to를 선택하고 프로젝트를 찾으세요.
- 왼쪽 사이드바에서 Settings > CI/CD를 선택하세요.
- Variables를 펼치고 다음 변수를 추가하세요.
FORTANIX_API_ENDPOINTFORTANIX_API_KEYFORTANIX_SECRET_NAME_1(keystore_password용)FORTANIX_SECRET_NAME_2(key_password용)
- 통합을 사용하도록 프로젝트의
.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 ${FORT...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 ${FORT...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 .gitlab-ci.yml파일을 저장한 후 파이프라인이 자동으로 실행되어야 해요. 실행되지 않으면 Build > Pipelines > Run pipeline을 선택하세요.- Build > Jobs로 이동해
build작업의 로그를 확인하세요.
더 알아보기
GitLab CI/CD에서 다른 시크릿 관리자를 사용하는 방법도 함께 알아보면 좋아요. HashiCorp Vault, GCP Secret Manager, Azure Key Vault 문서를 참고하세요.