Configurando Instâncias para Serviços de Chamada
Uma instância de computação do Roving Edge pode ser configurada para permitir que os aplicativos em execução na instância chamem serviços e gerenciem recursos semelhantes à maneira como os usuários do Roving Edge chamam serviços para gerenciar recursos.
Um controlador de instâncias é uma instância de computação autorizada a executar ações em recursos de serviço. Os aplicativos em execução em um controlador de instâncias podem chamar serviços e gerenciar recursos de maneira semelhante à forma como os usuários do Oracle Roving Edge chamam serviços para gerenciar recursos. A instância é um ator principal da mesma forma que um usuário é um ator principal. Quando você usa controladores de instância, não precisa configurar credenciais de usuário ou um arquivo de configuração na instância para executar aplicativos que precisam gerenciar recursos de serviço.
Para conceder autorizações a um controlador de instâncias, inclua a instância como membro de um grupo dinâmico. Um grupo dinâmico fornece autorizações para instâncias da mesma forma que um grupo de usuários fornece autorizações para usuários.
O recurso de serviço IAM que permite que as instâncias sejam atores autorizados (ou controladores) para executar ações nos recursos de serviço é chamado de controlador de instâncias.
Execute as seguintes etapas para configurar e usar uma instância como principal:
-
Configure o firewall da instância para permitir que a instância acesse pontos finais de serviço. Consulte Configurando Firewalls de Instância para Permitir Serviços de Chamada.
-
Certifique-se de que a instância esteja incluída em um grupo dinâmico que conceda permissões para acessar os recursos necessários. Consulte Criando e Gerenciando Grupos Dinâmicos.
A instância deve ser criada ou movida para um compartimento que seja nomeado em uma regra de correspondência do grupo dinâmico ou a instância deve ter uma tag de recurso designada que seja nomeada em uma regra de correspondência. Consulte Escrevendo Regras de Correspondência.
Configurando Firewalls de Instância para Permitir Serviços de Chamada
Este tópico descreve como modificar a configuração do firewall da instância e como criar um serviço systemd para restaurar as alterações se o sistema for reinicializado.
Modificar a Configuração de Firewall
Como usuário privilegiado, modifique a configuração do firewall da instância para permitir que a instância acesse pontos finais de serviço, como iaas e identity.
Use o comando iptables para adicionar as seguintes regras do BareMetalInstanceServices ao firewall de instância:
iptables -I BareMetalInstanceServices 14 -p tcp -d 169.254.169.254 --dport 443 -j ACCEPT
iptables -I BareMetalInstanceServices 14 -p tcp -d 169.254.240.254 --dport 443 -j ACCEPT
A primeira entrada é obrigatória para todos os pontos finais. A segunda entrada é necessária para entrar em contato com o ponto final do Object Storage.
Tornar as Alterações de Configuração Persistentes
Use o procedimento a seguir para fazer com que essas alterações de configuração do firewall persistam nas reinicializações da instância.
-
Salve a configuração atualizada das tabelas IP.
iptables-save > /etc/sysconfig/iptables.rules -
Criar um script para restaurar automaticamente a configuração atual do firewall (modificado) na reinicialização.
Neste exemplo, o script é chamado
/sbin/restore-iptables.sh. Este é o conteúdo do arquivo/sbin/restore-iptables.sh:#!/bin/sh /sbin/iptables-restore < /etc/sysconfig/iptables.rules -
Defina o bit executável no script.
chmod +x /sbin/restore-iptables.sh -
Crie um serviço
systemd oneshotpara executar o script/sbin/restore-iptables.shno momento da inicialização.Neste exemplo, o serviço é chamado
/etc/systemd/system/restore-iptables.service. Este é o conteúdo do arquivo/etc/systemd/system/restore-iptables.service:[Unit] Description=Restore IP Tables After=cloud-final.service [Service] ExecStart=/sbin/restore-iptables.sh User=root Group=root Type=oneshot [Install] WantedBy=multi-user.target -
Recarregue a configuração do gerenciador
systemde ative o serviço a ser executado no momento da inicialização.systemctl daemon-reload systemctl enable restore-iptables
Configurando Certificados de Instância para Permitir Serviços de Chamada
Por padrão, os pontos finais do Roving Edge (como iaas e identity) oferecem um certificado assinado por uma CA específica desse dispositivo. Por padrão, os sistemas operacionais não confiam em certificados assinados por uma CA específica desse Roving Edge. Se o sistema operacional não confiar nos certificados oferecidos, as tentativas de usar o OCI SDK ou a CLI falharão com um erro CERTIFICATE_VERIFY_FAILED.
Implemente uma das soluções descritas neste tópico para usar com sucesso o OCI SDK ou a CLI na instância.
Qualquer usuário que possa usar o SSH na instância herda automaticamente os privilégios concedidos à instância.
Opção 1: BYOC (Bring Your Own Certificate)
Se você tiver um certificado assinado por uma CA na qual seu sistema operacional confia, configure o Roving Edge para oferecer esse certificado.
Em um sistema operacional Linux, o seguinte comando lista CAs confiáveis por padrão:
trust list --filter=ca-anchors
Para obter informações sobre como fornecer seu próprio certificado, consulte "Accessing External Interfaces with Your CA Trust Chain".
Opção 2: Especificar no Código SDK o Pacote de CAs a Ser Usado
Esse método copia o bundle de CAs específico do appliance para a instância, mas não verifica o certificado do servidor (--insecure). Para garantir a segurança, verifique o conteúdo do pacote recuperado (external_ca.crt).
-
Recupere o certificado do ponto final
iaasdo appliance.curl --insecure -sS -o external_ca.crt --noproxy "*" https://iaas.pca_name.domain_name/cachainEsse comando pode estar em um script que é passado para a instância no momento da inicialização usando a opção
--user-data-fileou a opção--metadatacom um campouser_data. O script será executado por cloud-init dentro da instância durante a inicialização, salvando o esforço de recuperar manualmente esse arquivo de certificado em um grande número de instâncias. -
Verifique o conteúdo do bundle de CAs salvo no arquivo
external_ca.crt. -
Especifique o bundle de CAs no código SDK do Python.
signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner( federation_client_cert_bundle_verify="/home/opc/external_ca.crt" ) identity_client = oci.identity.IdentityClient(config={}, signer=signer) identity_client.base_client.session.verify = "/home/opc/external_ca.crt"
Opção 3: Confiar Globalmente no Pacote de CAs do Roving Edge
Esse método é igual ao método anterior com a seguinte diferença: em vez de especificar o bundle de CAs no código do SDK, esse método adiciona o bundle de CAs à cadeia de confiança.
Quando o bundle de CAs é adicionado à cadeia de confiabilidade, cada aplicativo desta instância de computação confiará em certificados assinados com a CA especificada neste bundle. Considere se este é um risco de segurança aceitável.
-
Recupere o certificado do ponto final
iaasdo appliance.curl --insecure -sS -o external_ca.crt --noproxy "*" https://iaas.pca_name.domain_name/cachain -
Verifique o conteúdo do bundle de CAs salvo no arquivo
external_ca.crt. -
Atualize a cadeia de confiabilidade global da CA.
cp external_ca.crt /etc/pki/ca-trust/source/anchors/ update-ca-trust extract
As etapas 1 e 3 desse método podem estar em um script que é passado para a instância no momento da inicialização usando a opção --user-data-file ou a opção --metadata com um campo user_data. O script será executado pelo cloud-init dentro da instância durante a inicialização, poupando o esforço de executar essas etapas manualmente em um grande número de instâncias.
Configurando o Python SDK e a CLI para Controladores de Instâncias
Este tópico descreve como ativar a autorização do controlador de instâncias para o SDK Python, a CLI ou o Terraform.
Ativando a Autorização do Controlador de Instâncias para o Python SDK
No SDK para Python, crie um objeto oci.auth.signers.InstancePrincipalsSecurityTokenSigner conforme mostrado no seguinte exemplo:
# By default this will hit the auth service in the region returned by http://169.254.169.254/opc/v1/instance/region on the instance.
signer = oci.auth.signers.InstancePrincipalsSecurityTokenSigner()
identity_client = oci.identity.IdentityClient(config={}, signer=signer)
Para atualizar o token sem aguardar, use o seguinte comando:
signer.refresh_security_token()
Ativando a Autorização Principal da Instância para a CLI
Defina a opção de autorização (--auth) para um comando, conforme mostrado no seguinte exemplo:
oci os ns get --auth instance_principal
Como alternativa, defina a seguinte variável de ambiente:
OCI_CLI_AUTH=instance_principal
Se ambos forem definidos, o valor definido para --auth terá precedência sobre a variável de ambiente.
Ativando a Autorização Principal da Instância para o Terraform
Defina o atributo auth como "InstancePrincipal" na definição do provedor, conforme mostrado no seguinte exemplo:
variable "region" {}
provider "oci" {
auth = "InstancePrincipal"
region = "${var.region}"
}
Quando você usa a autorização do controlador de instâncias, não precisa incluir os atributos tenancy_ocid, user_ocid, fingerprint e private_key_path.