

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

# 使用 記錄 CodeArtifact API 呼叫 AWS CloudTrail
<a name="codeartifact-information-in-cloudtrail"></a>

CodeArtifact 已與 整合[AWS CloudTrail](https://aws.amazon.com/cloudtrail)，此服務提供由使用者、角色或 CodeArtifact 中的 AWS 服務所採取之動作的記錄。CloudTrail 會將 CodeArtifact 的所有 API 呼叫擷取為事件，包括套件管理員用戶端的呼叫。

如果您建立線索，您可以將 CloudTrail 事件持續交付至 Amazon Simple Storage Service (Amazon S3) 儲存貯體，包括 CodeArtifact 的事件。即使您未設定追蹤，依然可以透過 CloudTrail 主控台中的**事件歷史記錄**檢視最新事件。使用 CloudTrail 收集的資訊，您可以判斷對 CodeArtifact 提出的請求、提出請求的 IP 地址、提出請求的人員、提出請求的時間，以及其他詳細資訊。

若要進一步了解 CloudTrail，請參閱[「AWS CloudTrail 使用者指南」](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)。

## CloudTrail 中的 CodeArtifact 資訊
<a name="codeartifact-information-in-cloudtrail"></a>

當您建立 AWS 帳戶時，會在您的帳戶上啟用 CloudTrail。當活動在 CodeArtifact 中發生時，該活動會與**事件歷史記錄**中的其他 AWS 服務事件一起記錄在 CloudTrail 事件中。您可以在 AWS 帳戶中檢視、搜尋和下載最近的事件。如需詳細資訊，請參閱《使用 CloudTrail 事件歷史記錄檢視事件》[https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/view-cloudtrail-events.html)。

若要持續記錄您 AWS 帳戶中的事件，包括 CodeArtifact 的事件，請建立*線索*。線索能讓 CloudTrail 將日誌檔案交付至 Amazon S3 儲存貯體。根據預設，當您在主控台建立追蹤記錄時，追蹤記錄會套用到所有 AWS 區域。線索會記錄 AWS 分割區中所有區域的事件，並將日誌檔案交付至您指定的 Amazon S3 儲存貯體。您也可以設定其他 AWS 服務，以進一步分析和處理 CloudTrail 日誌中所收集的事件資料。如需詳細資訊，請參閱下列主題：
+  [為您的 AWS 帳戶建立線索](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-create-and-update-a-trail.html) 
+  [CloudTrail 支援的服務和整合](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-aws-service-specific-topics.html) 
+  [設定 CloudTrail 的 Amazon SNS 通知](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/configure-sns-notifications-for-cloudtrail.html) 

當 AWS 您的帳戶中啟用 CloudTrail 記錄時，對 CodeArtifact 動作發出的 API 呼叫會在 CloudTrail 日誌檔案中追蹤，並在其中與其他 AWS 服務記錄一起寫入。CloudTrail 會根據期間與檔案大小，決定何時建立與寫入新檔案。

CloudTrail 會記錄所有 CodeArtifact 動作。例如，呼叫 `ListRepositories`（在 、 `aws codeartifact list-repositories`) AWS CLI、 `CreateRepository` (`aws codeartifact create-repository`) 和 `ListPackages`(`aws codeartifact list-packages`) 動作除了套件管理員用戶端命令之外，還會在 CloudTrail 日誌檔案中產生項目。套件管理員用戶端命令通常會對伺服器提出多個 HTTP 請求。每個請求都會產生單獨的 CloudTrail 日誌事件。

### CloudTrail 日誌的跨帳戶交付
<a name="codeartifact-cloudtrail-event-delivery"></a>

最多三個不同的帳戶會接收單一 API 呼叫的 CloudTrail 日誌：
+ 提出請求的帳戶 - 例如，呼叫 的帳戶`GetAuthorizationToken`。
+ 儲存庫管理員帳戶 - 例如，管理`ListPackages`呼叫之儲存庫的帳戶。
+ 網域擁有者的帳戶 - 例如，擁有網域的帳戶，其中包含呼叫 API 的儲存庫。

對於對網域而非特定儲存庫採取動作`ListRepositoriesInDomain`的 APIs，只有呼叫帳戶和網域擁有者的帳戶會收到 CloudTrail 日誌。對於未針對任何資源授權`ListRepositories`的 APIs，只有發起人的帳戶會收到 CloudTrail 日誌。

## 了解 CodeArtifact 日誌檔案項目
<a name="understanding-codeartifact-log-file-entries"></a>

CloudTrail 日誌檔案可以包含一或多個日誌項目。每一項目均列出多個 JSON 格式的事件。一個日誌事件為任何來源提出的單一請求，並包含請求動作、動作的日期和時間、請求參數等資訊。日誌項目並非公有 API 呼叫的有序堆疊追蹤，因此不會以任何特定順序顯示。

**Topics**
+ [範例：呼叫 GetAuthorizationToken API 的日誌項目](#example-a-log-entry-for-calling-the-getauthorizationtoken-api)
+ [範例：用於擷取 npm 套件版本的日誌項目](#example-a-log-entry-for-fetching-an-npm-package-version)

### 範例：呼叫 GetAuthorizationToken API 的日誌項目
<a name="example-a-log-entry-for-calling-the-getauthorizationtoken-api"></a>

 建立的日誌項目會在 `requestParameters` 欄位中`[GetAuthorizationToken](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_GetAuthorizationToken.html)`包含網域名稱。

```
{
  "eventVersion": "1.05",
  "userIdentity": {
      "type": "AssumedRole",
      "principalId": "AIDACKCEVSQ6C2EXAMPLE",
      "arn": "arn:aws:sts::123456789012:assumed-role/Console/example",
      "accountId": "123456789012",
      "accessKeyId": "AKIAIOSFODNN7EXAMPLE",
      "sessionContext": {
          "attributes": {
              "mfaAuthenticated": "false",
              "creationDate": "2018-12-11T13:31:37Z"
          },
          "sessionIssuer": {
              "type": "Role",
              "principalId": "AIDACKCEVSQ6C2EXAMPLE",
              "arn": "arn:aws:iam::123456789012:role/Console",
              "accountId": "123456789012",
              "userName": "Console"
          }
      }
  },
  "eventTime": "2018-12-11T13:31:37Z",
  "eventSource": "codeartifact.amazonaws.com",
  "eventName": "GetAuthorizationToken",
  "awsRegion": "us-west-2",
  "sourceIPAddress": "205.251.233.50",
  "userAgent": "aws-cli/1.16.37 Python/2.7.10 Darwin/16.7.0 botocore/1.12.27",
  "requestParameters": {
      "domainName": "example-domain"
      "domainOwner": "123456789012"
  },
  "responseElements": {
      "sessionToken": "HIDDEN_DUE_TO_SECURITY_REASONS"
  },
  "requestID": "6b342fc0-5bc8-402b-a7f1-ffffffffffff",
  "eventID": "100fde01-32b8-4c2b-8379-ffffffffffff",
  "readOnly": false,
  "eventType": "AwsApiCall",
  "recipientAccountId": "123456789012"
}
```

### 範例：用於擷取 npm 套件版本的日誌項目
<a name="example-a-log-entry-for-fetching-an-npm-package-version"></a>

所有套件管理員用戶端提出的請求，包括**`npm`**用戶端，都會在 `requestParameters` 欄位中記錄其他資料，包括網域名稱、儲存庫名稱和套件名稱。URL 路徑和 HTTP 方法會記錄在 `additionalEventData` 欄位中。

```
{
   "eventVersion": "1.05",
   "userIdentity": {
       "type": "AssumedRole",
       "principalId": "AIDACKCEVSQ6C2EXAMPLE",
       "arn": "arn:aws:sts::123456789012:assumed-role/Console/example",
       "accountId": "123456789012",
       "accessKeyId": "ASIAIJIOBJIBSREXAMPLE",
       "sessionContext": {
           "attributes": {
               "mfaAuthenticated": "false",
               "creationDate": "2018-12-17T02:05:16Z"
           },
           "sessionIssuer": {
               "type": "Role",
               "principalId": "AIDACKCEVSQ6C2EXAMPLE",
               "arn": "arn:aws:iam::123456789012:role/Console",
               "accountId": "123456789012",
               "userName": "Console"
           }
       }
   },
   "eventTime": "2018-12-17T02:05:46Z",
   "eventSource": "codeartifact.amazonaws.com",
   "eventName": "ReadFromRepository",
   "awsRegion": "us-west-2",
   "sourceIPAddress": "205.251.233.50",
   "userAgent": "npm/6.14.15 node/v12.22.9 linux x64 ci/custom",
   "requestParameters": {
       "domainName": "example-domain",
       "domainOwner": "123456789012",
       "repositoryName": "example-repo",
       "packageName": "lodash",
       "packageFormat": "npm",
       "packageVersion": "4.17.20"
   },
   "responseElements": null,
   "additionalEventData": {
       "httpMethod": "GET",
       "requestUri": "/npm/lodash/-/lodash-4.17.20.tgz"
   },
   "requestID": "9f74b4f5-3607-4bb4-9229-ffffffffffff",
   "eventID": "c74e40dd-8847-4058-a14d-ffffffffffff",
   "readOnly": true,
   "eventType": "AwsApiCall",
   "recipientAccountId": "123456789012"
}
```