Amazon CodeCatalyst 不再向新客户开放。现有客户可以继续正常使用该服务。有关更多信息,请参阅 如何从 CodeCatalyst 迁移。
使用 AWS CloudTrail 日志记录通过 AWS 账户监控 API 调用
Amazon CodeCatalyst 与 AWS CloudTrail 集成,后者是一项提供用户、角色或 AWS 服务所采取操作的记录的服务。CloudTrail 将代表 CodeCatalyst 在已连接的 AWS 账户中发出的 API 调用捕获为事件。如果您创建跟踪记录,则可以使 CloudTrail 事件持续传送到 S3 存储桶(包括 CodeCatalyst 的事件)。如果您不配置跟踪记录,则仍可在 CloudTrail 控制台中的事件历史记录中查看最新事件。
CodeCatalyst 支持将以下操作记录为 CloudTrail 日志文件中的事件:
-
CodeCatalyst 空间的管理事件将记录在作为该空间的指定计费账户的 AWS 账户中。有关更多信息,请参阅 CodeCatalyst 空间事件。
注意
可使用 CLI 访问 CodeCatalyst 空间的数据事件,如使用事件日志记录访问已记录的事件中详述。
-
在已连接的 AWS 账户中执行的 CodeCatalyst 工作流操作中使用的资源事件将在该 AWS 账户中记录为事件。有关更多信息,请参阅 CodeCatalyst 账户连接和计费事件。
重要
虽然可以将多个账户与一个空间关联,但针对 CodeCatalyst 空间和项目中事件的 CloudTrail 记录仅适用于计费账户。
空间计费账户是您的 AWS 账户,将从中扣除 AWS 免费套餐之外的 CodeCatalyst 资源使用费用。可将多个账户连接到一个空间,但只能将一个账户作为指定的计费账户。空间的计费账户或其他已连接账户可以具有 IAM 角色,这些角色用于从 CodeCatalyst 工作流部署 AWS 资源和基础设施,例如 Amazon ECS 集群或 S3 存储桶。您可以使用工作流 YAML 来识别部署到的 AWS 账户。
注意
部署到 CodeCatalyst 工作流的已连接账户中的 AWS 资源不会记录到 CodeCatalyst 空间的 CloudTrail 日志记录中。例如,CodeCatalyst 资源包括空间或项目。AWS 资源包括 Amazon ECS 服务或 Lambda 函数。必须为将资源部署到其中的每个 AWS 账户单独配置 CloudTrail 日志记录。
已连接的账户中的 CodeCatalyst 日志记录包括以下注意事项:
-
对 CloudTrail 事件的访问将通过已连接账户中的 IAM 管理,而不是在 CodeCatalyst 中进行管理。
-
第三方连接(例如链接到 GitHub 存储库)将促使第三方资源名称被记录在 CloudTrail 日志中。
注意
CodeCatalyst 事件的 CloudTrail 日志记录是在空间级别进行的,并且不会按项目边界隔离事件。
有关 CloudTrail 的更多信息,请参阅《AWS CloudTrail 用户指南》https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-user-guide.html。
注意
此部分介绍了 CodeCatalyst 空间以及连接到 CodeCatalyst 的 AWS 账户中记录的所有事件的 CloudTrail 日志记录。此外,要查看 CodeCatalyst 空间中记录的所有事件,也可以使用 AWS CLI 和 aws codecatalyst list-event-logs 命令。有关更多信息,请参阅使用事件日志记录访问已记录的事件。
CodeCatalyst 空间事件
CodeCatalyst 中用于管理空间级和项目级资源的操作将记录在空间的计费账户中。对于 CodeCatalyst 空间的 CloudTrail 日志记录,记录事件时要考虑以下注意事项。
-
CloudTrail 事件适用于整个空间,而未限定于任一个项目。
-
在将一个 AWS 账户连接到 CodeCatalyst 空间时,账户连接的可记录事件将记录到该 AWS 账户中。此连接一经启用便无法禁用。
-
在将一个 AWS 账户连接到 CodeCatalyst 空间并将其指定为空间的计费账户后,事件将记录到该 AWS 账户中。此连接一经启用便无法禁用。
空间级和项目级资源的事件仅记录在计费账户中。要更改 CloudTrail 目标账户,请在 CodeCatalyst 中更新计费账户。在下一个月度计费周期开始时,更改将应用于 CodeCatalyst 中的新计费账户。之后,将更新 CloudTrail 目标账户。
以下是 AWS 中的事件的示例,这些事件与 CodeCatalyst 中用于管理空间级和项目级资源的操作相关。以下 API 将通过 SDK 和 CLI 发布。事件将记录在指定为 CodeCatalyst 空间的计费账户的 AWS 账户中。
CodeCatalyst 账户连接和计费事件
以下是 AWS 中的事件的示例,这些事件与 CodeCatalyst 中用于账户连接或计费的操作相关:
-
AcceptConnection -
AssociateIAMRoletoConnection -
DeleteConnection -
DissassociateIAMRolefromConnection -
GetBillingAuthorization -
GetConnection -
GetPendingConnection -
ListConnections -
ListIAMRolesforConnection -
PutBillingAuthorization -
RejectConnection
CloudTrail 中的 CodeCatalyst 信息
创建 AWS 账户时将在该账户上启用 CloudTrail。在将该 AWS 账户连接到 CodeCatalyst 空间时,该 AWS 账户中发生的此空间事件将记录在该 AWS 账户的 CloudTrail 日志中。CodeCatalyst 中的可记录事件将与已连接账户中的其他可记录的 AWS 事件一起,作为 CloudTrail 事件记录在该账户的 CloudTrail 日志中以及 CloudTrail 控制台的事件历史记录中。
每个事件或日志条目都包含有关生成请求的人员信息。身份信息有助于您确定以下内容:
-
请求是否由用户使用 AWS 构建者 ID 发出。
-
请求是使用根用户凭证还是 AWS Identity and Access Management(IAM)用户凭证发出的。
-
请求是使用角色还是联合用户的临时安全凭证发出的。
-
请求是否由其他 AWS 服务发出。
有关更多信息,请参阅 CloudTrail userIdentity 元素。
访问 CloudTrail 事件
要持续记录 AWS 账户中的事件(包括 AWS 账户中的 CodeCatalyst 活动的事件),请创建跟踪记录。通过跟踪记录,CloudTrail 可将日志文件传送至 S3 存储桶。预设情况下,在控制台中创建跟踪记录时,此跟踪记录将适用于所有 AWS 区域。跟踪记录 AWS 分区所有区域的事件,将日志文件传送至指定的 S3 存储桶。此外,您可以配置其他AWS服务,进一步分析在 CloudTrail 日志中收集的事件数据并采取行动。有关更多信息,请参阅下列内容:
跟踪记录是一种配置,可用于将事件作为日志文件传送到您指定的 S3 存储桶。CloudTrail 日志文件包含一个或多个日志条目。一个事件表示来自任何源的一个请求,包括有关所请求的操作、操作的日期和时间、请求参数等方面的信息。CloudTrail 日志文件不是公用 API 调用的有序堆栈跟踪,因此它们不会按任何特定顺序显示。
AWS 中的示例 CodeCatalyst 账户连接事件
下面的示例显示了一个 CloudTrail 日志条目,该条目演示了 ListConnections 操作。对于已连接到空间的 AWS 账户,ListConnections 用于查看此 AWS 账户与 CodeCatalyst 的所有账户连接。事件将记录在 accountId 中指定的 AWS 账户中,arn 值将是用于操作的角色的 Amazon 资源名称(ARN)。
{ "eventVersion": "1.08", "userIdentity": { "type": "AssumedRole", "principalId": "AKIAI44QH8DHBEXAMPLE", "arn": "role-ARN", "accountId": "account-ID", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "sessionContext": { "sessionIssuer": { "type": "Role", "principalId": "AKIAI44QH8DHBEXAMPLE", "arn": "role-ARN", "accountId": "account-ID", "userName": "user-name" }, "webIdFederationData": {}, "attributes": { "creationDate": "2022-09-06T15:04:31Z", "mfaAuthenticated": "false" } } }, "eventTime": "2022-09-06T15:08:43Z", "eventSource": "account-ID", "eventName": "ListConnections", "awsRegion": "us-west-2", "sourceIPAddress": "192.168.0.1", "userAgent": "aws-cli/1.18.147 Python/2.7.18 Linux/5.4.207-126.363.amzn2int.x86_64 botocore/1.18.6", "requestParameters": null, "responseElements": null, "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 ", "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 ", "readOnly": true, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "account-ID", "eventCategory": "Management" }
AWS 中的示例 CodeCatalyst 项目资源事件
下面的示例显示了一个 CloudTrail 日志条目,该条目演示了 CreateDevEnvironment 操作。如果一个 AWS 账户已连接到空间且作为空间的指定计费账户,则可用于空间中的项目级活动,例如创建开发环境。
在 userIdentity 下的 accountId 字段中,这是托管所有 AWS 构建者 ID 身份的身份池的 IAM Identity Center 账户 ID(432677196278)。此账户 ID 包含有关事件的 CodeCatalyst 用户的以下信息。
-
type字段表示请求的 IAM 实体的类型。对于空间和项目资源的 CodeCatalyst 事件,此值为IdentityCenterUser。accountId字段指定拥有已用于获取凭证的实体的账户。 -
userId字段包含用户的 AWS 构建者 ID 标识符。 -
identityStoreArn字段包含身份存储账户和用户的角色 ARN。
recipientAccountId 字段包含空间计费账户的账户 ID,此处的示例值为 111122223333。
有关更多信息,请参阅 CloudTrail userIdentity 元素。
{ "eventVersion": "1.09", "userIdentity": { "type": "IdentityCenterUser", "accountId": "432677196278", "onBehalfOf": { "userId": "user-ID", "identityStoreArn": "arn:aws:identitystore::432677196278:identitystore/d-9067642ac7" }, "credentialId": "ABCDefGhiJKLMn11Lmn_1AbCDEFgHijk-AaBCdEFGHIjKLmnOPqrs11abEXAMPLE" }, "eventTime": "2023-05-18T17:10:50Z", "eventSource": "codecatalyst.amazonaws.com", "eventName": "CreateDevEnvironment", "awsRegion": "us-west-2", "sourceIPAddress": "192.168.0.1", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:102.0) Gecko/20100101 Firefox/102.0", "requestParameters": { "spaceName": "MySpace", "projectName": "MyProject", "ides": [{ "runtime": "public.ecr.aws/q6e8p2q0/cloud9-ide-runtime:2.5.1", "name": "Cloud9" }], "instanceType": "dev.standard1.small", "inactivityTimeoutMinutes": 15, "persistentStorage": { "sizeInGiB": 16 } }, "responseElements": { "spaceName": "MySpace", "projectName": "MyProject", "id": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111 " }, "requestID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "eventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "readOnly": false, "eventType": "AwsApiCall", "managementEvent": true, "recipientAccountId": "111122223333", "sharedEventID": "a1b2c3d4-5678-90ab-cdef-EXAMPLE11111", "eventCategory": "Management" }
注意
在一些事件中,用户代理可能是未知的。在此情况下,CodeCatalyst 将在 CloudTrail 事件中的 userAgent 字段中提供 Unknown 值。
查询 CodeCatalyst 事件跟踪记录
您可以使用 Amazon Athena 中的查询表来创建和管理对 CloudTrail 日志的查询。有关创建查询的更多信息,请参阅《Amazon Athena 用户指南》中的查询 AWS CloudTrail 日志。