

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

# 的身分驗證和存取控制 AWS CodeCommit
<a name="auth-and-access-control"></a>

存取 AWS CodeCommit 需要登入資料。這些登入資料必須具有存取 AWS 資源的許可，例如 CodeCommit 儲存庫，以及您用來管理 Git 登入資料或用於建立 Git 連線的 SSH 公有金鑰的 IAM 使用者。下列各節提供如何使用 [AWS Identity and Access Management (IAM)](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html) 和 CodeCommit 協助安全存取 資源的詳細資訊：
+ [身分驗證](#authentication)
+ [存取控制](#access-control)

## 身分驗證
<a name="authentication"></a>

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

身分類型：
+ **IAM 使用者** – [IAM 使用者](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users.html)是您 Amazon Web Services 帳戶中具有特定自訂許可的身分。例如，IAM 使用者可以擁有建立和管理 Git 登入資料的許可，以存取 CodeCommit 儲存庫。**這是使用 CodeCommit 的建議使用者類型。**您可以使用 IAM 使用者名稱和密碼登入安全 AWS 網頁，例如 [AWS 管理主控台](https://console.aws.amazon.com/)、[AWS 開發論壇](https://forums.aws.amazon.com/)或 [AWS 支援 中心](https://console.aws.amazon.com/support/home#/)。

  您可以產生 Git 登入資料，或將 SSH 公有金鑰與 IAM 使用者建立關聯，也可以安裝和設定 **git-remote-codecommit**。這些是設定 Git 以使用 CodeCommit 儲存庫的最簡單方法。使用 [Git 登入](setting-up-gc.md)資料，您可以在 IAM 中產生靜態使用者名稱和密碼。然後，使用這些登入資料，對 Git 及支援 Git 使用者名稱和密碼身分驗證的任何第三方工具，建立 HTTPS 連線。使用 SSH 連接，您可以在本機電腦上建立 Git 和 CodeCommit 用於 SSH 身分驗證的公有和私有金鑰檔案。您可以將公有金鑰與 IAM 使用者建立關聯，並將私有金鑰存放在本機機器上。 **[git-remote-codecommit](setting-up-git-remote-codecommit.md)**會擴展 Git 本身，而且不需要為使用者設定 Git 憑證。

  此外，您可以為每個使用者產生[存取金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html)。當您透過[其中一個 AWS SDKs](https://aws.amazon.com/tools/) 或使用 [AWS Command Line Interface (AWS CLI)](https://aws.amazon.com/cli/) 以程式設計方式存取 AWS 服務時，請使用存取金鑰。軟體開發套件和 CLI 工具會使用存取金鑰，以加密方式簽署您的請求。如果您不使用 AWS 工具，則必須自行簽署請求。CodeCommit 支援 *Signature 第 4 版*，這是用於驗證傳入 API 請求的通訊協定。如需有關驗證請求的詳細資訊，請參閱《AWS 一般參考》**中的 [Signature 第 4 版簽署程序](https://docs.aws.amazon.com/general/latest/gr/signature-version-4.html)。
+ **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](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#create-iam-users)中的[IAM 最佳實務](https://docs.aws.amazon.com/IAM/latest/UserGuide/getting-started_create-admin-group.html)和*建立 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 。聯合身分會擔任角色，而該角色會提供臨時憑證。

  若需集中化管理存取權限，建議使用 AWS IAM Identity Center。如需詳細資訊，請參閱 *AWS IAM Identity Center 使用者指南*中的[什麼是 IAM Identity Center？](https://docs.aws.amazon.com/singlesignon/latest/userguide/what-is.html)。
+ **IAM 角色** – 與 IAM 使用者一樣，[IAM 角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)是您可以在帳戶中建立的 IAM 身分，以授予特定許可。

  *IAM 角色*[https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles.html)的身分具有特定許可權，其可以提供臨時憑證。您可以透過[從使用者切換到 IAM 角色 （主控台） ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_use_switch-role-console.html)或呼叫 AWS CLI 或 AWS API 操作來擔任角色。如需詳細資訊，請參閱《IAM 使用者指南》**中的[擔任角色的方法](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_manage-assume.html)。

  IAM 角色適用於聯合身分使用者存取、臨時 IAM 使用者許可、跨帳戶存取權與跨服務存取，以及在 Amazon EC2 執行的應用程式。如需詳細資訊，請參閱《*IAM 使用者指南*》中的 [IAM 中的快帳戶資源存取](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。
**注意**  
 Git 登入資料或 SSH 公有私有金鑰對不能與聯合身分使用者一起使用。此外，使用者偏好設定不適用於聯合身分使用者。如需如何使用聯合存取設定連線的相關資訊，請參閱[AWS CodeCommit 使用 git-remote-codecommit 對 HTTPS 連線的設定步驟](setting-up-git-remote-codecommit.md)。

## 存取控制
<a name="access-control"></a>

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

下列各節說明如何管理 CodeCommit 的許可。我們建議您先閱讀概觀。
+ [管理 CodeCommit 資源存取許可的概觀](#auth-and-access-control-iam-access-control-identity-based)
+ [針對 CodeCommit 使用身分型政策 (IAM 政策）](auth-and-access-control-iam-identity-based-access-control.md)
+ [CodeCommit 許可參考](auth-and-access-control-permissions-reference.md)

## 管理 CodeCommit 資源存取許可的概觀
<a name="auth-and-access-control-iam-access-control-identity-based"></a>

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

**注意**  
*帳戶管理員* (或管理員使用者) 是具有管理員權限的使用者。如需詳細資訊，請參《[IAM 使用者指南](https://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html)》中的 *IAM 最佳實務*。

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

**Topics**
+ [CodeCommit 資源和操作](#arn-formats)
+ [了解資源所有權](#understanding-resource-ownership)
+ [管理 資源的存取](#managing-access-resources)
+ [CodeCommit 中的資源範圍](#resource-scoping)
+ [指定政策元素：資源、動作、效果和委託人](#actions-effects-principals)
+ [在政策中指定條件](#policy-conditions)

### CodeCommit 資源和操作
<a name="arn-formats"></a>

在 CodeCommit 中，主要資源是儲存庫。每個資源都有一個相關聯的唯一 Amazon Resource Name (ARN)。在政策中，您使用 Amazon Resource Name (ARN) 來識別要套用政策的資源。如需 ARN 的詳細資訊，請參閱《Amazon Web Services 一般參考》**中的 [Amazon Resource Name (ARN) 與 AWS 服務命名空間](https://docs.aws.amazon.com/general/latest/gr/aws-arns-and-namespaces.html)。CodeCommit 目前不支援其他資源類型，稱為子資源。

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


| 資源類型 | ARN 格式 | 
| --- | --- | 
| 儲存庫 |  arn:aws:codecommit:*region*:*account-id*:*repository-name*  | 
|  所有 CodeCommit 儲存庫  |  arn:aws:codecommit:\$1  | 
|  指定 中指定帳戶擁有的所有 CodeCommit 儲存庫 AWS 區域  |  arn:aws:codecommit:*region*:*account-id*:\$1  | 

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

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

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

若要指定屬於特定帳戶的所有儲存庫，請使用萬用字元 (\$1)，如下所示：

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

若要指定所有資源，或如果特定的 API 動作不支援 ARN，請在 `Resource` 元素中使用萬用字元 (\$1)，如下所示：

```
"Resource": "*"
```

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

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

 如需使用 CodeCommit 資源的可用操作清單，請參閱 [CodeCommit 許可參考](auth-and-access-control-permissions-reference.md)。

### 了解資源所有權
<a name="understanding-resource-ownership"></a>

Amazon Web Services 帳戶擁有在帳戶中建立的資源，無論他們是誰建立的。具體而言，資源擁有者是驗證資源建立請求的[委託人實體](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html) （即根帳戶、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 資源。

### 管理 資源的存取
<a name="managing-access-resources"></a>

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

**注意**  
本節討論在 CodeCommit 的內容中使用 IAM。它不提供 IAM 服務的詳細資訊。如需 IAM 的詳細資訊，請參閱《[IAM 使用者指南》中的什麼是 IAM？](https://docs.aws.amazon.com/IAM/latest/UserGuide/introduction.html)。 **如需有關 IAM 政策語法和說明的資訊，請參閱*IAM 使用者指南*中的 [ IAM 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

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

**Topics**
+ [身分類型政策 (IAM 政策)](#identity-based-policies)
+ [資源型政策](#resource-based-policies-overview)

#### 身分類型政策 (IAM 政策)
<a name="identity-based-policies"></a>

若要管理對 AWS 資源的存取，請將許可政策連接至 IAM 身分。在 CodeCommit 中，您可以使用身分型政策來控制對儲存庫的存取。例如，您可以執行下列動作：
+ **將許可政策連接至您帳戶中的使用者或群組** – 若要授予使用者在 CodeCommit 主控台中檢視 CodeCommit 資源的許可，請將身分型許可政策連接至使用者或使用者所屬的群組。
+ **將許可政策連接至角色 （授予跨帳戶許可）** – 委派，例如當您想要授予跨帳戶存取權時，涉及在擁有資源的帳戶 （信任帳戶） 與包含需要存取資源之使用者的帳戶 （信任帳戶） 之間設定信任。許可政策授予角色的使用者對資源執行預定任務所需的許可。信任政策指定允許哪些受信任帳戶授予其使用者擔任角色的許可。如需詳細資訊，請參閱 [IAM 術語和概念](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)。

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

  1. 帳戶 A 管理員建立 IAM 角色，並將許可政策連接到可授與帳戶 A 中資源許可的角色。

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

  1. 帳戶 B 管理員接著可以將擔任該角色的許可委派給帳戶 B 中的任何使用者。這樣做可讓帳戶 B 中的使用者建立或存取帳戶 A 中的資源。如果您想要授予 AWS 服務擔任該角色的許可，信任政策中的委託人也可以是 AWS 服務委託人。如需詳細資訊，請參閱 [IAM 術語和概念](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html)中的委派。

  如需使用 IAM 來委派許可的相關資訊，請參閱《IAM 使用者指南》**中的[存取管理](https://docs.aws.amazon.com/IAM/latest/UserGuide/access.html)。



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

------
#### [ JSON ]

****  

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

------

若要限制您帳戶中使用者可存取的呼叫和資源，請建立特定的 IAM 政策，然後將這些政策連接到 IAM 使用者。如需如何建立 IAM 角色和探索 CodeCommit 範例 IAM 政策陳述式的詳細資訊，請參閱 [客戶受管身分政策範例](customer-managed-policies.md#customer-managed-policies-identity)。

#### 資源型政策
<a name="resource-based-policies-overview"></a>

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

### CodeCommit 中的資源範圍
<a name="resource-scoping"></a>

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

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

### 指定政策元素：資源、動作、效果和委託人
<a name="actions-effects-principals"></a>

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

某些 API 操作會需要多個動作的許可。如需資源與 API 操作的詳細資訊，請參閱 [CodeCommit 資源和操作](#arn-formats) 與 [CodeCommit 許可參考](auth-and-access-control-permissions-reference.md).

以下是政策的基本元素：
+ **資源** – 若要識別政策套用的資源，請使用 Amazon Resource Name (ARN)。如需詳細資訊，請參閱[CodeCommit 資源和操作](#arn-formats)。
+ **動作** – 若要識別您要允許或拒絕的資源操作，請使用動作關鍵字。例如，根據指定的 `Effect`， `codecommit:GetBranch`許可會允許或拒絕使用者執行 `GetBranch`操作，以取得 CodeCommit 儲存庫中分支的詳細資訊。
+ **效果** – 您可以指定當使用者請求特定動作時，允許或拒絕的效果。如果您未明確授予存取 (允許) 資源，則隱含地拒絕存取。您也可以明確拒絕存取資源，以確保即使另一個政策授予存取，使用者也無法存取該資源。
+ **委託人** – 在以身分為基礎的政策 (IAM 政策） 中，CodeCommit 支援的唯一政策類型，附加政策的使用者是隱含委託人。

若要進一步了解 IAM 政策語法，請參閱《IAM **[使用者指南》中的 IAM 政策參考](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies.html)。

如需顯示所有 CodeCommit API 動作及其適用的資源的資料表，請參閱 [CodeCommit 許可參考](auth-and-access-control-permissions-reference.md)。

### 在政策中指定條件
<a name="policy-conditions"></a>

當您授予許可時，您可以使用 IAM 的存取政策語言來指定政策應生效的條件。例如，建議只在特定日期之後套用政策。如需以政策語言指定條件的詳細資訊，請參閱《*IAM 使用者指南*》中的[條件](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#Condition)和[政策語法](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_grammar.html)。

欲表示條件，您可以使用預先定義的條件金鑰。CodeCommit 沒有特定的條件索引鍵。不過，您可以視需要使用 AWS全局條件索引鍵。如需 AWS全局金鑰的完整清單，請參閱《*IAM 使用者指南*》中的[條件的可用金鑰](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html#AvailableKeys)。