Neste tutorial, demonstramos como usar o OpenSSF Scorecard para verificar imagens de contêiner de práticas recomendadas de segurança da cadeia de suprimentos. O Scorecard Attestor é executado como parte do pipeline do Cloud Build para gerar um atestado que pode ser verificado pela autorização binária antes da implantação. Essa etapa de verificação impede a implantação de artefatos de contêiner comprometidos na produção, o que previne várias classes de vulnerabilidades da cadeia de suprimentos.
Informações gerais
A Open Source Security Foundation (OpenSSF) é uma organização que oferece ferramentas, serviços e infraestrutura para iniciativas de segurança de código aberto. O Scorecard é uma ferramenta, mantida pelo OpenSSF, que verifica os repositórios de gerenciamento de código-fonte (SCM, na sigla em inglês) em busca de práticas recomendadas de segurança da cadeia de suprimentos.
O Scorecard Attestor é uma ferramenta integrada ao Scorecard que permite criar atestados de autorização binária com base em uma política que você configurar. O Scorecard Attestor executa o Scorecard no repositório SCM de uma imagem de contêiner, gera resultados, avalia os resultados em relação à política e gera um atestado se a política é cumprida.
Neste tutorial, você cria um repositório de amostra e depois usa o Scorecard Attestor. Cada pipeline de amostra contém estas etapas de criação:
build
: criar uma imagem de contêiner de amostra.push
: enviar a imagem ao Container Registry.attest
: verificar e assinar a imagem usando o Scorecard Attestor para criar um atestado com base na política.
Na etapa attest
de cada pipeline, o Scorecard Attestor executa estas ações:
- Busca dados sobre o repositório SCM para a imagem de contêiner recém-criada.
- Executa o Scorecard nos dados brutos e avalia o repositório SCM em relação à política especificada pelo usuário.
- Se todas as políticas são cumpridas, o Scorecard Attestor cria o atestado.
- Se alguma das políticas não é atendida, o Scorecard Attestor não cria o atestado.
No momento da implantação, a autorização binária verifica se há um atestado verificável. Sem um, o aplicador impede a implantação da imagem.
Custos
Neste tutorial, usamos os seguintes produtos do Google Cloud.
- Container Registry
- Artifact Analysis
- Cloud Build
- Cloud Key Management Service
Use a Calculadora de preços para gerar uma estimativa de custo com base no uso previsto.
Objetivos
Neste tutorial, você realizará as seguintes ações:
- Configurar o Scorecard Attestor como um builder personalizado do Cloud Build.
- Ver e configurar a política do Scorecard Attestor.
- Executar o Scorecard Attestor em um repositório de amostra para criar um atestado com base em uma política.
- Executar o Scorecard Attestor em um repositório de amostra no modo somente verificação sem criar um atestado. ## Antes de começar
Nesta seção, você fará uma configuração única do sistema.
Configurar o ambiente
Armazene o projeto do Google Cloud em uma variável de ambiente.
export PROJECT_ID=PROJECT_ID
Substitua PROJECT_ID pelo ID do projeto do Google Cloud.
Defina o ID do projeto padrão para o projeto do Google Cloud:
gcloud config set project $PROJECT_ID
Armazene o número do projeto em uma variável de ambiente para etapas futuras:
export PROJECT_NUMBER=$(gcloud projects list --filter="${PROJECT_ID}" \ --format="value(PROJECT_NUMBER)")
Ative APIs:
Para garantir que os serviços necessários para este guia estejam ativados, execute o seguinte comando:
gcloud services enable \ cloudbuild.googleapis.com \ containerregistry.googleapis.com \ containerscanning.googleapis.com \ cloudkms.googleapis.com
Configurar papéis do IAM
Execute os seguintes comandos para configurar a conta de serviço do Cloud Build com os seguintes papéis:
containeranalysis.notes.editor
: adiciona o papel de Editor de notas do Artifact Analysis para o gerenciamento do atestador.containeranalysis.notes.occurrences.viewer
: adiciona o papel de Ocorrências do Artifact Analysis para notas para o gerenciamento das ocorrências de vulnerabilidade e de atestado.roles/containeranalysis.occurrences.editor
: adiciona o papel de Editor de ocorrências do Artifact Analysis para a criação de ocorrências de atestado no Artifact Analysis.cloudkms.signer
: adiciona o papel Signatário de CryptoKey do Cloud KMS que permite que a conta de serviço acesse o 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
Criar uma chave de assinatura do Cloud KMS
As chaves do Cloud Key Management Service são usadas para criar o atestado.
Crie um novo keyring 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 chamada scorecard-attestor-key no keyring:
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 em uma variável de ambiente para etapas futuras:
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 de autorização binária. Mais tarde, o Scorecard Attestor cria uma nota associada a esse 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 de autorização binária à chave 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 conhecer outros algoritmos de assinatura, consulte Como criar chaves assimétricas.
Criar atestados com o Scorecard Attestor em um pipeline do Cloud Build
Enviar a amostra de amostra do caso de falha
Nesta seção, você cria uma imagem de contêiner e verifica as práticas de segurança da cadeia de suprimentos com a OpenSSF Scorecard. A imagem é criada, mas não cria um atestado. O repositório de base contém algumas práticas não recomendadas de segurança da cadeia de suprimentos, como uma dependência liberada para o Debian 10 no Dockerfile e um artefato binário compilado verificado no repositório de origem. Essas são violações da política de atestado no repositório.
Clone o repositório de teste scorecard-binauthz-test-bad.
Veja o arquivo da política do atestado para o caso de falha.
cat policy-binauthz.yaml
(Opcional) Veja o arquivo de configuração da compilação no caso de falha.
cat samples/signer/cloudbuild.yaml
Envie o build:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
O resultado será assim:
time="2022-12-20T22:30:14Z" level=info msg="image failed scorecard attestation policy check"
Salve o ID da criação mais recente:
export BUILD_ID=$(gcloud builds list --limit=1 --format="value('ID')")
Verificar o resultado:
gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "failed scorecard attestation policy check"
Envie a amostra de amostra do caso de sucesso
Nesta seção, você cria uma imagem de contêiner que cumpre a política do atestado do Scorecard. Nesse caso, o Scorecard Attestor cria um atestado.
Para enviar a amostra da compilação do caso de sucesso para o Cloud Build, faça o seguinte:
Clone o repositório de teste: scorecard-binauthz-test-good.
Veja o arquivo da política do atestado para o caso de falha.
sh cat policy-binauthz.yaml
(Opcional) Veja o arquivo de configuração da compilação no caso de falha.
cat samples/signer/cloudbuild.yaml
Envie o build:
gcloud builds submit \ --substitutions=_KMS_KEY_NAME=$KMS_KEY_NAME,_KMS_DIGEST_ALG=$KMS_DIGEST_ALG \ --config=cloudbuild.yaml
Verificar o resultado:
gcloud storage cat gs://${PROJECT_NUMBER}.cloudbuild-logs.googleusercontent.com/log-${BUILD_ID}.txt | grep "passed scorecard attestation policy check"
Encontre o URL da imagem do contêiner que foi criada e verificada pelo Scorecard
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 um atestado foi criado para a imagem do contêiner. O Scorecard Attestor 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, exclua o projeto:
gcloud projects delete $PROJECT_ID
A seguir
- Veja a documentação do Scorecard Attestor
- Saiba mais sobre o Scorecard
- Saiba mais sobre Autorização binária
- Crie atestadores pelo Console do Google Cloud ou pela ferramenta de linha de comando