チュートリアル: GitLabでFortanix Data Security Manager(DSM)を使用する
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
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で、新しいグループとアプリケーションを作成します。
次のコードを使用して、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のUser’s Guide: Plugin Libraryを参照してください
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_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 ${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_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 ${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アカウントにサインインします。
keystore_passwordとkey_passwordをFortanix DSMにシークレットとしてインポートします。それらがエクスポート可能としてマークされていることを確認してください。GitLabの左側のサイドバーで、検索または移動先を選択し、プロジェクトを見つけます。
設定 > CI/CDを選択します。
変数を展開し、以下の変数を追加します:
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 ${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ジョブのログを確認します:





