使用 AWS CloudTrail 記錄 AWS CodeCommit API 呼叫 - AWS CodeCommit

AWS CodeCommit 不再提供給新客戶。的現有客戶 AWS CodeCommit 可繼續正常使用此服務。了解更多」

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

使用 AWS CloudTrail 記錄 AWS CodeCommit API 呼叫

CodeCommit 與整合AWS CloudTrail,這項服務可提供由使用者、角色或中AWS服務所採取之動作的記錄 CodeCommit。 CloudTrail 擷取 CodeCommit 為事件的所有 API 呼叫,包括來自 CodeCommit 主控台的呼叫、Git 用戶端以及來自對 API 發出的程 CodeCommit 式碼呼叫。若您建立線索,便可將 CloudTrail 事件持續交付至 Amazon S3 儲存貯體,包括的事件 CodeCommit。即使您未設定線索,依然可以透過 CloudTrail 主控台中的 Event history (事件歷史記錄) 檢視最新事件。使用由收集的資訊 CloudTrail,您就可以判斷傳送至的請求 CodeCommit、提出請求的 IP 地址、提出請求的對象、提出請求的時間,以及其他詳細資訊。

若要進一步了解 CloudTrail,請參閱使AWS CloudTrail用者指南

CodeCommit 中的資訊 CloudTrail

CloudTrail 在您建立帳戶時,系統即會在 Amazon Web Services 帳戶中啟用。當中發生活動時 CodeCommit,系統便會將該活動記錄至 CloudTrail 事件,並將其他AWS服務事件記錄到事件歷史記錄中。您可以檢視、搜尋和下載 Amazon Web Services 帳戶中的最近事件。如需詳細資訊,請參閱使用 CloudTrail 事件歷史記錄檢視事件

如需 Amazon Web Services 帳戶中正在進行事件的記錄 (包含的事件) CodeCommit,請建立線索。線索能 CloudTrail 將日誌檔案交付至 Amazon S3 儲存貯體。根據預設,當您在主控台建立權杖時,權杖會套用到所有區域。線索會記錄來自 AWS 分割區中所有區域的事件,然後將所有日誌檔案交付到您指定的 Amazon S3 儲存貯體。此外,您還能設定其他AWS服務,以進一步分析和處理 CloudTrail 日誌中收集的事件資料。如需詳細資訊,請參閱:

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

所有 CodeCommit 操作都由記錄 CloudTrail,包括一些(例如GetObjectIdentifier),這些操作當前未記錄在 AWS CodeCommitAPI 參考中,但會被引用為訪問權限並在中記錄CodeCommit 許可參考。例如,呼叫ListRepositories (在AWS CLI、aws codecommit list-repositories)、() 和CreateRepositoryPutRepositoryTriggers (aws codecommit create-repositoryaws codecommit put-repository-triggers) 動作會在 CloudTrail 記錄檔中產生項目,以及 Git 用戶端呼叫GitPullGitPush。此外,如果您在中將 CodeCommit 存放庫配置為管道的來源 CodePipeline,則會看到對存 CodeCommit 取權限動作的呼叫,例如UploadArchive從 CodePipeline。由於 CodeCommit 使用 AWS Key Management Service 來加密和解密儲存庫,您也會在 CloudTrail 日誌中看到從 CodeCommit 對 Encrypt 和來自 AWS KMS 之 Decrypt 動作的呼叫。

每個日誌項目都會包含產生要求之人員的資訊。日誌記錄中的使用者身分資訊,可協助您判斷下列事項:

  • 該請求是否使用根或 IAM 使用者憑證提出

  • 該請求是以角色或聯合身分使用者的臨時安全登入資料提出,還是由擔任的角色提出

  • 該請求是否由另一項 AWS 服務提出

如需詳細資訊,請參閱 CloudTrail 使用者身分元素

日誌檔可存放於 Amazon S3 儲存貯體任意長時間,但您也可以定義 Amazon S3 生命週期規則,自動封存或刪除日誌檔案。根據預設,您的日誌檔案預設會使用 Amazon S3 伺服器端加密 (SSE) 進行加密。

了解 CodeCommit 日誌檔案項目

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

注意

此範例已格式化,以提升可讀性。在 CloudTrail 日誌檔案中,所有項目和事件會合併為單一列。這個範例中受限於單一 CodeCommit 項目。在真實的 CloudTrail 日誌檔案中,您將看到來自多個AWS服務的項目和事件。

範例:列出 CodeCommit 儲存庫的記錄項目

以下範例顯示的是展示ListRepositories動作的 CloudTrail 日誌項目。

注意

雖然會ListRepositories傳回儲存庫清單,但是不可變的回應不會記 CloudTrail 錄在記錄檔中,因responseElements此會顯示null在記錄檔中。

{ "eventVersion":"1.05", "userIdentity": { "type":"IAMUser", "principalId":"AIDACKCEVSQ6C2EXAMPLE", "arn":"arn:aws:iam::444455556666:user/Mary_Major", "accountId":"444455556666", "accessKeyId":"AKIAIOSFODNN7EXAMPLE", "userName":"Mary_Major" }, "eventTime":"2016-12-14T17:57:36Z", "eventSource":"codecommit.amazonaws.com", "eventName":"ListRepositories", "awsRegion":"us-east-1", "sourceIPAddress":"203.0.113.12", "userAgent":"aws-cli/1.10.53 Python/2.7.9 Windows/8 botocore/1.4.43", "requestParameters":null, "responseElements":null, "requestID":"cb8c167e-EXAMPLE", "eventID":"e3c6f4ce-EXAMPLE", "readOnly":true, "eventType":"AwsApiCall", "apiVersion":"2015-04-13", "recipientAccountId":"444455556666" }

範例:建立 CodeCommit 存放庫的記錄項目

以下範例顯示的是展示CreateRepository動作的 CloudTrail 日誌項目。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::444455556666:user/Mary_Major", "accountId": "444455556666", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName":"Mary_Major" }, "eventTime": "2016-12-14T18:19:15Z", "eventSource": "codecommit.amazonaws.com", "eventName": "CreateRepository", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.12", "userAgent": "aws-cli/1.10.53 Python/2.7.9 Windows/8 botocore/1.4.43", "requestParameters": { "repositoryDescription": "Creating a demonstration repository.", "repositoryName": "MyDemoRepo" }, "responseElements": { "repositoryMetadata": { "arn": "arn:aws:codecommit:us-east-2:111122223333:MyDemoRepo", "creationDate": "Dec 14, 2016 6:19:14 PM", "repositoryId": "8afe792d-EXAMPLE", "cloneUrlSsh": "ssh://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo", "repositoryName": "MyDemoRepo", "accountId": "111122223333", "cloneUrlHttp": "https://git-codecommit.us-east-2.amazonaws.com/v1/repos/MyDemoRepo", "repositoryDescription": "Creating a demonstration repository.", "lastModifiedDate": "Dec 14, 2016 6:19:14 PM" } }, "requestID": "d148de46-EXAMPLE", "eventID": "740f179d-EXAMPLE", "readOnly": false, "resources": [ { "ARN": "arn:aws:codecommit:us-east-2:111122223333:MyDemoRepo", "accountId": "111122223333", "type": "AWS::CodeCommit::Repository" } ], "eventType": "AwsApiCall", "apiVersion": "2015-04-13", "recipientAccountId": "111122223333" }

範例:對 CodeCommit 儲存庫執行 Git 提取呼叫的日誌項目

以下範例顯示的是展示本機存放庫所在之GitPull動作的 CloudTrail 日誌項目 up-to-date。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::444455556666:user/Mary_Major", "accountId": "444455556666", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName":"Mary_Major" }, "eventTime": "2016-12-14T18:19:15Z", "eventSource": "codecommit.amazonaws.com", "eventName": "GitPull", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.12", "userAgent": "git/2.11.0.windows.1", "requestParameters": null, "responseElements": null, "additionalEventData": { "protocol": "HTTP", "dataTransferred": false, "repositoryName": "MyDemoRepo", "repositoryId": "8afe792d-EXAMPLE", }, "requestID": "d148de46-EXAMPLE", "eventID": "740f179d-EXAMPLE", "readOnly": true, "resources": [ { "ARN": "arn:aws:codecommit:us-east-2:111122223333:MyDemoRepo", "accountId": "111122223333", "type": "AWS::CodeCommit::Repository" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }

下列範例顯示的 CloudTrail 記錄項目會示範本機存放庫不在的GitPull動作 up-to-date ,因此資料會從 CodeCommit 儲存庫傳輸至本機存放庫。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::444455556666:user/Mary_Major", "accountId": "444455556666", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName":"Mary_Major" }, "eventTime": "2016-12-14T18:19:15Z", "eventSource": "codecommit.amazonaws.com", "eventName": "GitPull", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.12", "userAgent": "git/2.10.1", "requestParameters": null, "responseElements": null, "additionalEventData": { "protocol": "HTTP", "capabilities": [ "multi_ack_detailed", "side-band-64k", "thin-pack" ], "dataTransferred": true, "repositoryName": "MyDemoRepo", "repositoryId": "8afe792d-EXAMPLE", "shallow": false }, "requestID": "d148de46-EXAMPLE", "eventID": "740f179d-EXAMPLE", "readOnly": true, "resources": [ { "ARN": "arn:aws:codecommit:us-east-2:111122223333:MyDemoRepo", "accountId": "111122223333", "type": "AWS::CodeCommit::Repository" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }

範例:成功推送至 CodeCommit 儲存庫的記錄項目

以下範例顯示的是展示GitPush動作的 CloudTrail 日誌項目。GitPush 動作在日誌項目中顯示兩次表示推送成功。

{ "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::444455556666:user/Mary_Major", "accountId": "444455556666", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName":"Mary_Major" }, "eventTime": "2016-12-14T18:19:15Z", "eventSource": "codecommit.amazonaws.com", "eventName": "GitPush", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.12", "userAgent": "git/2.10.1", "requestParameters": null, "responseElements": null, "additionalEventData": { "protocol": "HTTP", "dataTransferred": false, "repositoryName": "MyDemoRepo", "repositoryId": "8afe792d-EXAMPLE", }, "requestID": "d148de46-EXAMPLE", "eventID": "740f179d-EXAMPLE", "readOnly": false, "resources": [ { "ARN": "arn:aws:codecommit:us-east-2:111122223333:MyDemoRepo", "accountId": "111122223333", "type": "AWS::CodeCommit::Repository" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }, { "eventVersion": "1.05", "userIdentity": { "type": "IAMUser", "principalId": "AIDACKCEVSQ6C2EXAMPLE", "arn": "arn:aws:iam::444455556666:user/Mary_Major", "accountId": "444455556666", "accessKeyId": "AKIAIOSFODNN7EXAMPLE", "userName":"Mary_Major" }, "eventTime": "2016-12-14T18:19:15Z", "eventSource": "codecommit.amazonaws.com", "eventName": "GitPush", "awsRegion": "us-east-2", "sourceIPAddress": "203.0.113.12", "userAgent": "git/2.10.1", "requestParameters": { "references": [ { "commit": "100644EXAMPLE", "ref": "refs/heads/main" } ] }, "responseElements": null, "additionalEventData": { "protocol": "HTTP", "capabilities": [ "report-status", "side-band-64k" ], "dataTransferred": true, "repositoryName": "MyDemoRepo", "repositoryId": "8afe792d-EXAMPLE", }, "requestID": "d148de46-EXAMPLE", "eventID": "740f179d-EXAMPLE", "readOnly": false, "resources": [ { "ARN": "arn:aws:codecommit:us-east-2:111122223333:MyDemoRepo", "accountId": "111122223333", "type": "AWS::CodeCommit::Repository" } ], "eventType": "AwsApiCall", "recipientAccountId": "111122223333" }