Docker コンテンツの信頼
Azure DevOps Services
Docker コンテンツの信頼 (DCT) を使用すると、リモート Docker レジストリとの間で送受信されるデータにデジタル署名を使用できます。 これらの署名を使用すると、特定のイメージ タグの整合性と発行元をクライアント側またはランタイムで検証できます。
注意
イメージに署名するための前提条件は、Notary サーバーがアタッチされた Docker レジストリです (例: Docker Hub または Azure Container Registry)
Azure Pipelines でのイメージの署名
開発用コンピューターでの前提条件
- Docker 信頼の組み込みジェネレーターを使用するか、委任キー ペアを手動で生成します。 組み込みジェネレーターを使用すると、委任秘密キーがローカル Docker 信頼ストアにインポートされます。 それ以外の場合は、秘密キーをローカル Docker 信頼ストアに手動でインポートする必要があります。 詳細については、「キーの手動生成」を参照してください。
- 上のステップで生成された委任キーを使用して、最初のキーを委任にアップロードし、リポジトリを開始します
ヒント
ローカル委任キーの一覧を表示するには、Notary CLI を使用して次のコマンドを実行します: $ notary key list
。
イメージに署名するためにパイプラインを設定する
前に使用した開発マシンのローカル Docker 信頼ストアにある委任秘密キーを取得し、同じものを Pipelines にセキュリティで保護されたファイルとして追加します。
すべてのパイプラインで使用するために、このセキュリティで保護されたファイルを承認します。
containerRegistryServiceConnection
に関連付けられているサービス プリンシパルには、ターゲット コンテナー レジストリでの AcrImageSigner ロールが必要です。次の YAML スニペットに基づいてパイプラインを作成します。
pool: vmImage: 'Ubuntu 16.04' variables: system.debug: true containerRegistryServiceConnection: serviceConnectionName imageRepository: foobar/content-trust tag: test steps: - task: Docker@2 inputs: command: login containerRegistry: $(containerRegistryServiceConnection) - task: DownloadSecureFile@1 name: privateKey inputs: secureFile: cc8f3c6f998bee63fefaaabc5a2202eab06867b83f491813326481f56a95466f.key - script: | mkdir -p $(DOCKER_CONFIG)/trust/private cp $(privateKey.secureFilePath) $(DOCKER_CONFIG)/trust/private - task: Docker@2 inputs: command: build Dockerfile: '**/Dockerfile' containerRegistry: $(containerRegistryServiceConnection) repository: $(imageRepository) tags: | $(tag) arguments: '--disable-content-trust=false' - task: Docker@2 inputs: command: push containerRegistry: $(containerRegistryServiceConnection) repository: $(imageRepository) tags: | $(tag) arguments: '--disable-content-trust=false' env: DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: $(DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE)
前の例で、
DOCKER_CONFIG
変数は Docker タスクのlogin
コマンドによって設定されます。 パイプラインのシークレット変数としてDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
を設定することをお勧めします。 YAML でパイプライン変数を使用する別の方法では、パスフレーズがプレーンテキストで公開されます。 この例のDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE
では、(リポジトリのパスフレーズではなく) 秘密キーのパスフレーズを参照しています。 リポジトリは既に開始されているため (前提条件)、この例では秘密キーのパスフレーズのみが必要です。