Este tutorial demonstra como usar o OpenSSF Scorecard para verificar se as imagens de contentores seguem as práticas recomendadas de segurança da cadeia de fornecimento. O atestador do Scorecard é executado como parte do pipeline do Cloud Build para gerar uma atestação que pode ser validada pela autorização binária antes da implementação. Este passo de validação impede a implementação de artefactos de contentores comprometidos na produção, o que pode evitar várias classes de vulnerabilidades da cadeia de fornecimento.
Vista geral
A Open Source Security Foundation (OpenSSF) é uma organização que fornece ferramentas, serviços e infraestrutura para iniciativas de segurança de código aberto. O Scorecard é uma ferramenta, mantida pela OpenSSF, que analisa repositórios de gestão de código fonte (SCM) para verificar as práticas recomendadas de segurança da cadeia de fornecimento.
O Scorecard Attestor é uma ferramenta integrada no Scorecard que lhe permite criar atestações de autorização binária com base numa política que configura. O atestador da tabela de dados executa a tabela de dados no repositório SCM de uma imagem de contentor, gera resultados, avalia os resultados em função da política e gera uma atestação se a política for cumprida.
Neste tutorial, vai criar um repositório de exemplo e, em seguida, usar o Scorecard Attestor. Cada pipeline de exemplo contém os seguintes passos de compilação:
build
: crie uma imagem de contentor de amostra.push
: envie a imagem para o Container Registry.attest
: verifique e assine a imagem através do atestador do Scorecard para criar uma atestação com base na política.
No attest
passo de cada pipeline, o Scorecard Attestor faz o seguinte:
- Obtém dados sobre o repositório SCM para a imagem de contentor criada recentemente.
- Executa a tabela de dados no dados não processados e avalia o repositório de SCM em função da política especificada pelo utilizador.
- Se todas as políticas forem cumpridas, o atestador da tabela de dados cria a atestação.
- Se alguma das políticas não for cumprida, o atestador do cartão de pontuação não cria a atestação.
No momento da implementação, a Binary Authorization verifica se existe uma atestação validável. Sem um, o aplicador impede a implementação da imagem.
Custos
Este tutorial usa os seguintes Google Cloud produtos.
- Container Registry
- Artifact Analysis
- Cloud Build
- Cloud Key Management Service
Use a calculadora de preços para gerar uma estimativa de custo com base na sua utilização prevista.
Objetivos
Neste tutorial, faz o seguinte:
- Configure o Scorecard Attestor como um criador personalizado do Cloud Build.
- Veja e configure a política do atestador da tabela de dados.
- Execute o Scorecard Attestor num repositório de amostras para criar uma atestação com base numa política.
- Execute o Scorecard Attestor num repositório de exemplo no modo de validação apenas sem criar uma atestação. ## Antes de começar
Nesta secção, faz uma configuração única do sistema.
Configure o seu ambiente
Armazene o seu Google Cloud projeto numa variável de ambiente.
export PROJECT_ID=PROJECT_ID
Substitua PROJECT_ID pelo seu Google Cloud projeto.
Defina o ID do projeto predefinido para o seu Google Cloud projeto:
gcloud config set project $PROJECT_ID
Armazene o número do projeto numa variável de ambiente para passos futuros:
export PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" \ --format="value(PROJECT_NUMBER)")
Ative as APIs:
Para garantir que os serviços necessários para este guia estão ativados, execute o seguinte comando:
gcloud services enable \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ containerscanning.googleapis.com \ cloudkms.googleapis.com
Configure funções de IAM
Execute os seguintes comandos para configurar a conta de serviço do Cloud Build com as seguintes funções:
containeranalysis.notes.editor
: adiciona a função Editor de notas de análise de artefactos para gerir o atestador.containeranalysis.notes.occurrences.viewer
: adiciona a função Artifact Analysis Occurrences for Notes para gerir as ocorrências de atestação e vulnerabilidade.roles/containeranalysis.occurrences.editor
: adiciona a função Editor de ocorrências da análise de artefactos para criar ocorrências de atestação na análise de artefactos.cloudkms.signer
: adiciona a função de signatário de CryptoKey do Cloud KMS que permite à conta de serviço aceder ao serviço de assinatura do Cloud KMS.gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.editor gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.notes.occurrences.viewer gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/containeranalysis.occurrences.editor gcloud projects add-iam-policy-binding $PROJECT_ID --member serviceAccount:$PROJECT_NUMBER@cloudbuild.gserviceaccount.com --role roles/cloudkms.signer
Crie uma chave de assinatura do Cloud KMS
As chaves do Cloud Key Management Service são usadas para criar a atestação.
Crie um novo conjunto de chaves do Cloud KMS com o nome scorecard-attestor-key-ring:
gcloud kms keyrings create scorecard-attestor-key-ring \ --location global
Crie uma nova chave do Cloud KMS denominada scorecard-attestor-key no conjunto de chaves:
gcloud kms keys create scorecard-attestor-key \ --keyring scorecard-attestor-key-ring \ --location global \ --purpose "asymmetric-signing" \ --default-algorithm "rsa-sign-pkcs1-2048-sha256"
Armazene o algoritmo de resumo e o Cloud KMS numa variável de ambiente para os passos futuros:
export KMS_DIGEST_ALG=SHA256 export KMS_KEY_NAME=projects/$PROJECT_ID/locations/global/keyRings/scorecard-attestor-key-ring/cryptoKeys/scorecard-attestor-key/cryptoKeyVersions/1
Crie o atestador da autorização binária. Posteriormente, o atestador do Scorecard cria uma nota associada a este atestador.
gcloud container binauthz attestors create scorecard-attestor \ --attestation-authority-note=scorecard-attestation \ --attestation-authority-note-project=$PROJECT_ID \ --description="Attest that ossf/scorecard policy checks pass"
Associe o atestador da autorização binária à chave do KMS:
gcloud container binauthz attestors public-keys add \ --attestor=scorecard-attestor \ --keyversion=1 \ --keyversion-key=scorecard-attestor-key \ --keyversion-keyring=scorecard-attestor-key-ring \ --keyversion-location=global \ --keyversion-project=$PROJECT_ID
Para explorar outros algoritmos de assinatura, consulte o artigo Criar chaves assimétricas.
Crie atestações com o Scorecard Attestor num pipeline do Cloud Build
Envie a compilação de exemplo do caso de falha
Nesta secção, cria uma imagem de contentor e verifica as respetivas práticas de segurança da cadeia de abastecimento com o OpenSSF Scorecard. A imagem é criada com êxito, mas não cria uma atestação. O repositório base contém algumas práticas de segurança da cadeia de fornecimento desaconselhadas, como uma dependência não fixada no Debian 10 no Dockerfile e um artefacto binário compilado registado no repositório de origem. Estas são violações da política de atestação no repositório.
Clone o repositório de teste: scorecard-binauthz-test-bad.
Veja o ficheiro de política de atestação para o caso de falha.
cat policy-binauthz.yaml
(Opcional) Veja o ficheiro de configuração de compilação para o caso de falha.
cat samples/signer/cloudbuild.yaml
Envie a compilação:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
Deverá ver um resultado semelhante ao seguinte:
time="2022-12-20T22:30:14Z" level=info msg="image failed scorecard attestation policy check"
Guarde o ID da compilação da última compilação:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
Verifique o resultado:
gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "failed scorecard attestation policy check"
Envie a compilação de exemplo do registo de êxito
Nesta secção, cria uma imagem de contentor que satisfaz a respetiva política de atestação da Scorecard. Neste caso, o atestador da tabela de dados cria uma atestação.
Para enviar a compilação de exemplo do caso de êxito para o Cloud Build, faça o seguinte:
Clone o repositório de teste: scorecard-binauthz-test-good.
Veja o ficheiro de política de atestação para o caso de falha.
sh cat policy-binauthz.yaml
(Opcional) Veja o ficheiro de configuração de compilação para o caso de falha.
cat samples/signer/cloudbuild.yaml
Envie a compilação:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
Verifique o resultado:
gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
Obtenha o URL da imagem do contentor criada e verificada pela tabela de pontuação
export IMAGE_URI=$(gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep -o "Attestation for image .* is successfully uploaded" txt | cut -d' ' -f4 | tr -d '"')
Confirme se foi criada uma atestação para a imagem do contentor. O atestador do cartão de pontuação usa o ID da nota
ossf-scorecard-attestation
e o nome da notaprojects/${PROJECT_ID}/notes/ossf-scorecard-attestation
.gcloud container binauthz attestations list \ --attestor="projects/${PROJECT_ID}/attestors/ossf-scorecard-attestor" \ --filter="resourceUri='https://${IMAGE_URI}'"
Limpar
Para limpar os recursos usados neste documento, pode eliminar o projeto:
gcloud projects delete $PROJECT_ID
O que se segue?
- Veja a documentação do atestador da tabela de dados
- Saiba mais sobre a tabela de classificações
- Saiba mais sobre a autorização binária
- Crie atestadores através da Google Cloud consola ou da ferramenta de linha de comandos