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 憑證,因此建議您在使用 時使用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 資源。有些 CodeCommit 功能不適用於根帳戶使用者。此外,將 Git 與根帳戶搭配使用的唯一方法是安裝和設定 git-remote-codecommit(建議) 或設定 AWS 憑證協助程式,該協助程式包含在 中 AWS CLI。您無法將 Git 憑證或SSH公有私有金鑰對與根帳戶使用者搭配使用。因此,我們不建議您在與 互動時使用根帳戶使用者 CodeCommit。

    重要

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

  • IAM Identity Center 和 IAM Identity Center 中的使用者 – AWS IAM Identity Center 擴展 的功能 AWS Identity and Access Management ,以提供集中管理使用者及其對 AWS 帳戶 和雲端應用程式的存取的集中位置。雖然建議使用 IAM Identity Center 作為使用 的大多數使用者的最佳實務 AWS,但目前不提供 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角色 (主控台)。您可以透過呼叫 AWS CLI 或 AWS API 操作,或使用自訂 來擔任角色URL。如需使用角色方法的詳細資訊,請參閱 IAM 使用者指南 中的擔任角色的方法

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

    • 聯合身分使用者存取 — 如需向聯合身分指派許可,請建立角色,並為角色定義許可。當聯合身分進行身分驗證時,該身分會與角色建立關聯,並獲授予由角色定義的許可。如需聯合角色的相關資訊,請參閱 IAM 使用者指南 中的為第三方身分提供者建立角色如果您使用 IAM Identity Center,您可以設定許可集。若要控制身分在身分驗證後可以存取的內容,IAMIdentity 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 服務 提出請求。FAS 只有在服務收到需要與其他 AWS 服務 或 資源互動才能完成的請求時,才會發出請求。在此情況下,您必須具有執行這兩個動作的許可。如需提出FAS請求的政策詳細資訊,請參閱轉送存取工作階段

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

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

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

    注意

    您無法將 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 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

所有 CodeCommit 儲存庫

arn:aws:codecommit:*

指定 中指定帳戶擁有的所有 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指定以 CodeCommit 名稱開頭,MyDemo並在 111111111111中註冊至 Amazon Web Services 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 資源的存取,您可以使用許可政策。許可政策描述誰可以存取哪些資源。以下部分說明用來建立許可政策的選項。

注意

本節討論在 內容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 主控台、、 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 使用者指南 中的條件可用金鑰