> ## Documentation Index
> Fetch the complete documentation index at: https://docs.cloudthinker.io/llms.txt
> Use this file to discover all available pages before exploring further.

# AWS CodeCommit

> Kết nối AWS CodeCommit để agent đọc repository và pull request, và để Review bình luận trên pull request của bạn

Kết nối AWS CodeCommit để agent CloudThinker liệt kê và đọc repository của bạn, đồng thời chạy [Review](https://docs.cloudthinker.io/vi/guide/code-review/setup.md) (review code tự động bằng AI) trên pull request của chúng. Kết nối đăng nhập bằng **IAM role** (khuyến nghị) hoặc **access key của IAM user**, và áp dụng cho một AWS Region.

## Điều kiện tiên quyết

* Tài khoản AWS chứa các repository CodeCommit bạn muốn kết nối.
* Quyền tạo IAM role hoặc IAM user trong tài khoản đó, và mở [AWS CloudShell](https://docs.aws.amazon.com/cloudshell/latest/userguide/getting-started.html). Managed policy `AWSCloudShellFullAccess` cấp quyền truy cập CloudShell.
* AWS Region chứa các repository, ví dụ `us-east-1`.

> [!NOTE]
>
> Mỗi workspace có một kết nối AWS CodeCommit, và kết nối đó áp dụng cho một Region. Để truy cập repository ở Region thứ hai, hãy kết nối Region đó từ một workspace khác.

## Thiết lập

Trong thanh bên, nhấn **More → Workspace settings → Connections**, giữ nguyên tab **Builtin Connections** và chọn **AWS CodeCommit**. Chọn **AWS Region**, rồi chọn một tab.

**IAM role (khuyến nghị)**

**1. Mở AWS CloudShell**

Trên tab **IAM Role**, mở AWS CloudShell từ bước **Open AWS CloudShell**. CloudShell chạy trong trình duyệt nên bạn không cần cài đặt gì.

**2. Chạy script thiết lập**

Trong **Run Setup Script**, sao chép script, dán vào CloudShell và chạy. Script tạo role `CloudThinkerCodeCommitAccessRole` với trust policy chứa External ID của workspace, rồi in ra role ARN. [Quyền yêu cầu](#quyền-yêu-cầu) hiển thị cả hai policy.

Nếu đã có role cùng tên, script giữ nguyên role đó, làm mới trust policy với External ID của bạn và in ra ARN. Script không thay đổi quyền của role đó, nên hãy đối chiếu các quyền đó với policy bên dưới. Trình hướng dẫn cũng liệt kê các bước tương tự dưới dạng lệnh thủ công.

**3. Dán Role ARN**

Dán ARN vào **Role ARN** và nhấn **Connect**.

**Trạng thái thành công:** hộp thoại hiển thị **Connected** cùng số repository mà CloudThinker truy cập được.

**Access key**

**1. Chạy script thiết lập**

Trên tab **Access Keys**, mở AWS CloudShell, sao chép script từ **Run Setup Script** và chạy. Script tạo IAM user `CloudThinkerCodeCommitUser`, gắn quyền CodeCommit và in ra một cặp access key.

AWS chỉ hiển thị secret access key một lần. Sao chép secret access key từ output của script trước khi đóng CloudShell.

**2. Dán key**

Dán các giá trị vào **Access Key ID** và **Secret Access Key**, rồi nhấn **Connect**.

**Trạng thái thành công:** hộp thoại hiển thị **Connected** cùng số repository mà CloudThinker truy cập được.

Để xoay vòng key, tạo access key mới cho `CloudThinkerCodeCommitUser` trong IAM, nhập cặp key mới vào **Review → Settings → Connection actions → Update token** (hoặc, trước khi thiết lập Review, ngắt kết nối rồi kết nối lại), sau đó xóa key cũ. IAM cho phép hai key mỗi user.

### Gửi sự kiện pull request đến Review

Review không bắt đầu trên pull request mới cho đến khi AWS gửi sự kiện đến Review.

**1. Chạy script webhook**

Trong trình hướng dẫn thiết lập Review, sao chép script từ bước **Events**. Script đã chứa sẵn webhook URL và secret của bạn. Chạy script trong AWS CloudShell của tài khoản sở hữu các repository.

Với mỗi repository trong Region, script tạo các rule Amazon EventBridge tên `CloudThinker-CodeCommit-*` cho sự kiện pull request, comment và push. Script cũng tạo một EventBridge connection, một API destination và IAM role `CloudThinker-CodeCommit-EventBridgeInvokeRole` để gửi sự kiện đến CloudThinker.

**2. Đánh dấu đã cấu hình**

Khi script in ra "Webhook setup complete", nhấn **Mark as Configured** trong trình hướng dẫn.

**Trạng thái thành công:** pull request mới nhận được comment tiến độ của CloudThinker. Chạy lại script sau khi bạn thêm repository. Xem [xác thực nhà cung cấp](https://docs.cloudthinker.io/vi/guide/code-review/provider-auth.md#cấu-hình-webhook) để biết chi tiết.

## Chi tiết kết nối

| Trường | Mô tả | Ví dụ |
| - | - | - |
| **AWS Region** | Region chứa các repository của bạn | `us-east-1` |
| **Role ARN** | IAM role mà CloudThinker assume (phương thức IAM role) | `arn:aws:iam::<your-account-id>:role/CloudThinkerCodeCommitAccessRole` |
| **Access Key ID** | Access key của IAM user chuyên dụng (phương thức access key) | `<your-access-key-id>` |
| **Secret Access Key** | Secret của access key đó (phương thức access key) | `<your-secret-access-key>` |

## Quyền yêu cầu

Script thiết lập gắn một inline policy với các action sau:

| Mục đích | Action |
| - | - |
| Tìm repository | `ListRepositories`, `GetRepository` |
| Đọc pull request | `ListPullRequests`, `GetPullRequest`, `GetDifferences`, `GetCommentsForPullRequest`, `GetCommentReactions` |
| Đọc code | `GetBlob`, `GetFile`, `GetFolder`, `GitPull` |
| Viết comment review | `PostCommentForPullRequest`, `PostCommentReply`, `UpdateComment` |
| Quản lý rule EventBridge | `events:PutRule`, `events:PutTargets`, `events:DescribeRule`, `events:DeleteRule`, `events:RemoveTargets`, `events:ListTargetsByRule`, chỉ trên `arn:aws:events:*:*:rule/CloudThinker-CodeCommit-*` |

Các action CodeCommit áp dụng cho mọi repository (`Resource: "*"`). Policy không chứa `iam:PassRole`.

> **JSON của trust policy và inline policy**
>
> Trust policy của IAM role chỉ cho phép AWS principal của CloudThinker assume role, và chỉ khi có External ID của workspace. Trình hướng dẫn tự điền cả hai giá trị.
>
> ```json theme={null}
> {
>   "Version": "2012-10-17",
>   "Statement": [
>     {
>       "Effect": "Allow",
>       "Principal": { "AWS": "<cloudthinker-principal-arn>" },
>       "Action": "sts:AssumeRole",
>       "Condition": { "StringEquals": { "sts:ExternalId": "<your-external-id>" } }
>     }
>   ]
> }
> ```
>
> Inline policy, tên `CodeCommitReviewAccess` trên role và `CodeCommitReviewAccessKeyPolicy` trên user dùng access key:
>
> ```json theme={null}
> {
>   "Version": "2012-10-17",
>   "Statement": [
>     {
>       "Sid": "CodeCommitReviewActions",
>       "Effect": "Allow",
>       "Action": [
>         "codecommit:ListRepositories",
>         "codecommit:GetRepository",
>         "codecommit:ListPullRequests",
>         "codecommit:GetPullRequest",
>         "codecommit:GetDifferences",
>         "codecommit:GetCommentsForPullRequest",
>         "codecommit:GetCommentReactions",
>         "codecommit:PostCommentForPullRequest",
>         "codecommit:PostCommentReply",
>         "codecommit:UpdateComment",
>         "codecommit:GetBlob",
>         "codecommit:GetFile",
>         "codecommit:GetFolder",
>         "codecommit:GitPull"
>       ],
>       "Resource": "*"
>     },
>     {
>       "Sid": "EventBridgeRulesForCloudThinker",
>       "Effect": "Allow",
>       "Action": [
>         "events:PutRule",
>         "events:PutTargets",
>         "events:DescribeRule",
>         "events:DeleteRule",
>         "events:RemoveTargets",
>         "events:ListTargetsByRule"
>       ],
>       "Resource": "arn:aws:events:*:*:rule/CloudThinker-CodeCommit-*"
>     }
>   ]
> }
> ```

> [!TIP]
>
> Giữ policy đúng như script đã gắn và không thêm quyền rộng hơn. Phương thức IAM role không lưu key dài hạn nào, nên hãy ưu tiên phương thức này.

## Khả năng của agent

Thao tác đọc chạy mà không cần hỏi. Đăng comment lên pull request là thao tác ghi, nên cần bật **Allow writes** (mặc định bật) và đi qua Rules và Approval mode của bạn trước. Để chặn hoàn toàn thao tác ghi CodeCommit, mở **AWS CodeCommit** trong **More → Workspace settings → Connections** và tắt công tắc **Allow writes** trên bảng chi tiết.

| Khả năng | Agent có thể làm gì |
| - | - |
| **Repositories** | Liệt kê repository trong Region của kết nối và clone một repository để đọc code |
| **Pull requests** | Đọc thay đổi và comment của pull request trong quá trình review |
| **Review comments** | Đăng tóm tắt review, phát hiện và trả lời dưới dạng comment trên pull request |

Trên CodeCommit, bạn có thể mention `@cloudthinker-ai` kèm câu hỏi hoặc `help` trong comment cấp cao nhất của pull request. Không hỗ trợ trả lời trong thread, `review` và `autofix`. Xem [lệnh mention](https://docs.cloudthinker.io/vi/guide/code-review/mention-commands.md).

### Xác minh kết nối

```text theme={null}
List the AWS CodeCommit repositories CloudThinker can reach
```

Kết quả mong đợi là tên các repository trong Region của kết nối. Số lượng phải khớp với con số hộp thoại đã hiển thị khi bạn kết nối.

### Ví dụ prompt

```text theme={null}
Clone the payments repository from AWS CodeCommit and summarize how it's structured
Which AWS CodeCommit pull requests did Review flag with high-severity findings this week?
```

## Khắc phục sự cố

> **Failed to connect to AWS CodeCommit. Please verify your credentials.**
>
> CloudThinker không thể dùng thông tin xác thực. Lần lượt kiểm tra:
>
> | Kiểm tra | Cách khắc phục |
> | - | - |
> | IAM role: trust policy chứa External ID khác | Chạy lại script thiết lập. Script làm mới trust policy. |
> | Access key: cặp key sai hoặc user không thể liệt kê repository | Dán lại cặp key, hoặc chạy lại script để gắn policy |
> | **AWS Region** không hợp lệ | Chọn Region chứa các repository của bạn |
> | Workspace đã có một kết nối AWS CodeCommit | Dùng kết nối hiện có, hoặc xóa kết nối đó trước |

> **Failed to connect to AWS CodeCommit. Please try again.**
>
> Lỗi không mong đợi đã dừng quá trình kiểm tra. Hãy thử lại. Nếu lỗi lặp lại, liên hệ bộ phận hỗ trợ.

> **Đã kết nối nhưng chưa tìm thấy repository nào**
>
> Thông tin xác thực hoạt động, nhưng Region đã chọn không có repository nào mà role hoặc user có thể liệt kê. Xác nhận **AWS Region** và các quyền ở trên đã được gắn.

> **Thiếu một repository mong đợi**
>
> Repository đó nằm ở Region khác. Mỗi kết nối chỉ thấy Region được thiết lập cho kết nối đó.

> **Review không bắt đầu trên pull request mới**
>
> AWS không gửi sự kiện pull request cho đến khi hoàn tất bước webhook. Chạy script webhook từ trình hướng dẫn, rồi nhấn **Mark as Configured**. Xem [xác thực nhà cung cấp](https://docs.cloudthinker.io/vi/guide/code-review/provider-auth.md#cấu-hình-webhook).

## Bảo mật

* **Quyền tối thiểu** — chỉ cấp các quyền mà agent cần cho trường hợp sử dụng của bạn; bắt đầu với quyền chỉ đọc và mở rộng sau.
* **Chỉ đọc theo mặc định** — sử dụng thông tin xác thực chỉ đọc trừ khi bạn muốn agent thực hiện thay đổi qua kết nối này.
* **Xoay vòng thông tin xác thực** — xoay vòng khóa và token theo lịch trình thông thường của bạn; CloudThinker sẽ lấy giá trị mới khi bạn cập nhật kết nối.
* **Thu hồi khi bàn giao** — xóa thông tin xác thực tại nhà cung cấp khi bạn xóa một kết nối hoặc khi đồng nghiệp rời nhóm.

- **External ID**: trust policy của role yêu cầu External ID, giúp ngăn tài khoản AWS khác lừa CloudThinker dùng role của bạn (vấn đề confused deputy). AWS không coi External ID là secret.
- **Danh tính chuyên dụng**: chỉ dùng role hoặc user do script tạo cho CloudThinker, để bạn có thể thu hồi mà không ảnh hưởng đến mọi thứ khác.

## Liên quan

> **[Thiết lập Review](https://docs.cloudthinker.io/vi/guide/code-review/setup.md)**
>
> Bật review code tự động cho các repository CodeCommit của bạn.

> **[Xác thực nhà cung cấp](https://docs.cloudthinker.io/vi/guide/code-review/provider-auth.md)**
>
> Phương thức xác thực và các bước webhook cho mọi nhà cung cấp Review.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.