Segredos do Vault para Autorização de Extração de Imagem
Você pode hospedar imagens de contêiner em registros privados ou repositórios que exigem autorização para extrair as imagens. Recomendamos que você armazene suas credenciais usando o serviço Oracle Cloud Infrastructure Vault para maior segurança e facilidade de gerenciamento de credenciais.
Como alternativa, você pode fornecer um nome de usuário e uma senha ao serviço Oracle Cloud Infrastructure Container Instances diretamente. Consulte CreateBasicImagePullSecretDetails para obter mais informações.
Criar Credenciais
O tipo de nome de usuário e senha necessários para extrair sua imagem depende do registro. Geralmente, as credenciais são as mesmas usadas para o registro por meio da CLI do Docker. Por exemplo, elas seriam as mesmas credenciais usadas para docker login
antes de você extrair a imagem com docker pull
.
Os segredos do vault para autorização de imagem devem ser usados com registros externos, como o Docker Hub. Para repositórios privados no Container Registry, use políticas do serviço IAM baseadas nos controladores de recursos do Container Instances. Para obter mais informações, consulte Exemplos de Política.
Criar Seu Segredo do Vault
Crie um segredo do vault que contenha as credenciais de extração de imagem. O segredo deve ser uma string JSON com os campos username
e password
. Todos os campos adicionais serão ignorados. Anote o OCID do segredo que você cria porque precisará do OCID posteriormente no processo.
Por exemplo, se seu nome de usuário for "container-instance-user" e sua senha for "<example-password>", o segredo será:
{
"username": "container-instance-user",
"password": "<example-password>"
}
Os segredos do vault têm controle de versão. O Container Instances sempre usa a versão mais recente de um segredo.Permitir que Instâncias do Contêiner Leve Segredos do Vault
As instâncias de contêiner que você cria devem ter permissão para ler os segredos do vault fornecidos para autorização de imagem.
- Crie um grupo dinâmico que inclua as instâncias de contêiner que você deseja conceder permissão de leitura.
O exemplo de regra de correspondência de grupo dinâmico a seguir incluirá todas as instâncias de contêiner em sua tenancy.
ALL {resource.type='computecontainerinstance'}
-
Crie uma política que permita ao grupo dinâmico ler os segredos do vault em questão. Especificamente, o grupo deve ser capaz de ler os pacotes secretos do vault.
O exemplo de política a seguir permite que o grupo dinâmico fornecido leia todos os pacotes secretos do vault em sua tenancy. Substitua <dynamic-group-name> pelo nome real do seu grupo dinâmico.
allow dynamic-group <dynamic-group-name> to read secret-bundles in tenancy
Essas políticas são exemplos básicos que dão acesso relativamente amplo. Você pode usar mecanismos de política padrão do IAM para editar essas políticas para criar permissões mais rígidas, como limitar o escopo a instâncias de contêiner ou segredos em um único compartimento. Para obter mais informações, consulte Gerenciando Políticas.
Criar Sua Instância de Contêiner Usando Segredos do Vault para Autorização de Imagem
Se você quiser usar segredos do vault para autorização de imagem, use a API, SDKs ou a CLI do Container Instances.
Ao criar a solicitação para criar a instância do contêiner, forneça uma entrada CreateVaultImagePullSecretDetails
no campo imagePullSecrets
de CreateContainerInstanceDetails
.
O exemplo a seguir mostra um CreateContainerInstanceDetails.
abreviado:
{
"containers": [
{
"imageUrl": "example.registry.io/container-instance-user/example-image:latest",
< ... other fields ... >
}
],
"imagePullSecrets": [
{
"secretType": "VAULT",
"registryEndpoint": "example.registry.io/container-instance-user",
"secretId": "ocid1.vaultsecret.oc1.<region_code>.<unique_ID>"
}
],
< ... other fields ... >
}
Quando o Container Instances extrai a imagem example.registry.io/container-instance-user/example-image:latest
, ele usa as credenciais armazenadas no segredo com o OCID ocid1.vaultsecret.oc1.<region_code>.<unique_ID>
.
Os segredos de extração de imagem são definidos separadamente das especificações do contêiner. Se registryEndpoint
for um prefixo de imageUrl
, será uma correspondência. Várias correspondências são permitidas. Quando o Container Instances extrair a imagem, os segredos de extração da imagem correspondente serão tentados em sequência até que a extração seja bem-sucedida.
No exemplo a seguir, os segredos correspondentes da imagem example.registry.io/abc/one:latest
são secret.ocid.abc
e secret.ocid.one
. E os segredos correspondentes da imagem example.registry.io/abc/two:latest
são secret.ocid.abc
e secret.ocid.two
.
{
"containers": [
{
"imageUrl": "example.registry.io/abc/one:latest"
},
{
"imageUrl": "example.registry.io/abc/two:latest"
},
],
"imagePullSecrets": [
{
"secretType": "VAULT",
"registryEndpoint": "example.registry.io/abc",
"secretId": "secret.ocid.abc"
},
{
"secretType": "VAULT",
"registryEndpoint": "example.registry.io/abc/one",
"secretId": "secret.ocid.one"
},
{
"secretType": "VAULT",
"registryEndpoint": "example.registry.io/abc/two",
"secretId": "secret.ocid.two"
},
]
}