Docker 內容信任

Azure DevOps Services

Docker 內容信任 (DCT) 可讓您使用數位簽章來取得從遠端 Docker 登錄傳送和接收的資料。 這些簽章允許用戶端或執行時間驗證特定映射標記的完整性和發行者。

注意

簽署映射的必要條件是附加 Notary 伺服器的 Docker 登錄, (範例包括Docker HubAzure Container Registry)

在 Azure Pipelines 中簽署映射

開發電腦上的必要條件

  1. 使用 Docker 信任的內建產生器或手動產生委派金鑰組。 如果使用 內建產生器 ,委派私密金鑰會匯入至本機 Docker 信任存放區。 否則,必須將私密金鑰手動匯入本機 Docker 信任存放區。 如需詳細資訊,請參閱 手動產生金鑰
  2. 使用上述步驟所產生的委派金鑰,將第一個金鑰上傳至委派並 起始存放庫

提示

若要檢視本機委派金鑰清單,請使用 Notary CLI 來執行下列命令: $ notary key list

設定用於簽署映射的管線

  1. 擷取委派私密金鑰,其位於您稍早使用之開發電腦的本機 Docker 信任存放區中,並在 Pipelines 中新增與 安全檔案 相同的 。

  2. 授權此安全檔案 以在所有管線中使用。

  3. containerRegistryServiceConnection 相關聯的服務主體必須在目標容器登錄中具有 AcrImageSigner 角色。

  4. 根據下列 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 ,變數是由 login Docker 工作中的 命令所設定。 建議您設定 DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE 為管線的 秘密變數 。 在 YAML 中使用管線變數的替代方法會以純文字公開複雜密碼。 DOCKER_CONTENT_TRUST_REPOSITORY_PASSPHRASE 在此範例中,指的是私密金鑰的複雜密碼 (不是存放庫複雜密碼) 。 我們在此範例中只需要私密金鑰的複雜密碼,因為存放庫已起始 (必要條件) 。