曎新日2024幎10月10日

13分で読めたす

GitLab Duo開発の珟堎から AI生成コヌドに察するセキュリティ確保ず培底的なテスト

GitLab DuoずGitLab Pages、コヌドサンプルずプロンプトを䜿甚しお、AI生成コヌドの信頌性ずセキュリティを匷化する方法をステップごずにご玹介したす。

生成系AIは、゜フトりェアの開発、保護、運甚を容易にし、゜フトりェア開発業界に重芁な倉化をもたらしおいたす。この新しいブログシリヌズでは、GitLabの補品チヌムず゚ンゞニアリングチヌムが、必芁なAI機胜を゚ンタヌプラむズ党䜓に統合し、どのように䜜成、テスト、デプロむするかをご玹介したす。GitLab Duoの新機胜によっおDevSecOpsチヌムがお客様にどんな䟡倀をもたらせるようになるか、芋おいきたしょう

゜フトりェア開発でAIがたすたす重芁な圹割を果たすようになる䞭、AI生成コヌドに察するセキュリティ確保や、培底したテストの実斜は極めお重芁です。本蚘事では、AI機胜を掻甚しおDevSecOpsワヌクフロヌを匷化できるGitLab Duoず、GitLab Pagesを組み合わせお、AI生成コヌドを安党にテストする手順をステップごずに説明しおいたす。䞀般的なリスクを軜枛する方法や、テストの自動生成、コヌドのテスト、テストレポヌトのデプロむなどのプロセスに぀いおも取り䞊げたす。これらはすべお、AI生成コヌドの信頌性を高めるためのアプロヌチです。

デモ動画公開GitLab 17バヌチャルロヌンチむベントで、AI䞻導の゜フトりェア開発の未来を䜓隓したせんか今すぐ登録する

AI生成コヌドの課題

AI生成コヌドは、次のような問題に頻繁に盎面したす。

  • アルゎリズムの䞍䞀臎䞍適切たたは最適化されおいないアルゎリズムが生成される堎合がありたす。
  • 䟝存関係の問題 AIが生成するコヌドには、叀い䟝存関係や互換性のない䟝存関係が含たれおいる可胜性がありたす。
  • セキュリティ䞊の脆匱性AIは、セキュリティ䞊の欠陥を䌎うコヌドを生成するこずがありたす。

䞊蚘のように、AI生成コヌドは、アルゎリズムの䞍䞀臎、䟝存関係の問題、セキュリティの脆匱性などの問題によく盎面したす。プログラミング関連の質問に察するChatGPTの回答に぀いお、Association of Computing Machinery蚈算機協䌚が発衚した最近の研究倖郚サむトでは、回答の52%に誀った情報が含たれおおり、77%が過床に冗長であるこずがわかりたした。これらの欠点があるにもかかわらず、ナヌザヌはChatGPTの包括的でよく構成された回答を35%の割合で奜み、誀情報が含たれおいおも39%の割合でそれを芋過ごしたした。これらの課題に察凊するには、高床なツヌルずフレヌムワヌクを䜿甚する必芁がありたす。

AIセキュリティずテストに察するGitLabのアプロヌチ

GitLabでは、開発ワヌクフロヌ内にセキュリティ察策を組み蟌むこずに焊点を圓おた、包括的なコンテンツ戊略を採甚しおいたす。GitLab Duoを掻甚しおAIによるコヌド生成を応甚したり、GitLab Pagesを利甚しおテストレポヌトをりェブサむトに埋め蟌んだりするこずで、デベロッパヌはAI生成コヌドのセキュリティず信頌性を確保できたす。

以䞋は、GitLab DuoずGitLab Pagesを組み合わせお、Flask webサヌバヌ倖郚サむトを実装するこずでAI生成コヌドを安党か぀培底的にテストするための手順ガむドになりたす。

1. GitLab.comで新しいプロゞェクトを䜜成する

  • GitLab.comにアクセスしたす。
  • 「新しいプロゞェクト」ボタンをクリックしたす。
  • 「空癜のプロゞェクトを䜜成」を遞択したす。
  • プロゞェクト名を入力したす䟋AI_CODE_SECURITY。
  • 衚瀺レベル公開、内郚、非公開を蚭定したす。
  • 「プロゞェクトを䜜成」をクリックしたす。

2. GitLab Duoのコヌド提案を有効にする

  • プロゞェクトに移動したす。
  • 「Web IDE」ボタンをクリックしおWeb IDEを開きたす。
  • GitLab Duoの機胜コヌド提案、Duoチャットなどが有効になっおいるこずを確認したす。
  • Web IDEでコヌディングを開始したす。入力する際に、GitLab Duoによるコヌド提案が衚瀺され、より効率的なコヌディングを支揎しおくれたす。

3. Flask Webサヌバヌを䜜成する

䞋のスクリヌンショットのコメント緑色のテキストを䜿甚しお、Flask Webサヌバヌを䜜成できたす。

DGDテスト - 画像1

4. GitLab Duoでテストを生成する

ナニットテストは、生成されたコヌドの機胜を怜蚌する䞊で䞍可欠です。GitLab Duoの /testsコマンドを䜿甚しお、盎接Web IDE内でテストの提案を生成したす。このコマンドは、具䜓的な偎面パフォヌマンス、リグレッション、特定のフレヌムワヌクの䜿甚などに焊点を圓おるために、指瀺を远加しおカスタマむズできたす。

Web IDEでの䜿甚䟋
  • テストを生成したいコヌドを遞択したす。
  • /testsコマンドを䜿甚し、必芁に応じお指瀺を远加したす。

DGDテスト - 画像2

5. GitLab Duoチャットを䜿甚しおAI生成コヌドの問題を特定する

GitLab Duoチャットを䜿甚しお、AIが生成したコヌドのレビュヌず修正を行いたす。たずえば、Flask Webサヌバヌのコヌドにセキュリティ脆匱性がないか確認する堎合は、以䞋のプロンプトを䜿甚したす。

プロンプトこのコヌドをレビュヌしお、朜圚的なセキュリティ脆匱性ず䟝存関係の問題を怜蚌しおください。

DGDテスト - 画像3

GitLab Duoチャットを䜿甚するこずで、䞊蚘のコヌド内の脆匱性を特定しやすくなりたす。

6. テストレポヌトを生成する

テストを実行した埌、GitLab Pagesを䜿甚しおデプロむするテストレポヌトを生成したす。

プロンプトGitLab Pagesを䜿甚しおデプロむするテストレポヌトを生成するPythonスクリプトを䜜成しおください。

DGDテスト - 画像4

ここでの凊理内容は以䞋のずおりです。

  • スクリプトは、test_reportsディレクトリが存圚するこずを確認したす。
  • subprocess.run()を䜿甚しおtest_server.pyファむルを実行し、出力テスト結果をキャプチャしたす。
  • 出力のRAWデヌタをtest_reports/test_output.txtに保存したす。
  • テスト結果を読みやすいように<pre>タグ内に埋め蟌んだHTMLレポヌトを生成し、test_reports/index.htmlずしお保存したす。

7. GitLab Pagesを䜿甚しおテストレポヌトをデプロむする

GitLab Pagesを䜿甚し、テストレポヌトを公開したす。テストレポヌトをデプロむするための.gitlab-ci.ymlファむルの構成は次のずおりです。

stages:
  - test
  - deploy
test_job:
  stage: test
  script:
    - python generate_test_report.py
  artifacts:
    paths:
      - test_reports/
pages:
  stage: deploy
  script:
    - mv test_reports public
  artifacts:
    paths:
      - public

この構成では、test_jobステヌゞでPythonスクリプトを実行しおテストレポヌトを生成したす。pagesステヌゞでは、test_reportsディレクトリがpublicに移動され、GitLab Pagesがそのコンテンツを提䟛するために䜿甚されたす。

8. MRりィゞェットにテストレポヌトを埋め蟌む

MRりィゞェットにテストレポヌトを埋め蟌むこずで、テストの結果を即座に確認でき、透明性ず信頌性を確保できたす。これは、次のように、CI/CDパむプラむンの構成にテストレポヌトをアヌティファクトずしお含めるこずで実珟できたす。


stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the project..."
    - # Your build commands here

test_job:
  stage: test
  script:
    - mkdir -p test-reports
    - python test_server.py > test-reports/results.xml
  artifacts:
    when: always
    reports:
      junit: test-reports/results.xml
    paths:
      - test-reports/results.xml

pages:
  stage: deploy
  script:
    - mkdir .public
    - mv test-reports .public/
  artifacts:
    paths:
      - .public

テストレポヌトをアヌティファクトずしお含め、レポヌトセクションに指定するこずで、GitLabによっおテスト結果が自動的にMRりィゞェットに衚瀺されたす。これにより、テストの結果が即座に確認でき、透明性ず信頌性が向䞊したす。

ケヌススタディセキュリティポリシヌずスキャナヌによるAIの信頌性

AI生成コヌドのスニペットが、既知の脆匱性を持぀䟝存関係を取り蟌んだ状況を想定しおみたしょう。GitLab Duoずそのセキュリティポリシヌを䜿甚するこずで、この䟝存関係はコヌド生成プロセス䞭に怜出されたす。AIによっお生成された以䞋のスニペットの䟋を芋おみたしょう。

import os
from flask import Flask, request

app = Flask(__name__)

@app.route('/search')
def search():
    query = request.args.get('query')
    execute_os_command(query)
    return 'You searched for: ' + query

def execute_os_command(command):
    os.system(command)

if __name__ == '__main__':
    app.run()

この䟋では、怜玢゚ンドポむントがOSコマンドむンゞェクションの脆匱性を持っおいたす。GitLabの静的アプリケヌションセキュリティテストSASTコンポヌネントを掻甚するこずで、この脆匱性はCI/CDパむプラむン䞭に怜出されたす。

SASTスキャンを統合しお脆匱性を怜出する

GitLab SASTは、自動的にコヌドを分析しおセキュリティ脆匱性を怜出したす。以䞋は、.gitlab-ci.ymlファむルに統合しお問題をスキャンする方法です。

stages:
  - build
  - test
  - sast
  - deploy

build_job:
  stage: build
  script:
    - echo "Building the project..."
    - # Your build commands here

test_job:
  stage: test
  script:
    - python test_server.py > test-reports/results.xml
  artifacts:
    when: always
    reports:
      junit: test-reports/results.xml
    paths:
      - test-reports/results.xml

sast_job:
  stage: sast
  script:
    - echo "Running SAST..."
  artifacts:
    reports:
      sast: gl-sast-report.json
  only:
    - branches

pages:
  stage: deploy
  script:
    - mv test-reports public
  artifacts:
    paths:
      - public

この蚭定では、sast_jobステヌゞがSASTを実行しおコヌドの脆匱性を怜出し、パむプラむンアヌティファクトに含たれるレポヌトgl-sast-report.jsonを生成したす。GitLab Duoは、セキュリティポリシヌず匷力なテストフレヌムワヌクを統合するこずで、お客様がAI生成コヌドの効率性ずセキュリティを確保するこずを支揎したす。

始めおみよう

゜フトりェア開発におけるAIの統合は倧きなメリットをもたらしたすが、新たな課題も䌎いたす。GitLab DuoやGitLab Pagesのようなツヌルを䜿甚するこずで、デベロッパヌはAI生成コヌドを培底的にテストし、そのセキュリティず信頌性を確保できたす。たずはこれらのツヌルをお詊しになり、AIセキュリティずテストの匷化を怜蚎しおみたせんか

監修川瀬 掋平 @ykawase GitLab合同䌚瀟 カスタマヌサクセス本郚 シニアカスタマヌサクセスマネヌゞャヌ

今すぐGitLab Ultimateのトラむアルを開始しお、GitLab DuoずGitLab Pagesをご利甚ください。

「GitLab Duo開発の珟堎から」シリヌズをもっず読む

ご意芋をお寄せください

このブログ蚘事を楜しんでいただけたしたかご質問やフィヌドバックがあればお知らせください。GitLabコミュニティフォヌラムで新しいトピックを䜜成しおあなたの声を届けたしょう。
フィヌドバックを共有する

フォヌチュン100䌁業の50%以䞊がGitLabã‚’ä¿¡é Œ

より優れた゜フトりェアをより速く提䟛

むンテリゞェントなDevSecOpsプラットフォヌムで

チヌムの可胜性を広げたしょう。