複数のコード成果物のセキュリティ問題を一斉に検出するパイプラインをデプロイする - AWS 規範ガイダンス

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

複数のコード成果物のセキュリティ問題を一斉に検出するパイプラインをデプロイする

Amazon Web Services、Benjamin Morris、Tim Hahn、Sapeksh Madan、Dina Odum、および Isaiah Schisler

概要

Simple Code Scanning Pipeline (SCSP) では、業界標準のオープンソースセキュリティツールを並行して実行するコード分析パイプラインを 2 クリックで作成できます。これにより、開発者はツールをインストールしたり、それらの実行方法を理解したりすることなく、コードの品質とセキュリティを確認できます。これにより、コード成果物の脆弱性や設定ミスを減らすことができます。また、組織がセキュリティツールのインストール、調査、設定に費やす時間も短縮されます。

SCSP の前に、この特定のツール一式を使用してコードをスキャンするには、開発者がソフトウェア分析ツールを特定、手動でインストール、設定する必要がありました。ローカルにインストールされている場合でも、Automated Security Helper (ASH) などの一体型のツールを実行するには、Docker コンテナを設定する必要があります。しかし、SCSP では、業界標準のコード分析ツール一式が AWS クラウドで自動的に実行されます。このソリューションでは、Git を使用してコード成果物を反映した後、セキュリティチェックが失敗した対象に対する分析情報が一目で見てわかる出力を受け取れます。

前提条件と制限事項

アーキテクチャ

ターゲットテクノロジースタック

  • AWS CodeCommit リポジトリ

  • AWS CodeBuild プロジェクト

  • AWS CodePipeline パイプライン

  • Amazon Simple Storage Service (Amazon S3) バケット

  • AWS CloudFormation テンプレート

ターゲットアーキテクチャ

静的コード分析用の SCSP は、成果物コードに関するセキュリティフィードバックを提供するように設計された DevOps プロジェクトです。

AWS リージョンでコード分析を実行する SCSP。
  1. で AWS マネジメントコンソール、ターゲットにログインします AWS アカウント。パイプラインをデプロイする AWS リージョン にいることを確認します。

  2. コードリポジトリの CloudFormation テンプレートを使用して SCSP スタックをデプロイします。これにより、新しい CodeCommit リポジトリと CodeBuild プロジェクトが作成されます。

    注記

    代替のデプロイオプションとして、スタックのデプロイ中にリポジトリの Amazon リソースネーム (ARN) をパラメータとして指定することで、既存の CodeCommit リポジトリを使用できます。

  3. リポジトリをローカルワークステーションに複製し、複製されたリポジトリ内のそれぞれのフォルダにファイルを追加します。

  4. Git を使用して、CodeCommit リポジトリにファイルを追加、確定、反映します。

  5. CodeCommit リポジトリに反映すると、CodeBuild ジョブが開始されます。CodeBuild プロジェクトは、セキュリティツールを使用してコード成果物をスキャンします。

  6. パイプラインの出力を確認します。エラーレベルの問題を検出したセキュリティツールでは、パイプラインにおけるアクションが失敗します。これらのエラーを修正するか、誤検出として抑制します。CodePipeline の [アクション詳細] またはパイプラインの S3 バケットでツール出力の詳細を確認します。

ツール

AWS のサービス

  • AWS CloudFormation は、 AWS リソースをセットアップし、迅速かつ一貫してプロビジョニングし、 AWS アカウント および リージョン全体のライフサイクルを通じてリソースを管理するのに役立ちます。

  • AWS CodeBuild は完全マネージド型の構築サービスです。ソースコードのコンパイル、ユニットテストの実行、すぐにデプロイできるアーティファクトの生成を行います。

  • AWS CodeCommit は、独自のソースコントロールシステムを管理することなく、Git リポジトリを非公開で保存および管理できるバージョン管理サービスです。

その他のツール

SCSP がコード成果物のスキャンに使用するツールの完全なリストについては、GitHub の「SCSP readme」を参照してください。

コードリポジトリ

このパターンのコードは、GitHub の Simple Code Scanning Pipeline (SCSP) リポジトリから入手可能です。

エピック

タスク説明必要なスキル

CloudFormation スタックを更新する。

  1. AWS マネジメントコンソール にサインインします。

  2. コンソールで、ソリューションをデプロイしようとするターゲットのリージョンにいることを確認します。詳細については、「リージョンの選択」を参照してください。

  3. 次のリンクを選択します。これにより、CloudFormation の [スタックのクイック作成] ウィザードが開きます。

    https://console.aws.amazon.com/cloudformation/home?#/stacks/create/review?templateURL=https://proservetools.s3.amazonaws.com/cft/scsp-pipeline-stack.template.json&stackName=SimpleCodeScanPipeline

  4. [スタックのクイック作成] ウィザードで、スタックのパラメータ設定を確認し、ユースケースに応じて変更を加えます。

  5. [I acknowledge that AWS CloudFormation might create IAM resources (AWS CloudFormation によって IAM リソースが作成される場合があることを承認します)] を選択し、[スタックの作成] を選択します。

これにより、CodeCommit リポジトリ、CodePipeline パイプライン、いくつかの CodeBuild ジョブ定義、および S3 バケットが作成されます。ビルド実行とスキャン結果がこのバケットにコピーされます。CloudFormation スタックが完全にデプロイされると、SCSP が使用できるようになります。

AWS DevOps、AWS 管理者
タスク説明必要なスキル

スキャンの結果を調べる。

  1. Amazon S3 コンソール[バケット] で、simplecodescanpipeline-deleteresourcespipelinereso バケットを選択します。

  2. scan_results ディレクトリを選択し、最新スキャンのタイムスタンプを持つフォルダを選択します。

  3. このフォルダのログファイルを見直して、パイプラインで使用されるセキュリティツールで検出された問題を確認します。エラーレベルの問題を検出したセキュリティツールでは、パイプラインにおけるアクションが failed になります。これらは修正するか、もしくは誤検出の場合には抑制する必要があります。

    注記

    また、CodePipeline コンソールの [アクション詳細] セクションでツール出力の詳細 (合格したスキャンと不合格のスキャンの両方) を表示することもできます。

アプリ開発者、AWS DevOps

トラブルシューティング

問題ソリューション

HashiCorp Terraform または AWS CloudFormation ファイルはスキャンされません。

Terraform (.tf) および CloudFormation (.yml、.yaml、または .json) ファイルが、複製された CodeCommit リポジトリの適切なフォルダに配置されていることを確認します。

git clone コマンドは失敗しています。

がインストールされていること、git-remote-codecommitおよび CLI が CodeCommit リポジトリを読み取るアクセス許可を持つ AWS 認証情報にアクセスできることを確認します。

Project-level concurrent build limit cannot exceed the account-level concurrent build limit of 1 などの同時実行エラー。

CodePipeline コンソール[変更をリリースする] ボタンを選択して、パイプラインを再実行します。これは、パイプラインが実行される最初の数回で最も一般的と思われる既知の問題です。

関連リソース

SCSP プロジェクトに対するフィードバックを提供します

追加情報

よくある質問

SCSP プロジェクトは Automated Security Helper (ASH) と同じですか?

いいえ。コンテナを使用してコードスキャンツールを実行する CLI ツールが必要な場合は、ASH を使用します。Automated Security Helper (ASH) は、新しいコードインフラストラクチャ、または IAM リソース設定でセキュリティ違反が発生する可能性を減らすために設計されたツールです。ASH は、ローカルで実行できるコマンドラインユーティリティです。ローカルで使用するには、システムでコンテナ環境をインストールして運用する必要があります。

ASH よりも簡単な設定パイプラインが必要な場合は、SCSP を使用します。SCSP はローカルインストールを必要としません。SCSP は、パイプラインで個別にチェックを実行し、ツール別に結果を表示するように設計されています。SCSP は、Docker の設定に伴うオーバーヘッドも回避し、オペレーティングシステム (OS) に依存しません。

SCSP はセキュリティチーム専用ですか?

いいえ。誰でもパイプラインをデプロイして、コードのどの部分がセキュリティチェックに合格していないかを判断できます。例えば、セキュリティ以外のユーザーは、セキュリティチームと見直す前に SCSP を使用してコードを確認できます。

GitLab、GitHub、または Bitbucket といった別のタイプのリポジトリを使用している場合、SCSP を使用できますか?

2 つの異なるリモートリポジトリを指すようにローカル git リポジトリを設定できます。たとえば、既存の GitLab リポジトリのクローンを作成し、SCSP インスタンス (必要に応じて CloudFormation、Terraform、および AWS Config Rules Development Kit (AWS RDK) フォルダを指定) を作成し、 を使用して SCSP CodeCommit リポジトリのgit remote add upstream <SCSPGitLink>ローカルリポジトリを指すことができます。これにより、コード変更を最初に SCSP に送信し、検証してから、検出結果に対応するために追加の更新が行われた後に、GitLab、GitHub、または Bitbucket リポジトリに反映できます。複数のリモートの詳細については、「追加の Git リポジトリにコミットをプッシュする」(AWS ブログ記事) を参照してください。

注記

ウェブインターフェイスを介した変更を避けるなど、予期しない変更に注意してください。

独自のアクションの提供と追加

SCSP セットアップは、SCSP AWS Cloud Development Kit (AWS CDK) アプリケーションのソースコードを含む GitHub プロジェクトとして維持されます。パイプラインにチェックを追加するには、 AWS CDK アプリケーションを更新し、 AWS アカウント パイプラインを実行するターゲットに合成またはデプロイする必要があります。これを行うには、まず SCSP GitHub プロジェクトの複製を作成し、lib フォルダでスタック定義ファイルを見つけます。

追加するチェックがある場合、 AWS CDK コードの StandardizedCodeBuildProject クラスを使用すると、アクションを簡単に追加できます。名前、説明、installまたは build コマンドを指定します。 は、適切なデフォルト値を使用して CodeBuild プロジェクト AWS CDK を作成します。ビルドプロジェクトの作成に加えて、ビルドステージの CodePipeline アクションにそれを追加する必要があります。新しいチェックを設計するとき、スキャンツールが問題を検出した場合、または実行に失敗した場合、アクションは FAIL になります。スキャンツールが問題を検出しない場合、アクションは PASS になります。ツールの設定例については、Bandit アクションのコードを確認してください。

予想される入力と出力の詳細については、リポジトリのドキュメントを参照してください。

カスタムアクションを追加する場合は、cdk deploy または cdk synth + CloudFormation deploy を使用して SCSP をデプロイする必要があります。これは、スタックのクイック作成 CloudFormation テンプレートがリポジトリ所有者によって維持されるためです。