Registrar chamadas à API do CodeArtifact com o AWS CloudTrail
O CodeArtifact é integrado ao AWS CloudTrail
Se você criar uma trilha, poderá habilitar a entrega contínua de eventos do CloudTrail para um bucket do Amazon Simple Storage Service (Amazon S3), incluindo eventos para o CodeArtifact. Se você não configurar uma trilha, ainda poderá visualizar os eventos mais recentes no console do CloudTrail no Histórico de eventos. Com as informações coletadas pelo CloudTrail, determine a solicitação feita para o CodeArtifact, o endereço IP do qual a solicitação foi feita, quem fez a solicitação, quando ela foi feita e os detalhes adicionais.
Para saber mais sobre o CloudTrail, consulte o Guia do usuário do AWS CloudTrail.
Informações do CodeArtifact no CloudTrail
O CloudTrail é habilitado em sua conta AWS ao criá-la. Quando ocorre uma atividade no CodeArtifact, essa atividade é registrada em um evento do CloudTrail com outros eventos de serviços da AWS em Histórico de eventos. É possível visualizar, pesquisar e baixar eventos recentes em sua AWS conta. Para obter mais informações, consulte Visualização de eventos com o histórico de eventos do CloudTrail.
Para obter um registro de eventos em andamento na sua conta da AWS, incluindo eventos do CodeArtifact, crie uma trilha. Uma trilha permite que o CloudTrail entregue arquivos de log a um bucket do Amazon S3. Por padrão, quando você cria uma trilha no console, ela é aplicada a todas as regiões da AWS. A trilha registra eventos de todas as regiões na partição da AWS e entrega os arquivos de log no bucket do Amazon S3 que você especificou Também é possível configurar outros produtos da AWS para analisar e atuar mais profundamente sobre os dados de eventos coletados nos logs do CloudTrail. Para obter mais informações, consulte os tópicos a seguir.
Quando o log do CloudTrail está habilitado na conta AWS, as chamadas de API feitas para ações do CodeArtifact serão rastreadas nos arquivos de log do CloudTrail, onde serão gravadas com outros registros de serviço da AWS. O CloudTrail determina quando criar e gravar em um novo arquivo conforme o período e o tamanho do arquivo.
Todas as ações do CodeArtifact são registradas pelo CloudTrail. Por exemplo, chamadas para as ações ListRepositories (na AWS CLI e aws codeartifact
list-repositories), CreateRepository (aws codeartifact
create-repository) e ListPackages (aws codeartifact
list-packages) geram entradas nos arquivos de log do CloudTrail, além dos comandos do cliente do gerenciador de pacotes. Os comandos do cliente do gerenciador de pacotes normalmente fazem mais de uma solicitação HTTP ao servidor. Cada solicitação gera um evento de logs do CloudTrail separado.
Entrega entre contas de logs do CloudTrail
Até três contas separadas recebem logs do CloudTrail para uma única chamada de API:
-
A conta que fez a solicitação, por exemplo, a conta que chamou
GetAuthorizationToken. -
A conta do administrador do repositório, por exemplo, a conta que administra o repositório que
ListPackagesfoi chamada. -
A conta do proprietário do domínio, por exemplo, a conta do proprietário do domínio que contém o repositório no qual uma API foi chamada.
Para APIs como ListRepositoriesInDomain que são ações em um domínio e não em um repositório específico, somente a conta de chamada e a conta do proprietário do domínio recebem o log do CloudTrail. Para APIs como ListRepositories que não são autorizadas em nenhum recurso, somente a conta do chamador recebe o log do CloudTrail.
Noções básicas sobre as entradas dos arquivos de log do CodeArtifact
Os arquivos de log do CloudTrail contêm uma ou mais entradas de log. Cada entrada lista vários eventos com formatação JSON. Um evento de log representa uma única solicitação de qualquer origem e inclui informações sobre a ação solicitada, a data e a hora da ação, os parâmetros de solicitação, e assim por diante. As entradas de log não são um rastreamento de pilha ordenada das chamadas de API pública. Assim, elas não são exibidas em nenhuma ordem específica.
Tópicos
Exemplo: uma entrada de log para chamar a API GetAuthorizationToken
Uma entrada de log criada por GetAuthorizationToken inclui o nome do domínio no campo 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" }
Exemplo: uma entrada de log para buscar uma versão do pacote npm
As solicitações feitas por todos os clientes do gerenciador de pacotes, incluindo o cliente npm, têm dados adicionais registrados, incluindo o nome do domínio, nome do repositório e nome do pacote no campo requestParameters. O caminho do URL e o método HTTP são registrados no campo 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" }