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

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

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

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

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

身分驗證

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

身分類型:

  • IAM 使用者IAM 使用者是您 Amazon Web Services 帳戶中具有特定自訂許可的身分。例如,IAM 使用者可以擁有建立和管理 Git 登入資料的許可,以存取 CodeCommit 儲存庫。這是使用 CodeCommit 的建議使用者類型。您可以使用 IAM 使用者名稱和密碼登入安全 AWS 網頁,例如 AWS Management ConsoleAWS 開發論壇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 服務時,請使用存取金鑰。軟體開發套件和 CLI 工具會使用存取金鑰,以加密方式簽署您的請求。如果您不使用 AWS 工具,則必須自行簽署請求。CodeCommit 支援 Signature 第 4 版,這是用於驗證傳入 API 請求的通訊協定。如需有關驗證請求的詳細資訊,請參閱《AWS 一般參考》中的 Signature 第 4 版簽署程序

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

    重要

    基於安全理由,建議您只在建立管理員使用者時使用根憑證,這是擁有 AWS 帳戶完整許可的 IAM 使用者。然後,您可以使用此管理員使用者建立其他 IAM 使用者和角色,並授予有限許可。如需詳細資訊,請參閱《IAM 使用者指南》https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#create-iam-users中的IAM 最佳實務建立 Admin (管理員) 使用者和群組

  • 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、Identity Center 目錄,或 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 角色 (主控台)。您可以透過呼叫 AWS CLI 或 AWS API 操作或使用自訂 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 Simple Storage Service (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 或 AWS API 請求。這是在 EC2 執行個體內儲存存取金鑰的較好方式。若要將 AWS 角色指派給 EC2 執行個體,並將其提供給其所有應用程式,您可以建立連接至執行個體的執行個體描述檔。執行個體設定檔包含該角色,並且可讓 EC2 執行個體上執行的程式取得臨時憑證。如需詳細資訊,請參閱《IAM 使用者指南》中的使用 IAM 角色來授予許可權給 Amazon EC2 執行個體上執行的應用程式

    注意

    Git 登入資料或 SSH 公有私有金鑰對不能與聯合身分使用者一起使用。此外,使用者偏好設定不適用於聯合身分使用者。如需如何使用聯合存取設定連線的相關資訊,請參閱AWS CodeCommit 使用 git-remote-codecommit 對 HTTPS 連線的設定步驟

存取控制

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

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

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

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

注意

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

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

CodeCommit 資源和操作

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

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

資源類型 ARN 格式
儲存庫

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

所有 CodeCommit 儲存庫

arn:aws:codecommit:*

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

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

注意

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

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

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

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

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

若要指定所有資源,或如果特定的 API 動作不支援 ARN,請在 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 帳戶中建立具有建立 CodeCommit 資源許可的 IAM 角色,則任何可以擔任該角色的人都可以建立 CodeCommit 資源。角色所屬的 Amazon Web Services 帳戶擁有 CodeCommit 資源。

管理 資源的存取

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

注意

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

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

身分類型政策 (IAM 政策)

若要管理 AWS 資源的存取,請將許可政策連接至 IAM 身分。在 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 角色和探索 CodeCommit 範例 IAM 政策陳述式的詳細資訊,請參閱 客戶受管身分政策範例

資源型政策

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

CodeCommit 中的資源範圍

在 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操作,以取得 CodeCommit 儲存庫中分支的詳細資訊。

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

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

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

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

在政策中指定條件

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

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