Assinando Imagens para Segurança
Descubra como assinar imagens armazenadas no Container Registry.
Por motivos de conformidade e segurança, os administradores de sistema geralmente só querem implantar software em um sistema de produção quando estão satisfeitos que:
-
O software vem de uma fonte confiável.
-
O software não foi modificado desde que foi publicado, comprometendo sua integridade.
Para atender a esses requisitos, você pode assinar as imagens armazenadas no Oracle Cloud Infrastructure Registry (também conhecido como Container Registry). As imagens assinadas fornecem uma maneira de verificar a origem de uma imagem e sua integridade.
O Container Registry permite que usuários ou sistemas enviem imagens para o registro e depois as assinem usando uma chave de criptografia principal obtida do Oracle Cloud Infrastructure Vault, criando uma assinatura de imagem. Uma assinatura de imagem associa uma imagem assinada a uma chave de criptografia principal específica usada para assinar a imagem. Uma imagem pode ter várias assinaturas, cada uma criada usando uma chave mestra de criptografia diferente.
Os usuários ou os sistemas que extraem uma imagem assinada do Container Registry podem ter certeza de que a origem da imagem é confiável e que a integridade da imagem não foi comprometida. Para aprimorar ainda mais a conformidade e a segurança, os clientes podem ser configurados para extrair somente imagens assinadas do registro.
Em alto nível, estas são as etapas a serem seguidas para armazenar imagens assinadas no Container Registry:
-
Crie a imagem em sua própria máquina ou em seu sistema CI/CD.
-
Marque e envie a imagem ao Container Registry.
-
Se você não tiver acesso a uma chave de criptografia principal no Oracle Cloud Infrastructure Vault, obtenha acesso a uma chave existente ou crie uma nova chave.
-
Assine a imagem usando a CLI do Container Registry, criando uma assinatura de imagem que associe a imagem à chave principal de criptografia e à versão da chave no serviço Vault.
Assinar uma imagem e criar uma assinatura de imagem
Após criar uma imagem e enviá-la ao Container Registry, você pode assinar a imagem usando uma chave de criptografia mestra obtida do Oracle Cloud Infrastructure Vault, criando uma assinatura de imagem. Observe que uma assinatura de imagem estará associada ao OCID de uma imagem, tornando-a específica a um envio específico da imagem.
Para assinar uma imagem e criar uma assinatura de imagem:
-
Crie uma imagem em sua própria máquina ou em seu sistema CI/CD (por exemplo, usando o comando
docker build
). -
Envie a imagem ao Container Registry. Siga as instruções em Enviando Imagens Usando a CLI do Docker para:
-
Faça log-in no Container Registry usando o comando
docker login
. -
Marque com tag a imagem que você deseja enviar usando o comando
docker tag
. Por exemplo:docker tag 8e0506e14874 phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
-
Envie a imagem ao Container Registry usando o comando
docker push
. Por exemplo:docker push phx.ocir.io/ansh81vru1zp/project01/acme-web-app:v2.0.test
-
-
Obtenha o OCID da imagem usando a Console (consulte Obtendo Detalhes de uma Imagem) ou usando a CLI (use o comando
oci artifacts container image list --compartment-id <compartment_ocid> --repository-name <repository-name>
). -
Se você ainda não tiver acesso a uma chave assimétrica RSA no Oracle Cloud Infrastructure Vault, obtenha acesso a uma chave assimétrica RSA existente ou crie uma nova chave de criptografia mestra como uma chave assimétrica RSA (consulte Criando uma Chave de Criptografia Principal).
Observe que o uso de chaves simétricas AES para assinar imagens não é suportado. Para obter mais informações sobre diferentes tipos de chave, consulte Visão Geral do Serviço Vault.
-
Anote o OCID da chave principal de criptografia e o OCID da versão da chave armazenada no Oracle Cloud Infrastructure Vault. Consulte Listando Chaves de Criptografia Principais.
-
Assine a imagem que você enviou ao Container Registry usando a chave principal e a versão da chave no serviço Vault, criando uma assinatura de imagem, digitando:
oci artifacts container image-signature sign-upload --compartment-id <compartment-ocid> --kms-key-id <key-ocid> --kms-key-version-id <key-version-ocid> --signing-algorithm <signing-algorithm> --image-id <image-ocid> --description <signature-description> --metadata <image-metadata-json>
em que:-
--compartment-id <compartment-ocid>
é o OCID do compartimento ao qual o repositório da imagem pertence. Por exemplo,--compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa
-
--kms-key-id <key-ocid>
é o OCID da chave de criptografia mestra a ser usada para assinar a imagem. Por exemplo,--kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj
-
--kms-key-version-id <key-version-ocid>
é o OCID da versão da chave a ser usada para assinar a imagem. Por exemplo,--kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb
-
--signing-algorithm <signing-algorithm>
é um dos seguintes algoritmos a serem usados para assinar a imagem:-
SHA_224_RSA_PKCS_PSS
-
SHA_256_RSA_PKCS_PSS
-
SHA_384_RSA_PKCS_PSS
-
SHA_512_RSA_PKCS_PSS
O algoritmo a ser escolhido depende do tipo da chave mestra de criptografia.
Por exemplo,
--signing-algorithm SHA_224_RSA_PKCS_PSS
-
-
--image-id <image-ocid>
é o OCID da imagem a ser assinada. Por exemplo,--image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks
-
--description <signature-description>
é o texto opcional de sua escolha para descrever a imagem. A descrição é incluída como parte da assinatura e é mostrada na Console. Por exemplo,--description "Image for UAT testing"
-
--metadata <image-metadata-json>
é uma informação opcional de sua escolha sobre a imagem, em um formato JSON válido (somente caracteres alfanuméricos, sem espaços em branco ou caracteres de escape). Por exemplo,--metadata {"buildnumber":"8447"}
Por exemplo:
oci artifacts container image-signature sign-upload --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb --signing-algorithm SHA_224_RSA_PKCS_PSS --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks --description "Image for UAT testing" --metadata {"buildnumber": "8447"}
A imagem especificada agora está assinada. Quando você exibe a lista de imagens em um repositório na Console, o texto "(Assinado)" aparece ao lado do nome da imagem.
-
Visualizar imagens assinadas
Você pode usar a Console para exibir as imagens assinadas em um repositório.
Para visualizar imagens assinadas:
-
Na página da lista Registro de Contêiner, selecione o repositório com o qual você deseja trabalhar na lista Repositórios e imagens. Se precisar de ajuda para localizar a página de lista ou o repositório, consulte Listando Repositórios.
A seção de detalhes do repositório é aberta.
- Selecione o repositório na lista Repositórios e imagens uma segunda vez.
As imagens no repositório, incluindo seus identificadores de versão, são listadas no repositório na lista Repositórios e imagens.
O texto "(Assinado)" aparece ao lado das imagens que foram assinadas.
-
(Opcional) Na lista, selecione uma imagem assinada e selecione a guia Assinaturas para exibir as assinaturas criadas quando a imagem foi assinada.
Trabalhando com Assinaturas de Imagem
Uma assinatura de imagem associa uma imagem à chave mestra (obtida do serviço Vault) que foi usada para assinar a imagem. Uma imagem pode ter várias assinaturas, cada uma criada usando uma chave mestra de criptografia diferente.
Após assinar uma imagem no Container Registry e criar uma assinatura de imagem, você pode:
-
Visualizar detalhes da assinatura.
-
Verifique a assinatura com o serviço Vault para confirmar se a chave mestra de criptografia usada para assinar a imagem ainda é válida e disponível.
-
Adicione tags de formato livre e tags definidas à assinatura.
-
Excluir a assinatura para indicar que a imagem não deve mais ser considerada confiável.
Para exibir, verificar, marcar ou excluir a(s) assinatura(s) que foi(ram) criada(s) quando uma imagem foi assinada:
-
Na página da lista Registro de Contêiner, selecione o repositório com o qual você deseja trabalhar na lista Repositórios e imagens. Se precisar de ajuda para localizar a página de lista ou o repositório, consulte Listando Repositórios.
A seção de detalhes do repositório é aberta.
-
Selecione o repositório na lista Repositórios e imagens uma segunda vez.
As imagens no repositório, incluindo seus identificadores de versão, são listadas no repositório na lista Repositórios e imagens.
O texto "(Assinado)" aparece ao lado das imagens que foram assinadas.
-
Na lista, selecione uma imagem assinada e selecione a guia Assinaturas para exibir detalhes das assinaturas criadas quando a imagem foi assinada:
-
Description: uma descrição da assinatura que foi especificada quando a imagem foi assinada.
-
Verification response: o resultado da última tentativa de verificar a assinatura da imagem com o serviço Vault.
-
Tags: O número de tags definidas ou de formato livre aplicadas à assinatura da imagem.
-
Date: quando a imagem foi assinada e a assinatura da imagem foi criada.
-
-
(Opcional) Para ver a chave mestra, a versão da chave e o algoritmo de assinatura de uma assinatura específica, selecione Exibir detalhes da chave no menu Ações da assinatura.
-
(Opcional) Para verificar uma assinatura específica com o serviço Vault, selecione Verificar assinatura no menu Ações da assinatura.
O serviço Vault verifica se a origem da imagem teve acesso a uma chave privada válida quando ela foi enviada e se a imagem não foi modificada desde que foi enviada. Se ambas as condições forem atendidas, a assinatura será mostrada com um status Verificado. Os usuários ou os sistemas que extraem a imagem do registro podem ter certeza de que a origem da imagem é confiável e que a integridade da imagem não foi comprometida.
Se a verificação de imagem falhar, verifique se você tem acesso à chave mestra e se ela não foi excluída.
-
(Opcional) Para adicionar uma tag de formato livre ou uma tag definida a uma assinatura à qual nenhuma tag tenha sido aplicada ainda, selecione Adicionar tags no menu Ações da assinatura.
Se uma ou mais tags já tiverem sido aplicadas à assinatura, selecione Exibir tags no menu Ações da assinatura e selecione Adicionar tags na caixa de diálogo Exibir tags. Para obter mais informações, consulte Aplicando Tags de Formato Livre e Tags Definidas a Repositórios, Imagens e Assinaturas de Imagem.
-
(Opcional) Para excluir uma assinatura específica, selecione Excluir assinatura no menu Ações da assinatura.
A assinatura é excluída e não é mais mostrada na guia Assinaturas. Se a imagem não tiver outras assinaturas, o texto "(Assinado)" não aparecerá mais ao lado do nome da imagem na lista de imagens no repositório.
Usando a CLI
Para obter uma lista completa de flags e opções de variáveis para comandos da CLI, consulte a Referência de Linha de Comando.
Para assinar uma imagem e criar uma assinatura de imagem
Use o comando oci artefatos container image-signature sign-upload e os parâmetros necessários para assinar uma imagem e criar uma assinatura de imagem:
oci artifacts container image-signature sign-upload --compartment-id <compartment-ocid> --kms-key-id <key-ocid> --kms-key-version-id <key-version-ocid> --signing-algorithm <signing-algorithm> --image-id <image-ocid> --description <signature-description> --metadata <image-metadata-json> [OPTIONS]
oci artifacts container image-signature sign-upload --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --kms-key-id ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --kms-key-version-id ocid1.keyversion.oc1.phx.0.bbqehaq3aadfa.acy6______mbb --signing-algorithm SHA_224_RSA_PKCS_PSS --image-id ocid1.containerimage.oc1.phx.0.ansh81vru1zp.aaaaaaaalqzj______yks --description "Image for UAT testing" --metadata {"buildnumber": "8447"}
Para verificar uma imagem assinada usando uma assinatura de imagem
Use o comando oci artefatos container image-signature get-verify e os parâmetros necessários para verificar uma imagem assinada usando uma assinatura de imagem:
oci artifacts container image-signature get-verify --compartment-id <compartment-ocid> --repo-name <repository-name> --image-digest <image-digest> --trusted-keys <key-ocid> --compartment-id-in-subtree true|false [OPTIONS]
Por exemplo:
oci artifacts container image-signature get-verify --compartment-id ocid1.compartment.oc1..aaaaaaaa23______smwa --repo-name project01/acme-web-app --image-digest sha256:da1f_____31fd --trusted-keys ocid1.key.oc1.phx.bbqehaq3aadfa.abyh______qlj --compartment-id-in-subtree false
Usando a API
Execute a operação CreateContainerImageSignature para assinar uma imagem e criar uma assinatura de imagem.
Execute a operação GetContainerImageSignature para extrair uma assinatura de imagem e a operação Verify para verificar a assinatura.