編輯套件原始控制項 - CodeArtifact

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

編輯套件原始控制項

在中 AWS CodeArtifact,您可以直接發佈套件版本、從上游存放庫下拉,或從外部公用存放庫擷取套件版本,將套件版本新增至存放庫。允許透過直接發佈和從公用儲存庫擷取來新增套件的套件版本,使您容易遭受相依性替換攻擊。如需詳細資訊,請參閱 依賴替換攻擊。若要保護自己免受相依性替代攻擊,您可以在儲存庫中的套件上設定套件來源控制項,以限制如何將該套件的版本新增至儲存庫。

任何想要允許不同套件的新版本同時來自內部來源 (例如直接發佈) 和外部來源 (例如公用儲存庫) 的團隊,都應該考慮設定套件來源控制項。根據預設,套件原始控制項會根據第一個套件版本新增至儲存庫的方式來設定。如需套件原始控制項設定及其預設值的相關資訊,請參閱〈〉Package 原點控制設定

若要在使用 put-package-origin-configuration API 作業之後移除套件記錄,請使用 delete-package (請參閱刪除套件或套件版本)。

常見的套件存取控制案例

本節包括將套件版本新增至 CodeArtifact 儲存庫時的一些常見案例。將根據第一個 Package 件版本的新增方式,為新套件設定套件來源控制設定。

在下列案例中,內部套件是直接從套件管理員發行至存放庫的封裝,例如您或您的小組撰寫並維護的套件。外部套件是存在於公用存放庫中的套件,可透過外部連線擷取到儲存庫中。

針對現有內部套件發行外部套件版本

在這個案例中,請考慮一個內部套件,PackaGa。您的團隊會將 PackaGea 的第一個 CodeArtifact 套件版本發佈到儲存庫中。因為這是該套件的第一個套件版本,所以套件原始控制項設定會自動設定為「發佈:允許」和「上游:區塊」。套裝程式存在於您的儲存庫中之後,會將具有相同名稱的套件發行至連線至存放庫的公用儲存 CodeArtifact 庫。這可能是針對內部軟件包的嘗試依賴替換攻擊,也可能只是巧合。無論如何,套件來源控制項都設定為封鎖新外部版本的擷取,以保護自己免受潛在攻擊。

在下圖中,RePoA 是具有與公共存 CodeArtifact 儲庫的外部連接的存儲庫。您的存儲庫包含的版本 1.1 和 2.1 的 PackaGa,但 3.0 版本已發佈到公共存儲庫。一般而言,RePoA 會在套件管理員要求套件之後擷取 3.0 版。由於套件擷取設定為「封」,因此 3.0 版本不會擷取到您的 CodeArtifact 儲存庫中,而且無法提供給與其連線的套件管理員。

簡單的圖形顯示從公共存儲庫阻止的新外部軟件包版本。

針對現有外部套件發行內部套件版本

在這個案例中,PackageB 外部存在於您已連線至存放庫的公用存放庫中的套件。當連接到儲存庫的套件管理員要求 PackageB 時,套件版本會從公用存放庫擷取到您的存放庫中。因為這是第一個套件版本的 PackageB 新增至您的儲存庫,因此套件原始設定會設定為「發佈:區塊」和「上游:允許」。稍後,您嘗試將具有相同套件名稱的版本發佈到存放庫。您可能不知道公開套件,並嘗試以相同名稱發佈不相關的套件,或者您嘗試發佈修補的版本,或者您嘗試直接發佈外部已存在的套件版本。 CodeArtifact 將拒絕您嘗試發布的版本,但允許您明確覆蓋拒絕並在必要時發布版本。

在下圖中,RePoA 是具有與公共存 CodeArtifact 儲庫的外部連接的存儲庫。您的存放庫包含從公用存放庫擷取的 3.0 版本。您想要將 1.1 版發佈至您的儲存庫。通常,您可以將 1.2 版發佈至 RePoA,但由於發佈設定為「封鎖」,因此無法發佈 1.2 版。

簡單的圖形顯示從公共存儲庫阻止的新外部軟件包版本。

發佈現有外部套件的修補套件版本

在這個案例中,PackageB 外部存在於您已連線至存放庫的公用存放庫中的套件。當連接到儲存庫的套件管理員要求 PackageB 時,套件版本會從公用存放庫擷取到您的存放庫中。因為這是第一個套件版本的 PackageB 新增至您的儲存庫,因此套件原始設定會設定為「發佈:區塊」和「上游:允許」。您的團隊決定需要將此套件的已修補套件版本發佈到存放庫。為了能夠直接發佈套件版本,您的團隊將套件原始控制項設定變更為「發佈:允許」和「上游:BLOCK」。此套件的版本現在可以直接發佈至您的儲存庫,並從公用存放庫擷取。在您的團隊發佈已修補的套件版本之後,您的團隊會將套件來源設定還原為「發佈:BLOCK」和「上游:允許」。

Package 原點控制設定

使用套件來源控制項,您可以設定如何將套件版本新增至儲存庫。下列清單包括可用的套件原點控制設定和值。

注意

在套件群組上設定原始控制項時,可用的設定和值會有所不同。如需詳細資訊,請參閱 Package 群組原點控制項

發布

此設定可設定是否可以使用套裝程式管理員或類似工具將套件版本直接發佈至儲存庫。

  • 允許:Package 版本可以直接發布。

  • BLOCK:Package 版本不能直接發布。

上游

此設定可設定套件版本是否可以從外部公用儲存庫擷取,或是在套件管理員要求時從上游儲存庫保留套件版本。

  • 允許:任何套件版本都可以從設定為上游 CodeArtifact 儲存庫的其他儲存庫中保留,或從具有外部連線的公用來源擷取的套件版本。

  • BLOCK:無法從設定為上游儲存庫的其他 CodeArtifact 儲存庫保留 Package 版本,或從具有外部連線的公用來源擷取套件版本。

預設套件原始碼控制設定

預設的套件原始控制設定是根據套件的關聯套件群組的原始控制設定來設定。如需有關套件群組和套件群組原始控制項的詳細資訊,請參閱使用套件群組 CodeArtifactPackage 群組原點控制項

如果套裝程式與某個套裝程式群組產生關聯,且其限制設定值ALLOW為每種限制類型,則套裝程式的預設套件原始控制項會以該套件的第一個版本新增至儲存庫的方式為基礎。

  • 如果第一個軟件包版本由軟件包管理器直接發布,則設置將是「發布:允許」和「上游:塊」。

  • 如果第一個套件版本是從公開來源擷取,則設定會是「發佈:區塊」和「上游:允許」。

注意

在 2022 年 5 月左右之前存在於 CodeArtifact 儲存庫中的套件,將具有「發佈:允許」和「上游:允」的預設套件原始控制項。此類 Package 件必須手動設定套件原始碼控制項。目前的預設值已在新套件上設定,並於 2022 年 7 月 14 日啟動此功能時開始強制執行。如需有關設定套件原始控制項的詳細資訊,請參閱編輯套件原始控制項

否則,如果某個套件與至少具有一個限制設定的套件群組相關聯BLOCK,則該套件的預設原始控制設定將設定為「發佈:允許」和「上游:LOW」。

套件原始控制項如何與套件群組原始控制項互動

由於套件具有原始控制設定,而且它們的關聯套件群組有原始控制設定,所以瞭解這兩個不同的設定如何互動是非常重要的。

這兩個設定之間的互動是設定BLOCK永遠勝過的設定ALLOW。下表列出了一些範例組態及其有效的原點控制設定。

Package 原點控制設定 Package 群組原點控制設定 有效的原點控制設定

發佈:允許

上游:允許

發佈:允許

上游:允許

發佈:允許

上游:允許

發佈:圖塊

上游:允許

發佈:允許

上游:允許

發佈:圖塊

上游:允許

發佈:允許

上游:允許

發佈:允許

上游:塊

發佈:允許

上游:塊

這意味著一個包的原始設置為 Publish:ALLO W 和上游:LO W,然後它有效地延遲到關聯的軟件包組的原始控制設置。

編輯套件原始控制項

Package 原始控制項會根據套件的第一個套件版本新增至存放庫的方式自動設定,如需詳細資訊,請參閱預設套件原始碼控制設定。若要新增或編輯 CodeArtifact 儲存區域中套裝程式的套裝程式原始控制項,請執行下列程序中的步驟。

若要新增或編輯套件原始控制項 (主控台)
  1. 請在以下位置開啟 AWS CodeArtifact 主控台。 https://console.aws.amazon.com/codesuite/codeartifact/home

  2. 在瀏覽窗格中,選擇「存放」,然後選擇包含您要編輯之套件的存放庫。

  3. 在「裝」表格中,搜尋並選取您要編輯的封裝。

  4. 在套件摘要頁面的 Origin 控制項中,選擇編輯

  5. 「編輯原點控制項」中,選擇您要為此套件設定的套件原始控制項。必須同時設定套件原始控制項設定 (「發佈」和「上游」)。

    • 若要允許直接佈封裝版本,請在 [發佈] 中選擇 [允許]。若要封鎖套件版本的發佈,請選擇 [封]。

    • 若要允許從外部儲存庫擷取套裝程式,並從上游儲存庫提取套裝程式,請在上游來源中選擇允許。若要封鎖所有從外部和上游儲存庫擷取套件版本,請選擇「封鎖」。

若要新增或編輯套件原始控制項 (AWS CLI)
  1. 如果您尚未設定,請 AWS CLI 依照中的步驟進行設定設定使用 AWS CodeArtifact

  2. 使用指put-package-origin-configuration令新增或編輯套件原始控制項。取代下列欄位:

    • my_domain 取代為包含您要更新之套件的 CodeArtifact 網域。

    • my_repo 取代為包含您要更新之套件的 CodeArtifact 儲存庫。

    • npm 取代為您要更新的套件的套件格式。

    • my_package 取代為您要更新的套件名稱。

    • LO W 和 BLOCK 替換為您想要的軟件包源控制設置。

    aws codeartifact put-package-origin-configuration --domain my_domain \ --repository my_repo --format npm --package my_package \ --restrictions publish=ALLOW,upstream=BLOCK

發佈和上游儲存庫

CodeArtifact 不允許發布可訪問的上游存儲庫或公共存儲庫中存在的軟件包版本。例如,假設您想要將 Maven 套件發佈com.mycompany.mypackage:1.0到儲存庫myrepo,並且myrepo具有與 Maven Central 外部連線的上游儲存庫。請考慮下列案例。

  1. 上的套件原始控制項設定com.mycompany.mypackage為「發佈:允許」和「上游:允許」。如果com.mycompany.mypackage:1.0存在於上游存儲庫或 Maven Central 中,則 CodeArtifact 拒絕任何發布到它的嘗試,並出現 409 衝突錯誤。myrepo您仍然可以發佈不同的版本,例如com.mycompany.mypackage:1.1.

  2. 上的套件原始控制項設定com.mycompany.mypackage為「發佈:允許」和「上游:區塊」。您可以將任何版本的發佈com.mycompany.mypackage到尚未存在的存放庫,因為無法存取套件版本。

  3. 上的套件原始控制項設定com.mycompany.mypackage為「發佈:區塊」和「上游:允許」。您無法將任何套件版本直接發佈到存放庫。