

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用记录 CodeArtifact API 调用 AWS CloudTrail
<a name="codeartifact-information-in-cloudtrail"></a>

CodeArtifact 与[AWS CloudTrail](https://aws.amazon.com/cloudtrail)一项服务集成，该服务提供用户、角色或 AWS 服务在中执行的操作的记录 CodeArtifact。 CloudTrail 将所有 API 调用捕获 CodeArtifact 为事件，包括来自包管理器客户端的调用。

如果您创建跟踪，则可以允许持续向亚马逊简单存储服务 (Amazon S3) Storage Service 存储桶传送 CloudTrail 事件，包括的事件。 CodeArtifact如果您未配置跟踪，您仍然可以在 CloudTrail 控制台的 “事件**历史记录” 中查看最新的事件**。使用收集的信息 CloudTrail，您可以确定向哪个请求发出 CodeArtifact、发出请求的 IP 地址、谁发出了请求、何时发出请求以及其他详细信息。

要了解更多信息 CloudTrail，请参阅[AWS CloudTrail 用户指南](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html)。

## CodeArtifact 信息在 CloudTrail
<a name="codeartifact-information-in-cloudtrail"></a>

CloudTrail 在您创建 AWS 账户时已在您的账户上启用。当活动发生在中时 CodeArtifact，该活动会与其他 AWS 服务 CloudTrail 事件一起记录在**事件历史**记录中。您可以在自己的 AWS 账户中查看、搜索和下载最近发生的事件。有关更多信息，请参阅[使用事件历史记录查看 CloudTrail 事件](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) 
+  [配置 Amazon SNS 通知 CloudTrail](https://docs.aws.amazon.com/awscloudtrail/latest/userguide/configure-sns-notifications-for-cloudtrail.html) 

在您的 AWS 账户中启用 CloudTrail 日志记录后，对 CodeArtifact 操作的 API 调用将在 CloudTrail 日志文件中进行跟踪，这些调用与其他 AWS 服务记录一起写入日志文件。 CloudTrail 根据时间段和文件大小决定何时创建和写入新文件。

所有 CodeArtifact 操作都由记录 CloudTrail。例如，调用`ListRepositories`（在 AWS CLI、`aws codeartifact list-repositories`）、（）和 `CreateRepository``ListPackages`（`aws codeartifact create-repository``aws codeartifact list-packages`）操作中，除了软件包管理器客户端命令外，还会在 CloudTrail 日志文件中生成条目。程序包管理器客户端命令通常会向服务器发出多个 HTTP 请求。每个请求都会生成一个单独的 CloudTrail 日志事件。

### 跨账号传送日志 CloudTrail
<a name="codeartifact-cloudtrail-event-delivery"></a>

最多三个不同的账户会收到单个 API 调用的 CloudTrail 日志：
+ 发出请求的账户，例如调用 `GetAuthorizationToken` 的账户。
+ 存储库管理员账户，例如调用 `ListPackages` 的存储库的管理员账户。
+ 域所有者的账户，例如拥有域（包含调用 API 的存储库）的账户。

因为 APIs 类似`ListRepositoriesInDomain`的是针对域而不是特定存储库的操作，只有调用账户和域所有者的账户才会收到日 CloudTrail 志。因为 APIs 没有`ListRepositories`针对任何资源的授权，只有调用者的帐户才能收到日 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>

 由 `[GetAuthorizationToken](https://docs.aws.amazon.com/codeartifact/latest/APIReference/API_GetAuthorizationToken.html)` 创建的日志条目包括 `requestParameters` 字段中的域名。

```
{
  "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"
}
```