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 認證),因此建議您在使用時使用 IAM 使用者。 CodeCommit您可以使 CodeCommit 用其他身分類型存取,但其他身分類型會受到限制,如下所述。

身分類型:

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

    您可以產生 Git 登入資料,或將 SSH 公開金鑰與 IAM 使用者建立關聯,也可以安裝和設定git-remote-codecommit。這些是設定 Git 與您的 CodeCommit 儲存庫搭配使用的最簡單方法。使用 Git 認證,您可以在 IAM 中產生靜態使用者名稱和密碼。然後,使用這些登入資料,對 Git 及支援 Git 使用者名稱和密碼身分驗證的任何第三方工具,建立 HTTPS 連線。透過 SSH 連線,您可以在本機電腦上建立 Git 並 CodeCommit 用於 SSH 驗證的公開和私密金鑰檔案。您可以將公開金鑰與 IAM 使用者建立關聯,然後將私密金鑰儲存在本機電腦上。 git-remote-codecommit擴展 Git 本身,並且不需要為用戶設置 Git 憑據。

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

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

    重要

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

  • IAM 身分中心和 IAM 身分中心中的使用者 — AWS IAM Identity Center 擴展的功能,AWS Identity and Access Management以提供集中的位置,將使用者的管理及其對雲端應用程式的存取AWS 帳戶整合在一起。雖然 IAM 身分中心目前並未提供 Git 登入資料或安全殼層金鑰配對的機制AWS,但建議做為最佳作法。這些使用者可以安裝並設定git-remote-codecommit為本機複製 CodeCommit儲存庫,但並非所有整合式開發環境 (IDE) 都支援複製、推送或提取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 使用者,但不與特定的人員相關聯。您可以在 AWS Management Console 中透過切換角色來暫時取得 IAM 角色。您可以透過呼叫 AWS CLI 或 AWS API 操作,或是使用自訂 URL 來取得角色。如需使用角色的方法詳細資訊,請參閱《IAM 使用者指南》中的使用 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 請求時的政策詳細資訊,請參閱《轉發存取工作階段》https://docs.aws.amazon.com/IAM/latest/UserGuide/access_forward_access_sessions.html

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

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

    • 在 Amazon EC2 上執行的應用程式 – 針對在 EC2 執行個體上執行並提出 AWS CLI 和 AWS API 請求的應用程式,您可以使用 IAM 角色來管理暫時憑證。這是在 EC2 執行個體內儲存存取金鑰的較好方式。如需指派 AWS 角色給 EC2 執行個體並提供其所有應用程式使用,您可以建立連接到執行個體的執行個體設定檔。執行個體設定檔包含該角色,並且可讓 EC2 執行個體上執行的程式取得暫時憑證。如需詳細資訊,請參閱《IAM 使用者指南》中的利用 IAM 角色來授予許可給 Amazon EC2 執行個體上執行的應用程式

    如需了解是否要使用 IAM 角色或 IAM 使用者,請參閱《IAM 使用者指南》中的建立 IAM 角色 (而非使用者) 的時機

    注意

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

存取控制

您可以擁有有效的認證來驗證您的請求,但除非您擁有權限,否則您無法建立或存取 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 服務將 ARN 中的冒號 (:) 或斜線 (/) 視為相同字元。但是, 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且已註冊至 Amazon Web Services 帳戶111111111111的 CodeCommit儲存庫:us-east-2AWS 區域

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 資源的擁有者。

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

管理資源存取

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

注意

本節討論在的內容中使用 IAM CodeCommit。它不提供 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 角色和探索 IAM 政策陳述式範例的詳細資訊 CodeCommit,請參閱客戶管理的身分政策範例

資源型政策

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

資源範圍 CodeCommit

在中 CodeCommit,您可以將以身分識別為基礎的原則和權限範圍設定為資源,如中所述。CodeCommit 資源與營運但是,您無法將 ListRepositories 許可的範圍限定於某個資源。反之,您必須將其範圍開放給所有資源 (使用萬用字元 *)。否則,動作會失敗。

所有其他 CodeCommit 權限可設定為資源的範圍。

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

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

某些 API 操作會需要多個動作的許可。如需資源與 API 操作的詳細資訊,請參閱 CodeCommit 資源與營運CodeCommit 許可參考.

以下是政策的基本元素:

  • 資源 — 若要識別政策適用的資源,請使用 Amazon 資源名稱 (ARN)。如需詳細資訊,請參閱CodeCommit 資源與營運

  • 作 — 若要識別您要允許或拒絕的資源作業,請使用動作關鍵字。例如,根據指定的Effect,權限可以允codecommit:GetBranch許或拒絕使用者執行GetBranch作業,該作業會取得有關 CodeCommit 存放庫中分支的詳細資訊。

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

  • 主體 — 在以身分為基礎的政策 (IAM 政策) 中,唯一 CodeCommit 支援的政策類型,而該政策附加的使用者是隱含的主體。

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

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

在政策中指定條件

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

欲表示條件,您可以使用預先定義的條件金鑰。沒有 CodeCommit 特定的條件金鑰。不過,您可以使用適合的 AWS 通用條件金鑰。如需全 AWS 通用金鑰的清單,請參閱 IAM 使用者指南中的可用的條件金鑰