本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 AWS CloudTrail 记录 CodeArtifact API 调用
CodeArtifact 与 AWS CloudTrail
如果您创建跟踪记录,则可以使 CloudTrail 事件持续传送到 Amazon Simple Storage Service (Amazon S3) 存储桶(包括 CodeArtifact 事件)。如果您不配置跟踪,则仍可在 CloudTrail 控制台中的 Event history(事件历史记录) 中查看最新事件。使用 CloudTrail 收集的信息,您可以确定向 CodeArtifact 发出了什么请求、发出请求的 IP 地址、何人发出的请求、请求的发出时间以及其他详细信息。
要了解有关 CloudTrail 的更多信息,请参阅《AWS CloudTrail 用户指南》。
CloudTrail 中的 CodeArtifact 信息
在您创建 AWS 账户时,将在该账户上启用 CloudTrail。当 CodeArtifact 中发生活动时,该活动将记录在 CloudTrail 事件中,并与其他 AWS 服务事件一同保存在事件历史记录中。您可以在 AWS 账户中查看、搜索和下载最新事件。有关更多信息,请参阅使用 CloudTrail 事件历史记录查看事件。
要持续记录 AWS 账户中的事件(包括 CodeArtifact 的事件),请创建跟踪记录。通过跟踪,CloudTrail 可将日志文件传送至 Amazon S3 存储桶。默认情况下,在控制台中创建跟踪记录时,此跟踪记录应用于所有亚马逊云科技区域。此跟踪在 AWS 分区中记录所有区域中的事件,并将日志文件传送至您指定的 Amazon S3 存储桶。您还可以配置其他 AWS 服务,以便进一步分析在 CloudTrail 日志中收集的事件数据并采取措施。有关更多信息,请参阅以下主题:
在您的 AWS 账户中启用 CloudTrail 日志记录时,对 CodeArtifact 操作的 API 调用在 CloudTrail 日志文件中跟踪,它们随其他 AWS 服务记录一起写入到这些文件中。CloudTrail 基于时间段和文件大小来确定何时创建并写入新文件。
CloudTrail 会记录所有 CodeArtifact 操作。例如,除了程序包管理器客户端命令外,对 ListRepositories
(在 AWS CLI 中,输入 aws codeartifact
list-repositories
)、CreateRepository
(aws codeartifact
create-repository
) 和 ListPackages
(aws codeartifact
list-packages
) 操作的调用也会在 CloudTrail 日志文件中生成条目。程序包管理器客户端命令通常会向服务器发出多个 HTTP 请求。每个请求都会生成单独的 CloudTrail 日志事件。
跨账户传输 CloudTrail 日志
对于单个 API 调用,最多有三个不同的账户会接收 CloudTrail 日志:
-
发出请求的账户,例如调用
GetAuthorizationToken
的账户。 -
存储库管理员账户,例如调用
ListPackages
的存储库的管理员账户。 -
域所有者的账户,例如拥有域(包含调用 API 的存储库)的账户。
对于像 ListRepositoriesInDomain
这样针对域而不是针对特定存储库执行操作的 API,只有调用账户和域所有者的账户才会收到 CloudTrail 日志。对于像 ListRepositories
这样未获得任何资源授权的 API,只有调用方账户才会收到 CloudTrail 日志。
了解 CodeArtifact 日志文件条目
CloudTrail 日志文件可以包含一个或多个日志条目。每个条目列出了多个 JSON 格式的事件。一个日志事件表示来自任何源的一个请求,包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息。日志条目不是公用 API 调用的有序堆栈跟踪,因此它们不会以任何特定顺序显示。
示例:调用 GetAuthorizationToken API 的日志条目
由 GetAuthorizationToken
创建的日志条目包括 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 程序包版本的日志条目
所有程序包管理器客户端(包括 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" }