Este documento descreve como criar declarações de Vulnerability Exploitability eXchange (VEX).
Para cada imagem de contentor enviada para o Artifact Registry, a Artifact Analysis pode armazenar uma declaração VEX associada. A VEX é um tipo de aviso de segurança que indica se um produto é afetado por uma vulnerabilidade conhecida.
Cada extrato fornece:
- O publicador da declaração VEX
- O artefacto para o qual a declaração é escrita
- A avaliação de vulnerabilidades (estado VEX) para quaisquer vulnerabilidades conhecidas
Os publicadores de software podem criar declarações VEX para descrever a postura de segurança de uma aplicação. As declarações VEX indicam quaisquer vulnerabilidades descobertas em artefactos específicos e fornecem contexto sobre o respetivo impacto nos clientes ou nos organismos reguladores.
Os responsáveis pela aplicação de políticas e segurança podem usar o estado VEX para avaliar os riscos nas respetivas cadeias de fornecimento de software e usar declarações VEX para atestar a composição dos respetivos artefactos, de modo a ajudar as organizações a cumprir os requisitos regulamentares.
Estado da VEX
O estado VEX indica se um artefacto é afetado por uma vulnerabilidade conhecida.
O estado pode ser um dos seguintes:
- Não afetado: não é necessária nenhuma correção relativamente a esta vulnerabilidade.
- Afetado: são recomendadas ações de remediação.
- Corrigido: nesta versão do produto, foi aplicada uma correção para resolver a vulnerabilidade.
- Em investigação: o estado deste produto ainda não foi determinado. O publicador vai fornecer um estado atualizado numa versão posterior.
Antes de começar
-
Sign in to your Google Account.
If you don't already have one, sign up for a new account.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Container Analysis, Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Enable the Container Analysis, Artifact Registry APIs.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Install the Google Cloud CLI.
-
Se estiver a usar um fornecedor de identidade (IdP) externo, tem primeiro de iniciar sessão na CLI gcloud com a sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init - Ter imagens de contentores armazenadas num repositório do Artifact Registry ou criar um repositório e enviar as suas imagens.
-
Para criar e atualizar notas:
Editor de notas da Container Analysis (
roles/containeranalysis.notes.editor) - PRODUCT_NAME Nome do produto legível para a imagem. Aceita um valor de string. O valor deve ser o nome canónico completo do produto, incluindo o número da versão e outros atributos.
- LOCATION é a região ou a localização multirregional do seu repositório.
- PROJECT_ID é o ID do projeto que contém o seu repositório.
- REPO_NAME é o nome do seu repositório do Docker no Artifact Registry.
- IMAGE_NAME é o nome da imagem.
- CVE_ID é o identificador da vulnerabilidade, como
CVE-2017-11164. - PRODUCT_STATUS é a avaliação do risco de segurança.
A análise de artefactos suporta quatro tipos de estado:
known_affected,known_not_affected,under_investigationefixed. - Carregue declarações VEX, as suas declarações VEX existentes ou declarações VEX fornecidas por outros publicadores.
- Priorize problemas de vulnerabilidade com o VEX. Saiba como ver declarações VEX e filtrar vulnerabilidades por estado VEX.
Funções necessárias
Para receber as autorizações de que precisa para carregar avaliações VEX e verificar o estado VEX das vulnerabilidades, peça ao seu administrador que lhe conceda as seguintes funções da IAM no projeto:
Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.
Também pode conseguir as autorizações necessárias através de funções personalizadas ou outras funções predefinidas.
Crie declarações VEX
A análise de artefactos suporta a norma Common Security Advisory Format (CSAF) 2.0 em JSON. Para produzir uma nova declaração VEX, use o esquema CSAF.
Segue-se um exemplo de uma declaração VEX para uma imagem no Artifact Registry
com uma ramificação cve para uma vulnerabilidade conhecida.
Tem de definir o valor de product_status para cada CVE.
{
"document": {
"csaf_version": "2.0",
"lang": "en-US",
"publisher": {
"name": "Sample-Company",
"namespace": "https://sample-company.com"
},
"title": "Vex document 1.1"
},
"product_tree": {
"branches": [
{
"name": "https://LOCATION-docker.pkg.dev/PROJECT_ID/REPO_NAME/IMAGE_NAME",
"product": {
"name": "PRODUCT_NAME",
"product_id": "IMAGE_NAME"
}
}
]
},
"vulnerabilities": [
{
"cve": "CVE_ID",
"product_status": {
"PRODUCT_STATUS": [
"IMAGE_NAME"
]
}
}
]
}
Onde
Para cada vulnerabilidade que quer incluir na sua declaração VEX, tem de
criar um ramo cve e definir o valor de product_status.
O valor do campo name em product_tree.branches.name é o URI da imagem. A inclusão deste valor associa a declaração VEX a uma imagem do Docker específica.