

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

# 中的資料保護 AWS CodeCommit
<a name="data-protection"></a>

作為受管服務， 受到 AWS 全球網路安全的保護。如需 AWS 安全服務以及如何 AWS 保護基礎設施的資訊，請參閱[AWS 雲端安全](https://aws.amazon.com/security/)。若要使用基礎設施安全的最佳實務來設計您的 AWS 環境，請參閱*安全支柱 AWS Well-Architected Framework* 中的[基礎設施保護](https://docs.aws.amazon.com/wellarchitected/latest/security-pillar/infrastructure-protection.html)。

您可以使用 AWS 發佈的 API 呼叫，透過網路存取 。使用者端必須支援下列專案：
+ Transport Layer Security (TLS)。我們需要 TLS 1.2 並建議使用 TLS 1.3。
+ 具備完美轉送私密(PFS)的密碼套件，例如 DHE (Ephemeral Diffie-Hellman)或 ECDHE (Elliptic Curve Ephemeral Diffie-Hellman)。現代系統(如 Java 7 和更新版本)大多會支援這些模式。

CodeCommit 儲存庫會在靜態時自動加密。不需要客戶動作。CodeCommit 也會加密傳輸中的儲存庫資料。您可以搭配 CodeCommit 儲存庫使用 HTTPS 通訊協定、SSH 通訊協定或兩者。如需詳細資訊，請參閱[設定 AWS CodeCommit](setting-up.md)。您也可以設定 CodeCommit 儲存庫的[跨帳戶存取權](cross-account.md)。

**Topics**
+ [AWS Key Management Service 和 AWS CodeCommit 儲存庫的加密](encryption.md)
+ [使用輪換憑證連線至 AWS CodeCommit 儲存庫](temporary-access.md)

# AWS Key Management Service 和 AWS CodeCommit 儲存庫的加密
<a name="encryption"></a>

CodeCommit 儲存庫中的資料會在傳輸中和靜態時加密。當資料推送到 CodeCommit 儲存庫時 （例如，透過呼叫 **git push**)，CodeCommit 會在接收到的資料存放在儲存庫時加密。從 CodeCommit 儲存庫提取資料時 （例如，透過呼叫 **git pull**)，CodeCommit 會解密資料，然後將資料傳送給發起人。這會假設與推送或提取請求相關聯的 IAM 使用者已通過身分驗證 AWS。傳送或接收的資料是利用 HTTPS 或 SSH 加密網路通訊協定來傳輸。

您可以使用 AWS 受管金鑰 或客戶受管金鑰來加密和解密儲存庫中的資料。如需客戶受管金鑰和 之間差異的詳細資訊 AWS 受管金鑰，請參閱[客戶受管金鑰和 AWS 受管金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)。如果您未指定客戶受管金鑰，CodeCommit 將使用 AWS 受管金鑰 來加密和解密儲存庫中的資料。這是自動為您在 中 AWS 受管金鑰 建立的 AWS 帳戶。第一次在 Amazon Web Services 帳戶中的新 AWS 區域 中建立 CodeCommit 儲存庫時，如果您未指定客戶受管金鑰，CodeCommit 會在相同的 AWS 區域 in AWS 受管金鑰 () 中建立 AWS Key Management Service (`aws/codecommit`金鑰）AWS KMS。此`aws/codecommit`金鑰僅供 CodeCommit 使用。它存放在您的 Amazon Web Services 帳戶中。根據您指定的內容，CodeCommit 會使用客戶受管金鑰或 AWS 受管金鑰 來加密和解密儲存庫中的資料。

**重要**  
 CodeCommit 會對用於加密和解密儲存庫中資料的 AWS KMS 金鑰執行下列 AWS KMS 動作。如果您使用的是 AWS 受管金鑰，則使用者不需要這些動作的明確許可，但使用者不得有任何連接政策拒絕`aws/codecommit`金鑰的這些動作。如果您使用的是 AWS 帳戶 ID 設定為該金鑰政策主體的客戶受管金鑰，這些許可必須明確設定為 `allow`。具體而言，當您建立第一個儲存庫時，如果您更新儲存庫的金鑰，`deny`如果您使用 ，則不得將下列任何許可設定為 AWS 受管金鑰，`allow`如果您使用具有政策主體的客戶受管金鑰，則必須將 設定為 ：  
`"kms:Encrypt"`
`"kms:Decrypt"`
`"kms:ReEncrypt"` （視內容而定，這可能需要 `kms:ReEncryptFrom`、  
`kms:ReEncryptTo`，或未`kms:ReEncrypt*`設定為拒絕）
`"kms:GenerateDataKey"`
`"kms:GenerateDataKeyWithoutPlaintext"`
`"kms:DescribeKey"`

如果您想要使用自己的客戶受管金鑰，金鑰必須在儲存 AWS 區域 庫所在的 中可用。CodeCommit 支援使用單一和多區域客戶受管金鑰。雖然支援所有金鑰材料來源類型，但建議使用預設 **KMS** 選項。使用**外部金鑰存放**區選項的客戶可能會遇到來自其存放區提供者的延遲。此外。CodeCommit 對客戶受管金鑰有下列需求：
+ CodeCommit 僅支援使用對稱金鑰。
+ 金鑰用量類型必須設定為**加密和解密**。

如需建立客戶受管金鑰的詳細資訊，請參閱[概念](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#key-mgmt)和[建立金鑰](https://docs.aws.amazon.com/kms/latest/developerguide/create-keys.html)。

若要查看 CodeCommit AWS 受管金鑰 產生之 的相關資訊，請執行下列動作：

1. 登入 AWS 管理主控台 並開啟位於 https：//[https://console.aws.amazon.com/kms](https://console.aws.amazon.com/kms) 的 AWS Key Management Service (AWS KMS) 主控台。

1. 若要變更 AWS 區域，請使用頁面右上角的區域選擇器。

1. 在服務導覽窗格中，選擇 **AWS 受管金鑰**。請確定您已登入要檢閱金鑰 AWS 區域 的 。

1. 在加密金鑰清單中，選擇 AWS 受管金鑰 具有別名 **aws/codecommit** 的 。 AWS 擁有的金鑰 隨即顯示 的基本資訊。

您無法變更或刪除此項目 AWS 受管金鑰。

## 如何使用加密演算法來加密儲存庫資料
<a name="encryption-algorithms"></a>

CodeCommit 使用兩種不同的方法來加密資料。小於 6 MB 的個別 Git 物件是使用 AES-GCM-256 進行加密，此方法會提供資料完整性驗證。介於 6 MB 和單一 Blob 最大 2 GB 之間的物件會使用 AES-CBC-256 加密。CodeCommit 一律驗證加密內容。

## 加密內容
<a name="encryption-context"></a>

與 整合的每個服務都會 AWS KMS 指定加密和解密操作的加密內容。加密環境是 AWS KMS 用來檢查資料完整性的額外驗證資訊。如果為加密操作指定，則在解密操作中也必須指定。否則，解密會失敗。CodeCommit 會將 CodeCommit 儲存庫 ID 用於加密內容。您可以使用 **get-repository**命令或 CodeCommit 主控台來尋找儲存庫 ID。在 AWS CloudTrail 日誌中搜尋 CodeCommit 儲存庫 ID，以了解在 CodeCommit 儲存庫中 AWS KMS 要加密或解密資料的 金鑰所採取的加密操作。

如需 的詳細資訊 AWS KMS，請參閱 [AWS Key Management Service 開發人員指南](https://docs.aws.amazon.com/kms/latest/developerguide/)。

# 使用輪換憑證連線至 AWS CodeCommit 儲存庫
<a name="temporary-access"></a>

您可以讓使用者存取您的 AWS CodeCommit 儲存庫，而無需為其設定 IAM 使用者或使用存取金鑰和私密金鑰。若要將許可指派給聯合身分，您可以建立角色並定義角色的許可。當聯合身分進行身分驗證時，該身分會與角色建立關聯，並獲授予由角色定義的許可。如需有關聯合角色的相關資訊，請參閱《*IAM 使用者指南*》中的[為第三方身分提供者 (聯合) 建立角色](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_create_for-idp.html)。如果您使用 IAM Identity Center，則需要設定許可集。為控制身分驗證後可以存取的內容，IAM Identity Center 將許可集與 IAM 中的角色相關聯。如需有關許可集的資訊，請參閱《*AWS IAM Identity Center 使用者指南*》中的[許可集](https://docs.aws.amazon.com/singlesignon/latest/userguide/permissionsetsconcept.html)。您也可以為 IAM 使用者設定角色型存取，以存取個別 Amazon Web Services 帳戶中的 CodeCommit 儲存庫 （稱為*跨帳戶存取*的技術）。如需設定儲存庫跨帳戶存取的逐步解說，請參閱 [使用 角色設定 AWS CodeCommit 儲存庫的跨帳戶存取權](cross-account.md)。

您可以為想要或必須透過下列方法來驗證身分的使用者設定存取：
+ 安全性聲明標記語言 (SAML)
+ 多重要素驗證 (MFA)
+ 聯合
+ 登入 Amazon
+ Amazon Cognito
+ Facebook
+ Google
+ OpenID Connect (OIDC) 相容的身分提供者

**注意**  
下列資訊僅適用於使用 **git-remote-codecommit**或 AWS CLI 登入資料協助程式連線到 CodeCommit 儲存庫。由於建議的 CodeCommit 暫時或聯合存取方法是設定 **git-remote-codecommit**，因此本主題提供使用該公用程式的範例。如需詳細資訊，請參閱[AWS CodeCommit 使用 git-remote-codecommit 對 HTTPS 連線的設定步驟](setting-up-git-remote-codecommit.md)。  
您無法使用 SSH 或 Git 登入資料和 HTTPS，透過輪換或暫時存取登入資料來連線至 CodeCommit 儲存庫。

如果符合下列所有要求，您不需要完成這些步驟：
+ 您已登入 Amazon EC2 執行個體。
+ 您使用 Git 和 HTTPS 搭配 AWS CLI 登入資料協助程式，從 Amazon EC2 執行個體連線至 CodeCommit 儲存庫。
+ Amazon EC2 執行個體具有連接的 IAM 執行個體描述檔，其中包含 [對於 Linux、macOS 或 Unix 上使用 AWS CLI 登入資料協助程式的 HTTPS 連線](setting-up-https-unixes.md)或 中所述的存取許可[對於 Windows 上使用 AWS CLI 登入資料協助程式的 HTTPS 連線](setting-up-https-windows.md)。
+ 您已在 Amazon EC2 執行個體上安裝並設定 Git 登入資料協助程式，如 [對於 Linux、macOS 或 Unix 上使用 AWS CLI 登入資料協助程式的 HTTPS 連線](setting-up-https-unixes.md)或 中所述[對於 Windows 上使用 AWS CLI 登入資料協助程式的 HTTPS 連線](setting-up-https-windows.md)。

符合上述要求的 Amazon EC2 執行個體已設定為代表您將臨時存取憑證傳達給 CodeCommit。

**注意**  
您可以在 Amazon EC2 執行個體**git-remote-codecommit**上設定和使用 。

若要讓使用者暫時存取 CodeCommit 儲存庫，請完成下列步驟。



## 步驟 1：完成先決條件
<a name="temporary-access-prerequisites"></a>

完成設定步驟，以提供使用者使用輪換憑證存取 CodeCommit 儲存庫：
+ 如需跨帳戶存取權，請參閱[演練：使用 IAM 角色委派跨 Amazon Web Services 帳戶的存取權](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-walkthrough-crossacct.html)和 [使用 角色設定 AWS CodeCommit 儲存庫的跨帳戶存取權](cross-account.md)。
+ 對於 SAML 和聯合身分，請參閱[使用組織的身分驗證系統授予對 AWS 資源的存取權](https://docs.aws.amazon.com/STS/latest/UsingSTS/STSUseCases.html#IdentityBrokerApplication)和[關於以 AWS STS SAML 2.0 為基礎的聯合身分](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSAML.html)。
+ 對於 MFA，請參閱[搭配 Multi-Factor Authentication (MFA) 裝置 AWS](https://docs.aws.amazon.com/IAM/latest/UserGuide/Using_ManagingMFA.html)和[建立暫時安全登入資料，以啟用 IAM 使用者的存取](https://docs.aws.amazon.com/STS/latest/UsingSTS/CreatingSessionTokens.html)。
+ 對於 Login with Amazon、Amazon Cognito、Facebook、Google 或任何 OIDC 相容身分提供者，請參閱[關於 AWS STS Web Identity Federation](https://docs.aws.amazon.com/STS/latest/UsingSTS/web-identity-federation.html)。

使用 中的資訊[的身分驗證和存取控制 AWS CodeCommit](auth-and-access-control.md)來指定您要授予使用者的 CodeCommit 許可。

## 步驟 2：取得角色名稱或存取登入資料
<a name="temporary-access-get-credentials"></a>

如果您要讓使用者擔任角色以存取儲存庫，請提供使用者該角色的 Amazon Resource Name (ARN)。否則，根據您設定存取的方式而定，使用者可以透過下列其中一種方法取得輪換登入資料：
+ 如需跨帳戶存取，請呼叫 the AWS CLI [assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html) 命令或呼叫 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) API。
+ 對於 SAML，請呼叫 the AWS CLI [assume-role-with-saml](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role-with-saml.html) 命令或 AWS STS [AssumeRoleWithSAML](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithSAML.html) API。
+ 對於聯合，請呼叫 the AWS CLI [assume-role](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role.html) 或 [get-federation-token](https://docs.aws.amazon.com/cli/latest/reference/sts/get-federation-token.html) 命令或 AWS STS [AssumeRole](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRole.html) 或 [GetFederationToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetFederationToken.html) APIs。
+ 對於 MFA，請呼叫 AWS CLI [get-session-token](https://docs.aws.amazon.com/cli/latest/reference/sts/get-session-token.html) 命令或 AWS STS [GetSessionToken](https://docs.aws.amazon.com/STS/latest/APIReference/API_GetSessionToken.html) API。
+ 對於 Login with Amazon、Amazon Cognito、Facebook、Google 或任何 OIDC 相容身分提供者，請呼叫 AWS CLI [assume-role-with-web-identity](https://docs.aws.amazon.com/cli/latest/reference/sts/assume-role-with-web-identity.html) 命令或 AWS STS [AssumeRoleWithWebIdentity](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html) API。



## 步驟 3：安裝 git-remote-codecommit 並設定 AWS CLI
<a name="temporary-access-configure-credentials"></a>

您必須在 中安裝[https://pypi.org/project/git-remote-codecommit/](https://pypi.org/project/git-remote-codecommit/)和設定設定檔，將本機電腦設定為使用存取憑證 AWS CLI。

1. 遵循[設定 ](setting-up.md)中的指示來設定 AWS CLI。使用 **aws configure** 命令設定一或多個描述檔。當您使用輪換憑證連線至 CodeCommit 儲存庫時，請考慮建立要使用的具名設定檔。

1. 您可以透過下列其中一種方式，將登入資料與使用者的 AWS CLI 具名設定檔建立關聯。
   + 如果您擔任角色來存取 CodeCommit，請使用擔任該角色所需的資訊來設定具名設定檔。例如，如果您想要在 Amazon Web Services 帳戶 111111111111 中擔任名為 *CodeCommitAccess* 的角色，您可以設定預設描述檔，以便在使用其他 AWS 資源時使用 ，以及在擔任該角色時使用的具名描述檔。下列命令會建立名為 *CodeAccess* 的具名設定檔，擔任名為 *CodeCommitAccess* 的角色。Maria*\$1Garcia* 使用者名稱與工作階段相關聯，且預設設定檔設定為其 AWS 登入資料的來源：

     ```
     aws configure set role_arn arn:aws:iam::111111111111:role/CodeCommitAccess --profile CodeAccess
     aws configure set source_profile default --profile CodeAccess
     aws configure set role_session_name "Maria_Garcia" --profile CodeAccess
     ```

     若要驗證變更，請手動檢視或編輯 `~/.aws/config` 檔案 (若為 Linux) 或 `%UserProfile%.aws\config` 檔案 (若為 Windows)，並檢閱具名描述檔下的資訊。例如，您的檔案看起來可能會類似以下內容：

     ```
     [default]
     region = us-east-1
     output = json
     
     [profile CodeAccess]
     source_profile = default
     role_session_name = Maria_Garcia
     role_arn = arn:aws:iam::111111111111:role/CodeCommitAccess
     ```

      設定具名設定檔之後，您可以使用具名設定檔，透過 **git-remote-codecommit**公用程式複製 CodeCommit 儲存庫。例如，若要複製名為 *MyDemoRepo* 的儲存庫：

     ```
     git clone codecommit://CodeAccess@MyDemoRepo
     ```
   + 如果您使用的是 Web 聯合身分和 OpenID Connect (OIDC)，請設定具名設定檔，以代表您進行 AWS Security Token Service (AWS STS) `AssumeRoleWithWebIdentity` API 呼叫來重新整理臨時憑證。使用 **aws configure set**命令或手動編輯 `~/.aws/credentials` 檔案 （適用於 Linux) 或 `%UserProfile%.aws\credentials` 檔案 （適用於 Windows)，以新增具有所需設定值的 AWS CLI 具名設定檔。例如，若要建立擔任 *CodeCommitAccess* 角色並使用 Web 身分字符檔案 \$1/*my-credentials**/my-token-file* 的設定檔：

     ```
     [CodeCommitWebIdentity]
     role_arn = arn:aws:iam::111111111111:role/CodeCommitAccess
     web_identity_token_file=~/my-credentials/my-token-file
     role_session_name = Maria_Garcia
     ```

   如需詳細資訊，請參閱*AWS Command Line Interface 《 使用者指南*》中的[設定 AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-getting-started.html) 和[使用 IAM 角色 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html)。

## 步驟 4：存取 CodeCommit 儲存庫
<a name="temporary-access-use-credentials"></a>

假設您的使用者已遵循 中的指示[連接到儲存庫](how-to-connect.md)連線至 CodeCommit 儲存庫，則使用者接著會使用 **git-remote-codecommit**和 Git 提供的擴充功能來呼叫 **git clone**、 **git push**和 ，**git pull**以複製、推送和提取其可存取的 CodeCommit 儲存庫。例如，若要複製儲存庫：

```
git clone codecommit://CodeAccess@MyDemoRepo
```

Git 遞交、推送和提取命令會使用常規 Git 語法。

當使用者使用 AWS CLI 並指定與輪換存取憑證相關聯的 AWS CLI 具名設定檔時，會傳回範圍限定於該設定檔的結果。

