次の方法で共有


Docker コンテンツの信頼

Azure DevOps Services

Docker Content Trust (DCT) を使用すると、リモート Docker レジストリとの間で送受信されるデータにデジタル署名を使用できます。 これらの署名を使用すると、クライアント側または実行時に特定のイメージ タグの整合性と発行元を確認できます。

イメージに署名するには、Notary サーバーが接続された Docker レジストリが必要です (たとえば、 Docker HubAzure Container Registry など)。

Azure Pipelines でのイメージの署名

開発用コンピューターの前提条件

  1. Docker 信頼の組み込みジェネレーターを使用するか、委任キー ペアを手動で生成します。 組み込みジェネレーターが使用されている場合、委任秘密キーはローカル Docker 信頼ストアにインポートされます。 それ以外の場合は、ローカルの Docker 信頼ストアに秘密キーを手動でインポートする必要があります。 詳細については、 キーの手動生成を 参照してください。
  2. 前の手順で生成した委任キーを使用して、最初のキーを委任にアップロードし、 リポジトリを開始します

ヒント

ローカル委任キーの一覧を表示するには、Notary CLI を使用して次のコマンドを実行します: $ notary key list

イメージに署名するためのパイプラインを設定する

  1. 開発マシン上のローカル Docker 信頼ストアから委任秘密キーを取得し、パイプラインで セキュリティで保護されたファイル として追加します。

  2. このセキュリティで保護されたファイル をすべてのパイプラインで使用することを承認します。

  3. containerRegistryServiceConnectionに関連付けられているサービス プリンシパルには、ターゲット コンテナー レジストリに AcrImageSigner ロールが必要です。

  4. 次の YAML スニペットに基づいてパイプラインを作成します。

    pool:
      vmImage: 'ubuntu-latest'
    
    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)
    
     - task: Docker@2
       inputs:
         command: push
         containerRegistry: $(containerRegistryServiceConnection)
         repository: $(imageRepository)
         tags: |
           $(tag)
       env:
         DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE: $(DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE)
         DOCKER_CONTENT_TRUST_ROOT_PASSPHRASE: $(rootPassphrase)
    

    前の例では、 DOCKER_CONFIG 変数は Docker タスクの login コマンドによって設定されています。 パイプラインのDOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASEとしてDOCKER_CONTENT_TRUST_ROOT_PASSPHRASEを設定します。

    DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE この例では、(リポジトリパスフレーズではなく) 秘密キーのパスフレーズを参照しています。 リポジトリが既に開始されているため(前提条件)、この例では秘密キーのパスフレーズのみが必要です。