Traffis CLIツールを用いた機密データの暗号化



Traffis CLIツールを用いた機密データの暗号化


敏感なデータを保護することは、連続的な統合と連続配送(CI/CD)プロセスの重要な局面です.セキュリティトークン、パスワードや悪意のある当事者に公開された秘密情報の他のタイプを残すことは常にセキュリティリスクです.
幸いにも、Travis CIは、CI/CDプロセスで合理的に簡単に使用するための機密データを暗号化するコマンドラインインターフェース(CLI)ツールを持っています.
トラヴィスCIの下の暗号化は、ユーザ名のパスワードペアからテキストファイルへのあらゆる種類の情報に適用することができます.Travelis CI暗号化を環境変数に適用する方法を見てみましょう.
小さなノードを作りました.Jigthubで見つけることができるJSプロジェクトhere . SimpleTravisプロジェクトは、Travis CIのCI/CDビルドプロセスにバインドされます.トラヴィスCIはプロジェクトの指示を実行します.travis.yml コード更新がgithubにコミットされるたびにファイル.SimpleTravisの目的は、Travis CIの暗号化機能を使用して結果を示すことです.
最初に実行することは次のようになります.
travis whatsup
Travisにログインしていることを確認してください.
travis login
あなたは、あなたがあなたのtoken ギタブより:
--github-token or --auto 
パスワードを入力したくない場合は、これは最良の選択肢です.あなたが最初に置く必要がある基盤のアイデアを得るために.
何も持っていないことを確認してくださいstash :
git stash pop
これは(一番上のファイルは、デフォルトでは)を適用した後の隠し場所をスローしますgit stash pop .

サンプルプロジェクトの操作


SimpleVravisプロジェクトはルートエンドポイントに対するGETメソッド呼び出しをサポートする単純なHTTPサーバです.リスト1は以下の機能を示しますhandleRequest() . この関数はindex.js HTTPサーバーを作成して実行するファイルです.HTTP相互作用の要求処理と応答応答はhandleRequest() :
/** A function which handles requests and send response. */
function handleRequest(request, response) {
    const message = process.env.TRAVIS_MESSAGE || `Hello at ${new Date()}`
    response.setHeader("Content-Type", "application/json");
    response.writeHead(200);
    response.end(JSON.stringify({message}));
}

Listing 1: The code that handles a request to and a response from the SimpleTravis HTTP server


HTTPサーバは一度だけ機能ロジックを持っています.このコードは環境変数を参照してください.TRAVIS_MESSAGE , が存在し、値が存在する.If TRAVIS_MESSAGE は値を持ち、その値はローカル変数に代入されます.message. それ以外の場合は、現在の日付を文字列に追加します.Hello at . 次に、連結した文字列をmessage.SimpleTravisはunit test それはHTTPサーバーが期待に取り組んでいることを確認します.単位テストはリスト2の下にあります.
describe('API Tests: ', () => {
    after(function () {
        shutdown();
    });
    it('Can access GET at /', function(done){
        //Call the API
        supertest(server)
            .get('/')
            .set('Accept', 'application/json')
            .then((res) => {
                expect(res.body).to.be.an('object');
                console.log(res.body);
                done();
            })
            .catch(done);
    });
});

Listing 2: The unit test that makes a call to the SimpleTravis HTTP server


単体テストはSimpleTravisのTravis CIビルドプロセスの一部です.リスト3以下の内容を示しますtravis.yml SimpleVravisプロジェクト用のファイルです.ユニットテストは12行目で実行されます.
language: node_js
node_js:
- 14
os: ubuntu
branches:
  only:
  - master
before_install:
- pwd
script:
- npm install
- npm test

Listing 3: The travis.yml file without an environment variable


リスト4は、ユニットテストの出力を示している.ないので注意してくださいTRAVIS_MESSAGE プレイ中の環境変数、サーバへの呼び出しの出力は、現在の日付を持つデフォルトの文字列です.
Node HTTP listening on 3000
  API Tests: 
{
  message: 'Hello at Sun Sep 27 2020 05:04:59 GMT+0000 (Coordinated Universal Time)'
}
     Can access GET at /
API Server shutting down at Sun Sep 27 2020 05:04:59 GMT+0000 (Coordinated Universal Time)

Listing 4: The result of a unit test run without the environment variable TRAVIS_MESSAGE

TRAVIS_MESSAGE 環境変数はビルドプロセスに追加します.まず、ビルドを実行しますTRAVIS_MESSAGE 暗号化されていません.それから、私は暗号化するためにTravis CITRAVIS_MESSAGE と実行スクリプトで使用します.

Travis CI CLIツールのインストール


Travis CIの下で暗号化を実行するには、Rubyプログラミング言語とTravis CI CIIツールをマシンにインストールする必要があります.GithubのTravis CIツールのインストール手順を読むことができますhere .
あなたがツールを使用して初めて、Travis CI CLIはあなたのアクセス資格情報を要求します.ただし、お使いのマシンに既にGITHUB資格情報がインストールされている場合は、リモートのリポジトリにアクセスしている場合は典型的ですgit コマンドラインから、このステップはスキップされます.
トラヴィスCI CLIツールがインストールされ、操作されると、1つ以上の環境変数を暗号化できます.しかし、暗号化する前に、プレーンテキストで環境変数をビルドに追加しましょう.それから、暗号化します.

標準環境変数の使用


Listing 5 below shows a travis.yml file that declares the environment variable TRAVIS_MESSAGE. The environment variable is assigned the value “All Good Things Take Time”.


language: node_js
node_js:
- 14
os: ubuntu
branches:
  only:
  - master
before_install:
- pwd
script:
- npm install
- npm test
env:
  - TRAVIS_MESSAGE="All Good Things Take Time"

Listing 5: The travis.yml file with the unencrypted environment variable TRAVIS_MESSAGE


以下のリスト6はプロジェクトの単体テストからのHTTP出力を示します.以下の3行目に示すように、すべての良いものが時間を取るストリングがレスポンスの一部であることに注意してください.この出力が期待される.リスト1の上記のコードは環境変数の値を報告しますTRAVIS_MESSAGE , が存在します.環境変数は実際に存在し、値を持ちます.したがって、この値はHTTPレスポンスで返されます.
Node HTTP listening on 3000
  API Tests: 
{ message: 'All Good Things Take Time' }
     Can access GET at /
API Server shutting down at Sun Sep 27 2020 05:13:11 GMT+0000 (Coordinated Universal Time)
The command "npm test" exited with 0.

Listing 6: The result of a unit test run with the unencrypted environment variable TRAVIS_MESSAGE


環境変数がTravis CIビルドに配線されているので、暗号化しましょうTRAVIS_MESSAGE .

暗号化環境変数の使用


環境変数を暗号化しますTRAVIS_MESSAGE , それに割り当てられた値とともに、Travis CI CLIツールを使用します.以下は暗号化を行うコマンドです.
travis encrypt TRAVIS_MESSAGE="All Good Things Take Time" 
どこ
トラヴィスはコマンド
暗号化はサブコマンド
TravisThangeメッセージ=“すべての良いものは時間を取る”は、暗号化するために割り当てられた値と一緒に環境変数です

The result of executing the encryption command is shown below in listing 7.


secure: "RWjsrxlhbU6P8t6F/YuXhc4wZstESJwFR3UGME7Lf5rlNzvYROQRsEpQ4JbIM0iyFtgAZzCe0zt0gtnOfhUzwYXaVNyUFrtrmXk6/+oJVLrLOdiAUd9W8iVczzWXpI0PrT7ZNltSef4j+BQEVsHYPKOLK9Q1jMsEc2fWNwyfYUL/kEqBxLGnMql5DJwdTMHXTMJpFjul07Rv8HLAkpBl4+N6O1ctSFoJJwXl6jVFIKuzvM9gK9LkMHwp22vNvAL+QUqI679NepB4+L8O/5zL5vM0FcYlIbe+SAjKu/53CQxJ4UTlO822R99+E/2aqN33u9AE8MdDfrDoMC2sGYGO0cwfkjzyTIIPHylysOQrHU7AjuG54JGoHfQcjLtjSATriL98WQevmYSH7GVrOWE3Q/LQsKywppRacmeMcW2nfcqMAT42S7ENaGv3JFm29ACkhC8tIoHXtCBWeFAkEXhZ2bR3C9cHteCn6ZWFiIcv20oPU0H2kwEXSTzcsAWHdcmpJWyTqDiPL/06aF4KZSHVZbS71qvmMZB3pgsHr4tlHCs+g2zcndDdHv7MBsW1FECYH43uWnfsvcyuccSX374bZIGBYHhcCfGIG4L7NH9fClhGzwqm2NfeBihWb4t45NHQqzGpAfGTCz5qwU1uUnMOXgUlZkF4t0iZXEabH7cK2hE="
プロのヒント:あなたが自動的に-を追加すると実行することによって追加することができます.

Listing 7: The result of using the Travis CI CLI tool to encrypt an environment variable


暗号化をしたら、私はそれを.travis.yml ファイル.属性を使用することに注意してくださいsecure . この属性を使用すると、値が暗号化され、その秘密鍵を使用して値を復号化することができます.私がトラビスCIの提案をとって、使用するならば--add オプションが暗号化コマンドを実行するとき、Travis CIglobal environment variable , 以下のように:
env:
  global:
    secure: <string-of-encrypted-data>
しかし、今のところ私は物事をシンプルにし、環境変数のグローバル化をスキップするつもりです.リスト8は以下を示します.travis.yml 暗号化環境変数を持つファイルが追加されました.
language: node_js
node_js:
- 14
os: ubuntu
branches:
  only:
  - master
before_install:
- pwd
script:
- npm install
- npm test
env:
secure: "RWjsrxlhbU6P8t6F/YuXhc4wZstESJwFR3UGME7Lf5rlNzvYROQRsEpQ4JbIM0iyFtgAZzCe0zt0gtnOfhUzwYXaVNyUFrtrmXk6/+oJVLrLOdiAUd9W8iVczzWXpI0PrT7ZNltSef4j+BQEVsHYPKOLK9Q1jMsEc2fWNwyfYUL/kEqBxLGnMql5DJwdTMHXTMJpFjul07Rv8HLAkpBl4+N6O1ctSFoJJwXl6jVFIKuzvM9gK9LkMHwp22vNvAL+QUqI679NepB4+L8O/5zL5vM0FcYlIbe+SAjKu/53CQxJ4UTlO822R99+E/2aqN33u9AE8MdDfrDoMC2sGYGO0cwfkjzyTIIPHylysOQrHU7AjuG54JGoHfQcjLtjSATriL98WQevmYSH7GVrOWE3Q/LQsKywppRacmeMcW2nfcqMAT42S7ENaGv3JFm29ACkhC8tIoHXtCBWeFAkEXhZ2bR3C9cHteCn6ZWFiIcv20oPU0H2kwEXSTzcsAWHdcmpJWyTqDiPL/06aF4KZSHVZbS71qvmMZB3pgsHr4tlHCs+g2zcoccurW1FECYH43uWnfsvcyuccSX374bZIGBYHhcCfGIG4L7NH9fClhGzwqm2NfeBihWb4t45NHQqzGpAfGTCz5qwU1uUnMOXgUlZkF4t0iZXEabH7cK2hE="

Listing 8: The travis.yml file with the encrypted environment variable TRAVIS_MESSAGE


Travis CI暗号化の理解


トラヴィスCIは、公開鍵/秘密鍵のセキュリティシステムを使用してasymmetric cryptography , 機密データをエンコードしてデコードする.環境変数を暗号化するとき、カバーの下で、Travis CI CLIツールは暗号化を行うために公開鍵を使用しました.しかし、Traffis CIだけが秘密鍵へのアクセスを持っているので、復号化はTravis CIランタイム環境の中で起こることができます.
非対称暗号を用いることはデータを確保するための時間試験技術である.Travis CIウェブサイトの詳細を読むことができますhere .
リスト9は、環境変数を暗号化するとき、ウェブサーバの出力を示します.3行目で環境変数の値に注意してくださいTRAVIS_MESSAGE[secure] .
Node HTTP listening on 3000
  API Tests: 
{ message: '[secure]' }
     Can access GET at /
API Server shutting down at Sun Sep 27 2020 05:00:25 GMT+0000 (Coordinated Universal Time)
The command "npm test" exited with 0.

Listing 9: The output of the web server with the encrypted environment variable TRAVIS_MESSAGE


環境変数の値がなぜTRAVIS_MESSAGE 表示されていません、そして、表示されるすべては「安全です」
環境変数値対を難読化することは意味をなす.非対称の暗号化のため、Travis CIのプライベートキーはトラヴィスCI - CLIツールを使用して暗号化されたデータを復号するために必要です.Traffis CIがビルドを実行しているときに秘密鍵が利用可能ですtravis.yml . トラヴィスCIは、データが暗号化され、自動的にビルドレベルで復号化を意味します.ただし、ノード内のコード.JS SimpleTravis HTTP Serverは秘密鍵への直接アクセスを持っていません.すべてのアプリケーションは、データが安全であることを報告することができます.
ソースコードの中で暗号化されたデータを使用する方法がありますが、今のところ、理解する重要なことは、Travis CIが最小限の努力を必要とする方法で安全な方法でデータを暗号化する能力を提供するということです.

すべてをまとめる


敏感なデータを暗号化する能力は、どんな現代のCI/CDプラットホームのための基本的な要件です.クラウドベースの主要なソースコード管理プロバイダーのすべてのパブリックレポで行われたあらゆるコミットを見ているスクリプトを書く日々を過ごしている悪意のあるハッカーの軍団があります.間違いでクリアテキストとしてパスワードを発行すると、全く時間のない暗いWebを通してその方法を行います.幸いにも、この記事に記載されている環境変数暗号化技術を使用することは、極端な意図でそれらの努力を阻止するために長い道のりに行きます.
CircleCiの機密データを暗号化することは簡単で、必要です.Travis CIが提供するデータ暗号化機能を使用すると、コードを安全かつ確実にします.