AWS CodeCommit的身分驗證與存取控制 - AWS CodeCommit

AWS CodeCommit 不再提供給新客戶。的現有客戶 AWS CodeCommit 可以繼續正常使用服務。進一步了解"

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

AWS CodeCommit的身分驗證與存取控制

存取 AWS CodeCommit 需要 憑證。這些憑證必須具有存取 AWS 資源的許可,例如 CodeCommit 儲存庫,以及您用來管理 Git 憑證的 IAM 使用者,或您用於建立 Git 連線的 SSH 公有金鑰。下列各節提供如何使用 AWS Identity and Access Management (IAM) 和 CodeCommit 以協助安全存取 資源的詳細資訊:

身分驗證

由於 CodeCommit 儲存庫是以 Git 為基礎,並支援 Git 的基本功能,包括 Git 憑證,我們建議您在使用 IAM 時使用 CodeCommit 使用者。您可以使用其他身分類型存取 CodeCommit ,但其他身分類型會受到限制,如下所述。

身分類型:

  • IAM 使用者IAM 使用者是您 Amazon Web Services 帳戶中具有特定自訂許可的身分。例如,IAM 使用者可以擁有建立和管理 Git 登入資料以存取 CodeCommit 儲存庫的許可。這是使用 CodeCommit 的建議使用者類型。您可以使用 IAM 使用者名稱和密碼登入,以保護 AWS Management ConsoleAWS 討論論壇AWS Support 中心等 AWS 網頁。

    您可以產生 Git 憑證,或將 SSH 公有金鑰與 IAM 使用者建立關聯,也可以安裝和設定 git-remote-codecommit。這些是設定 Git 以使用 CodeCommit 儲存庫的最簡單方法。使用 Git 憑證,您可以在 IAM 中產生靜態使用者名稱和密碼。然後,您可以使用這些憑證與 Git 和支援 Git 使用者名稱和密碼身分驗證的任何第三方工具進行 HTTPS 連線。使用 SSH 連線時,您可以在本機機器上建立公有和私有金鑰檔案,Git 和 CodeCommit 用於 SSH 身分驗證。您可以將公有金鑰與 IAM 使用者建立關聯,並將私有金鑰存放在本機機器上。 git-remote-codecommit會擴展 Git 本身,而且不需要為使用者設定 Git 憑證。

    此外,您可以為每個使用者產生存取金鑰。當您透過其中一個 AWS SDKs 或使用 AWS Command Line Interface (AWS CLI) 以程式設計方式存取 AWS 服務時,請使用存取金鑰。SDK 和 CLI 工具會使用存取金鑰以密碼編譯方式簽署您的請求。如果您不使用這些 AWS 工具,則必須自行簽署請求。 CodeCommit 支援 Signature 第 4 版,這是用於驗證傳入 API 請求的通訊協定。如需有關驗證請求的詳細資訊,請參閱《AWS 一般參考》中的 Signature 第 4 版簽署程序

  • Amazon Web Services 帳戶根使用者 – 當您註冊時 AWS,您會提供與您的 Amazon Web Services 帳戶相關聯的電子郵件地址和密碼。這些是您的根憑證,可完整存取您的所有 AWS 資源。Some CodeCommit 功能不適用於根帳戶使用者。此外,將 Git 與根帳戶搭配使用的唯一方法是安裝和設定 git-remote-codecommit(建議) 或設定 AWS 憑證協助程式,該協助程式包含在 中 AWS CLI。您無法將 Git 憑證或 SSH 公有私有金鑰對與根帳戶使用者搭配使用。因此,我們不建議您在與 CodeCommit互動時使用根帳戶使用者。

    重要

    基於安全考量,建議您僅使用根憑證來建立管理員使用者,這是具有帳戶 AWS 完整許可的 IAM 使用者。然後,您可以使用此管理員使用者來建立許可有限的其他 IAM 使用者和角色。如需詳細資訊,請參閱 IAM 使用者指南中的 Word 最佳實務建立管理員使用者和群組IAM

  • IAM Identity Center 和 IAM Identity Center 中的使用者 – AWS IAM Identity Center 擴展 的功能 AWS Identity and Access Management ,以提供集中位置,將使用者的管理及其對 AWS 帳戶 和雲端應用程式的存取集合在一起。雖然建議大多數使用 的使用者作為最佳實務 AWS,但 IAM Identity Center 目前不提供 Git 憑證或 SSH 金鑰對的機制。這些使用者可以安裝並設定 git-remote-codecommit 以本機複製 CodeCommit 儲存庫,但並非所有整合的開發環境 (IDEs) 都支援使用 複製、推送或提取git-remote-codecommit

    最佳實務是, 要求人類使用者,包括需要管理員存取權的使用者,使用 AWS 服務 臨時憑證與身分提供者聯合來存取 。

    聯合身分是來自您的企業使用者目錄、Web 身分提供者、 AWS Directory Service、身分中心目錄,或 AWS 服務 是透過身分來源提供的憑證存取的任何使用者。當聯合身分存取時 AWS 帳戶,它們會擔任角色,而角色會提供臨時憑證。

    對於集中式存取權管理,我們建議您使用 AWS IAM Identity Center。您可以在 IAM Identity Center 中建立使用者和群組,或者您可以連線並同步到您自己的身分來源中的一組使用者 AWS 帳戶 和群組,以便在所有 和應用程式中使用。如需 IAM Identity Center 的相關資訊,請參閱 AWS IAM Identity Center 使用者指南中的什麼是 IAM Identity Center?

  • IAM 角色 – 就像 IAM 使用者一樣,IAM 角色是您可以在帳戶中建立的 IAM 身分,以授予特定許可。

    IAM 角色是 中具有特定許可 AWS 帳戶 的身分。它類似於 IAM 使用者,但與特定人員無關。若要暫時在 中擔任 IAM 角色 AWS Management Console,您可以從使用者切換至 IAM 角色 (主控台)。您可以透過呼叫 or AWS API AWS CLI 操作或使用自訂 URL 來擔任角色。如需使用角色方法的詳細資訊,請參閱 IAM 使用者指南中的擔任角色的方法

    在下列情況下,具有臨時憑證的 IAM 角色很有用:

    • 聯合身分使用者存取 — 如需向聯合身分指派許可,請建立角色,並為角色定義許可。當聯合身分進行身分驗證時,該身分會與角色建立關聯,並獲授予由角色定義的許可。如需聯合角色的相關資訊,請參閱 IAM 使用者指南中的為第三方身分提供者 (聯合) 建立角色如果您使用 IAM Identity Center,您可以設定許可集。若要控制身分在身分驗證後可存取的內容,IAM Identity Center 會將許可集與 IAM 中的角色相關聯。如需有關許可集的資訊,請參閱 AWS IAM Identity Center 使用者指南中的許可集

    • 臨時 IAM 使用者許可 – IAM 使用者或角色可以擔任 IAM 角色,暫時取得特定任務的不同許可。

    • 跨帳戶存取 – 您可以使用 IAM 角色,允許不同帳戶中的某人 (受信任的主體) 存取您帳戶中的資源。角色是授予跨帳戶存取權的主要方式。不過,對於某些 AWS 服務,您可以直接將政策連接到資源 (而不是使用角色作為代理)。若要了解跨帳戶存取的角色和資源型政策之間的差異,請參閱 IAM 使用者指南中的 IAM 中的跨帳戶資源存取

    • 跨服務存取 – 有些 AWS 服務 使用其他 中的功能 AWS 服務。例如,當您在 服務中撥打電話時,該服務通常會在 Amazon EC2 中執行應用程式,或在 Amazon S3 中存放物件。服務可能會使用呼叫主體的許可、使用服務角色或使用服務連結角色來執行此作業。

      • 轉送存取工作階段 (FAS) – 當您使用 IAM 使用者或角色在 中執行動作時 AWS,您會被視為主體。使用某些服務時,您可能會執行某個動作,進而在不同服務中啟動另一個動作。FAS 使用呼叫 的委託人許可 AWS 服務,並結合 AWS 服務 請求向下游服務提出請求。只有在服務收到需要與其他 AWS 服務 或 資源互動才能完成的請求時,才會提出 FAS 請求。在此情況下,您必須具有執行這兩個動作的許可。如需提出 FAS 請求的政策詳細資訊,請參閱轉送存取工作階段

      • 服務角色 – 服務角色是 IAM 角色,服務會擔任該角色來代表您執行動作。IAM 管理員可以從 IAM 中建立、修改和刪除服務角色。如需詳細資訊,請參閱 IAM 使用者指南中的建立角色以將許可委派給 AWS 服務

      • 服務連結角色 – 服務連結角色是連結至 的服務角色類型 AWS 服務。服務可以擔任代表您執行動作的角色。服務連結角色會顯示在您的 中 AWS 帳戶 ,並由 服務擁有。IAM 管理員可以檢視,但無法編輯服務連結角色的許可。

    • 在 Amazon EC2 上執行的應用程式 – 您可以使用 IAM 角色來管理在 EC2 執行個體上執行的應用程式的臨時憑證,以及提出 AWS CLI or AWS API 請求。最好將存取金鑰存放在 EC2 執行個體中。若要將 AWS 角色指派給 EC2 執行個體並將其提供給其所有應用程式,您可以建立連接至執行個體的執行個體設定檔。執行個體設定檔包含 角色,並啟用在 EC2 執行個體上執行的程式,以取得暫時憑證。如需詳細資訊,請參閱 IAM 使用者指南中的使用 Word 角色將許可授予在 Amazon EC2 執行個體上執行的應用程式IAM

    注意

    您無法將 Git 憑證或 SSH 公有私有金鑰對與聯合身分使用者搭配使用。此外,使用者偏好設定不適用於聯合身分使用者。如需如何使用聯合存取設定連線的相關資訊,請參閱AWS CodeCommit 使用 HTTPS 將 Word 連線設定至 的步驟 git-remote-codecommit

存取控制

您可以擁有有效的憑證來驗證請求,但除非您具有許可,否則無法建立或存取 CodeCommit 資源。例如,您必須有許可來檢視儲存庫、推送程式碼、建立和管理 Git 登入資料等等。

下列各節說明如何管理 for CodeCommit 的許可。我們建議您先閱讀概觀。

管理 CodeCommit 資源的存取許可概觀

每個 AWS 資源都由 Amazon Web Services 帳戶擁有。建立或存取資源的許可由許可政策所控管。帳戶管理員可以將許可政策連接至 IAM 身分 (即使用者、群組和角色)。某些服務,例如 AWS Lambda,也支援將許可政策連接至 資源。

注意

帳戶管理員 (或管理員使用者) 是具有管理員權限的使用者。如需詳細資訊,請參閱 IAM 使用者指南中的 Word 最佳實務IAM

授予許可時,您會決定誰取得許可、為了哪些資源而取得許可,以及您允許對這些資源進行的特定動作。

CodeCommit 資源和操作

In CodeCommit 的主要資源是儲存庫。每個資源都有與其相關聯的唯一 Amazon Resource Names (ARN)。在政策中,您可以使用 Amazon Resource Name (ARN) 來識別政策適用的資源。如需 ARNs 的詳細資訊,請參閱 中的 Amazon Resource Names (ARN) AWS 和服務命名空間Amazon Web Services 一般參考。 CodeCommit 目前不支援其他資源類型,稱為子資源。

下表說明如何指定 CodeCommit 資源。

資源類型 ARN格式
儲存庫

arn:aws:codecommit:region:account-id:repository-name

All CodeCommit 儲存庫

arn:aws:codecommit:*

指定 中指定帳戶擁有的 All CodeCommit 儲存庫 AWS 區域

arn:aws:codecommit:region:account-id:*

注意

大多數 AWS 服務會將 ARNs 中的冒號 (:) 或正斜線 (/) 視為相同的字元。不過, CodeCommit 需要與資源模式和規則完全相符。建立事件模式時,請務必使用正確的 ARN 字元,以便它們符合 資源中的 ARN 語法。

例如,您可以指定特定儲存庫 (MyDemoRepo) 在您的陳述式中,使用其 ARN,如下所示:

"Resource": "arn:aws:codecommit:us-west-2:111111111111:MyDemoRepo"

若要指定屬於特定帳戶的所有儲存庫,請使用萬用字元 (*),如下所示:

"Resource": "arn:aws:codecommit:us-west-2:111111111111:*"

若要指定所有資源,或如果特定 API 動作不支援 ARNs,請在 Resource元素中使用萬用字元 (*),如下所示:

"Resource": "*"

您也可以使用萬用字元 (*),以指定與儲存庫名稱局部相符的所有資源。例如,下列 ARN 會指定任何以 名稱開頭,MyDemo並在 111111111111中向 Amazon Web Services 帳戶註冊的 CodeCommit us-east-2 儲存庫 AWS 區域:

arn:aws:codecommit:us-east-2:111111111111:MyDemo*

如需使用 CodeCommit 資源的可用操作清單,請參閱 CodeCommit 許可參考

了解資源所有權

Amazon Web Services 帳戶擁有在帳戶中建立的資源,無論建立這些資源的對象為何。具體而言,資源擁有者是驗證資源建立請求的主體實體 (即根帳戶、IAM 使用者或 IAM 角色) 的 Amazon Web Services 帳戶。下列範例說明其如何運作:

  • 如果您在 Amazon Web Services 帳戶中建立 IAM 使用者,並將建立 CodeCommit 資源的許可授予該使用者,則使用者可以建立 CodeCommit 資源。不過,使用者所屬的 Amazon Web Services 帳戶擁有 CodeCommit 資源。

  • 如果您使用 Amazon Web Services 帳戶的根帳戶憑證來建立規則,您的 Amazon Web Services 帳戶就是 CodeCommit 資源的擁有者。

  • 如果您在 Amazon Web Services 帳戶中建立具有建立 IAM 資源許可的 CodeCommit 角色,則任何可以擔任該角色的人都可以建立 CodeCommit 資源。角色所屬的 Amazon Web Services 帳戶擁有 CodeCommit 資源。

管理資源存取

若要管理對 AWS 資源的存取,您可以使用許可政策。許可政策描述誰可以存取哪些資源。以下部分說明用來建立許可政策的選項。

注意

本節討論在 IAM 的內容中使用 CodeCommit。它不提供 IAM 服務的詳細資訊。如需 IAM 的詳細資訊,請參閱 IAM 使用者指南中的什麼是 Word?IAM 如需有關 IAM 政策語法和描述的資訊,請參閱 IAM 使用者指南中的 Word 政策參考IAM

連接至 IAM 身分的許可政策稱為身分型政策 (IAM 政策)。連接到資源的許可政策稱為資源型政策。目前, CodeCommit 僅支援身分型政策 (IAM 政策)。

身分型政策 (IAM 政策)

若要管理對 AWS 資源的存取,您可以將許可政策連接至 IAM 身分。In CodeCommit,您可以使用身分型政策來控制對儲存庫的存取。例如,您可以執行下列動作:

  • 將許可政策連接至您帳戶中的使用者或群組 – 若要授予使用者在 CodeCommit 主控台中檢視 CodeCommit 資源的許可,請將身分型許可政策連接至使用者所屬的使用者或群組。

  • 將許可政策連接至角色 (授予跨帳戶許可) – 委派,例如當您想要授予跨帳戶存取權時,涉及在擁有資源的帳戶 (信任帳戶) 與包含需要存取資源之使用者 (信任帳戶) 之間的信任。許可政策授予角色的使用者對資源執行預定任務所需的許可。信任政策指定允許哪些受信任帳戶授予其使用者擔任角色的許可。如需詳細資訊,請參閱 IAM 術語和概念

    若要授予跨帳戶許可,請將身分型許可政策連接至 IAM 角色。例如,帳戶 A 中的管理員可以建立角色,將跨帳戶許可授予另一個 Amazon Web Services 帳戶 (例如帳戶 B) 或服務, AWS 如下所示:

    1. 帳戶 A 管理員會建立 IAM 角色,並將許可政策附加至授予帳戶 A 中資源許可的角色。

    2. 帳戶 A 管理員將信任政策連接至該角色,識別帳戶 B 做為可擔任該角的委託人。

    3. 然後,帳戶 B 管理員可以將擔任角色的許可委派給帳戶 B 中的任何使用者。這樣做可讓帳戶 B 中的使用者在帳戶 A 中建立或存取資源。如果您想要授予 AWS 服務許可以擔任角色,信任政策中的主體也可以是 AWS 服務主體。如需詳細資訊,請參閱 IAM 術語和概念中的委派。

    如需使用 IAM 委派許可的詳細資訊,請參閱 IAM 使用者指南中的存取管理

下列範例政策允許使用者在名為 的儲存庫中建立分支 MyDemoRepo:

{ "Version": "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Action" : [ "codecommit:CreateBranch" ], "Resource" : "arn:aws:codecommit:us-east-2:111111111111:MyDemoRepo" } ] }

若要限制您帳戶中使用者可存取的呼叫和資源,請建立特定的 IAM 政策,然後將這些政策連接至 IAM 使用者。如需如何建立 IAM 角色和探索範例 IAM 政策陳述式的詳細資訊 CodeCommit,請參閱 客戶受管身分政策範例

資源型政策

有些服務,例如 Amazon S3,也支援資源型許可政策。例如,您可以將資源型政策連接到 S3 儲存貯體,以管理該儲存貯體的存取許可。 CodeCommit 不支援資源型政策,但您可以使用標籤來識別資源,然後您可以在 IAM 政策中使用。如需以標籤為基礎的政策範例,請參閱身分型政策 (IAM 政策)

資源範圍 in CodeCommit

In CodeCommit 中,您可以將身分型政策與資源許可範圍化,如 所述CodeCommit 資源和操作。但是,您無法將 ListRepositories 許可的範圍限定於某個資源。反之,您必須將其範圍開放給所有資源 (使用萬用字元 *)。否則,動作會失敗。

所有其他 CodeCommit 許可都可以範圍限定為 資源。

指定政策元素:資源、動作、效果和委託人

您可以建立政策,以允許或拒絕使用者存取資源,或允許或拒絕使用者對這些資源採取特定動作。 CodeCommit 定義一組公有 API 操作,定義使用者如何使用服務,無論是透過 CodeCommit 主控台、SDKs AWS CLI、 還是直接呼叫這些 APIs。若要授予這些 API 操作的許可, CodeCommit 會定義一組您可以在政策中指定的動作。

有些 API 操作可能需要多個動作的許可。如需資源和 API 操作的詳細資訊,請參閱 CodeCommit 資源和操作CodeCommit 許可參考

以下是政策的基本元素:

  • 資源 – 若要識別政策適用的資源,請使用 Amazon Resource Name (ARN)。如需詳細資訊,請參閱CodeCommit 資源和操作

  • 動作 – 若要識別您要允許或拒絕的資源操作,請使用動作關鍵字。例如,根據指定的 Effectcodecommit:GetBranch許可會允許或拒絕使用者執行 GetBranch操作,以取得 a CodeCommit 儲存庫中分支的詳細資訊。

  • 效果 – 您可以指定當使用者請求特定動作時,允許或拒絕發生的效果。如果您未明確授予存取 (允許) 資源,則隱含地拒絕存取。您也可以明確拒絕存取資源,以確保即使另一個政策授予存取,使用者也無法存取該資源。

  • 主體 – 在身分型政策 (IAM 政策) 中, CodeCommit 支援的唯一政策類型,附加政策的使用者是隱含主體。

若要進一步了解 IAM 政策語法,請參閱 IAM 使用者指南中的 Word 政策參考IAM

如需顯示所有 CodeCommit API Word動作及其適用的資源的資料表,請參閱 CodeCommit 許可參考

在政策中指定條件

當您授予許可時,您可以使用 IAM 的存取政策語言來指定政策應生效的條件。例如,建議只在特定日期之後套用政策。如需以政策語言指定條件的詳細資訊,請參閱 IAM 使用者指南中的條件政策文法

欲表示條件,您可以使用預先定義的條件金鑰。沒有特定於 CodeCommit 的條件索引鍵。不過,您可以視需要使用 AWS全局條件金鑰。如需 AWS全局金鑰的完整清單,請參閱 IAM 使用者指南中的條件的可用金鑰