12.4. プロジェクトの署名
プロジェクトの署名には、Ansible プロジェクトディレクトリーが関係します。プロジェクトのディレクトリー構造の詳細は、Ansible ドキュメントの Sample Ansible setup を参照してください。
次のサンプルプロジェクトは、Playbook ディレクトリーの下にインベントリーファイルと、小規模な playbook が 2 つ含まれる非常に単純な構造となっています。
$ cd sample-project/ $ tree -a . . ├── inventory └── playbooks └── get_uptime.yml └── hello.yml 1 directory, 3 files
使用されるコマンドは、作業ディレクトリーがプロジェクトのルートであることを前提としています。ansible-sign project
コマンドは、プロジェクトのルートディレクトリーを最後の引数として受け取ります。
.
を使用して現在の作業ディレクトリーを示します。
ansible-sign
は、プロジェクトに含まれるセキュリティーで保護された全ファイルのチェックサム (SHA256) を取得して、チェックサムマニフェストファイルにコンパイルし、そのマニフェストファイルに署名することでコンテンツを改ざんから保護します。
コンテンツに署名するには、保護するファイルを ansible-sign
に指示する MANIFEST.in
ファイルをプロジェクトのルートディレクトリーに作成します。
内部的には、ansible-sign
は、Python の distlib ライブラリーの distlib.manifest
モジュールを使用するため、MANIFEST.in
はこのライブラリーが指定する構文に従う必要があります。MANIFEST.in
ファイルのディレクティブの説明については、Python Packaging User Guide を参照してください。
サンプルプロジェクトには 2 つのディレクティブが含まれており、最終的に次の MANIFEST.in
ファイルになります。
include inventory recursive-include playbooks *.yml
このファイルを配置したら、チェックサムマニフェストファイルを生成し、署名します。これらの手順は両方とも、ansible-sign
コマンドで 1 つで実行できます。
$ ansible-sign project gpg-sign .
実行が成功すると、次のような出力が表示されます。
[OK ] GPG signing successful! [NOTE ] Checksum manifest: ./.ansible-sign/sha256sum.txt [NOTE ] GPG summary: signature created
これでプロジェクトは署名されました。
gpg-sign
サブコマンドは project
サブコマンドの下にあることに注意してください。
プロジェクトのコンテンツに署名する場合、すべてのコマンドは ansible-sign project
で始まります。
すべての ansible-sign project
コマンドは、プロジェクトのルートディレクトリー .
を最後の引数として受け取ります。
ansible-sign
は、デフォルトのキーリングを使用し、最初に検出された利用可能な秘密鍵を探して、プロジェクトに署名します。--fingerprint
オプションを使用して特定の秘密鍵を指定したり、--gnupg-home
オプションを使用して完全に独立した GPG ホームディレクトリーを指定したりすることもできます。
デスクトップ環境を使用している場合、GnuPG は秘密鍵のパスフレーズの入力を自動的に要求します。
この機能が動作しない場合、またはデスクトップ環境なしで作業している場合 (SSH など)、gpg-sign
の後に -p --prompt-passphrase
フラグを使用できます。これにより、代わりに ansible-sign
がパスワードの入力を求めるようになります。
.ansible-sign
ディレクトリーがプロジェクトディレクトリーに作成されたことに注意してください。このディレクトリーには、チェックサムマニフェストとそのマニフェストの分離された GPG 署名が含まれています。
$ tree -a . . ├── .ansible-sign │ ├── sha256sum.txt │ └── sha256sum.txt.sig ├── inventory ├── MANIFEST.in └── playbooks ├── get_uptime.yml └── hello.yml