튜토리얼: GitLab에서 Fortanix Data Security Manager (DSM) 사용하기
GitLab CI/CD 파이프라인을 위한 시크릿 관리자로서 Fortanix Data Security Manager (DSM)를 사용할 수 있습니다.
이 튜토리얼에서는 Fortanix DSM에서 새 시크릿을 생성하거나 기존 시크릿을 사용하고, GitLab CI/CD 작업에서 이를 사용하는 데 필요한 단계에 대해 설명합니다. 이 통합을 구현하여 데이터 보안을 강화하고 CI/CD 파이프라인을 최적화하기 위해 주의 깊게 지시를 따르세요.
시작하기 전에
다음 사항을 확인하세요:
- 적절한 관리 권한이 있는 Fortanix DSM 계정에 액세스할 수 있어야 합니다. 자세한 내용은 Fortanix Data Security Manager 시작하기를 참조하세요.
- 프로젝트에 액세스할 수 있는 GitLab 계정이 있어야 합니다.
- Fortanix DSM에서 시크릿 저장 및 생성 및 가져오기 프로세스에 대한 지식이 있어야 합니다.
- 그룹, 응용 프로그램, 플러그인, 변수 및 시크릿 관리를 위한 Fortanix DSM 및 GitLab의 필요한 권한에 액세스할 수 있어야 합니다.
새 시크릿 생성 및 가져오기
Fortanix DSM에서 새 시크릿을 생성하고 GitLab에서 사용하려면 다음을 수행합니다:
- Fortanix DSM 계정에 로그인합니다.
- Fortanix DSM에서 새 그룹 및 응용 프로그램을 생성합니다.
- 응용 프로그램의 인증 방법으로 API 키를 구성합니다.
-
다음 코드를 사용하여 Fortanix DSM에서 새 플러그인을 생성합니다:
numericAlphabet = "0123456789" alphanumericAlphabet = numericAlphabet .. "abcdefghijklmnopqrstuvwxyz" alphanumericCapsAlphabet = alphanumericAlphabet .. "ABCDEFGHIJKLMNOPQRSTUVWXYZ" alphanumericCapsSymbolsAlphabets = alphanumericCapsAlphabet .. "!@#$&*_%=" ... (이하 생략) ...
자세한 내용은 Fortanix 사용자 가이드: 플러그인 라이브러리를 참조하세요.
-
Fortanix DSM에 시크릿을 저장하려면 가져오기 옵션을
yes
로 설정합니다:{ "type": "alphanumeric_caps", "length": 64, "name": "GitLab-Secret", "import": "yes" }
-
회전용으로만 새 값이 생성되길 원한다면 가져오기 옵션을
no
로 설정합니다:{ "type": "numeric", "length": 64, "name": "GitLab-Secret", "import": "no" }
-
- GitLab에서 프로젝트로 이동합니다.
-
설정 > CI/CD > 변수로 이동하고 다음 변수를 추가합니다:
FORTANIX_API_ENDPOINT
FORTANIX_API_KEY
FORTANIX_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 ${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)
-
.gitlab-ci.yml
파일을 저장한 후 파이프라인이 자동으로 실행되어야 합니다. 그렇지 않은 경우, 빌드 > 파이프라인 > 파이프라인 실행을 선택합니다. -
빌드 > 작업으로 이동하여
build
작업의 로그를 확인합니다:
기존 Fortanix DSM 시크릿 사용하기
Fortanix DSM에 이미 존재하는 시크릿을 GitLab과 함께 사용하려면:
-
Fortanix에서 시크릿을 내보낼 수 있도록 표시해야 합니다:
- GitLab에서 프로젝트로 이동합니다.
-
설정 > CI/CD > 변수 로 이동하여 다음 변수들을 추가합니다:
FORTANIX_API_ENDPOINT
FORTANIX_API_KEY
FORTANIX_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 ${FORTANIX_API_KEY}" ${FORTANIX_API_ENDPOINT}/crypto/v1/keys/export --data "{\"name\":\"${FORTANIX_SECRET_NAME}\"}" | jq --raw-output .value)
-
.gitlab-ci.yml
파일을 저장한 후에 파이프라인은 자동으로 실행되어야 합니다. 그렇지 않은 경우, 빌드 > 파이프라인 > 파이프라인 실행을 선택합니다. -
빌드 > 작업으로 이동하여
build
작업의 로그를 확인합니다:
코드 서명
GitLab 환경에서 코드 서명을 안전하게 설정하려면:
- Fortanix DSM 계정에 로그인합니다.
-
Fortanix DSM에
keystore_password
및key_password
를 시크릿으로 가져오세요. 가져온 후에 내보낼 수 있도록 표시되어 있는지 확인합니다. - GitLab에서 프로젝트로 이동합니다.
-
설정 > CI/CD > 변수 로 이동하여 다음 변수들을 추가합니다:
FORTANIX_API_ENDPOINT
FORTANIX_API_KEY
-
FORTANIX_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 # 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
-
.gitlab-ci.yml
파일을 저장한 후에 파이프라인은 자동으로 실행되어야 합니다. 그렇지 않은 경우, 빌드 > 파이프라인 > 파이프라인 실행을 선택합니다. -
빌드 > 작업으로 이동하여
build
작업의 로그를 확인합니다: