Chamando Serviços de uma Instância

Este tópico descreve como você pode autorizar instâncias a chamar serviços no Oracle Cloud Infrastructure.

Introdução

Este procedimento descreve como você pode autorizar uma instância a fazer chamadas de API nos serviços do Oracle Cloud Infrastructure. Após configurar os recursos e as políticas obrigatórias, um aplicativo que esteja em execução em uma instância pode chamar serviços públicos do Oracle Cloud Infrastructure, removendo a necessidade de configurar credenciais do usuário ou um arquivo de configuração.

Conceitos

GRUPO DINÂMICO
Os grupos dinâmicos permitem que você agrupe instâncias do Oracle Cloud Infrastructure como atores principais, semelhantes aos grupos de usuários. Em seguida, você pode criar políticas para permitir que instâncias nesses grupos façam chamadas de API em serviços do Oracle Cloud Infrastructure. A associação ao grupo é determinada por um conjunto de critérios que você define, chamados de regras de correspondência.
REGRA DE CORRESPONDÊNCIA
Ao configurar um grupo dinâmico, você também define as regras de associação no grupo. Os recursos que correspondem aos critérios da regra são membros do grupo dinâmico. As regras de correspondência têm uma sintaxe específica que você segue. Consulte Gravando Regras de Correspondência para Definir Grupos Dinâmicos.
PRINCIPAIS DA INSTÂNCIA
O recurso do serviço IAM que permite que instâncias sejam atores autorizados (ou principais) e executem ações nos recursos de serviço. Cada instância de computação tem sua própria identidade e autentica usando os certificados que são adicionados a ela. Esses certificados são criados automaticamente, designados a instâncias e rotacionados, evitando que você distribua as credenciais para seus hosts e as rotacione.

Considerações de Segurança

Qualquer usuário que tenha acesso à instância (que pode acessar a instância via SSH), herdará automaticamente os privilégios concedidos à instância. Antes de conceder permissões a uma instância usando este procedimento, certifique-se de saber quem pode acessá-la e que elas devem ser autorizadas com as permissões que você está concedendo à instância.

Todos os principais da instância de computação recebem a permissão compartment_inspect. Você não pode revogar esta permissão. Esta permissão permite que a instância para o ListCompartments na tenancy recupere as seguintes informações:

  • Nomes de compartimento
  • Descrições do compartimento
  • Tags de formato livre aplicadas a compartimentos
  • Padrões de tag automática aplicados a compartimentos. Essas tags, como CreatedBy e CreatedOn, estão no namespace Oracle-Tag e são adicionadas automaticamente pela Oracle.

Visão Geral do Processo

As etapas a seguir resumem o fluxo do processo para configurar e usar instâncias como principais. As seções subsequentes fornecem mais detalhes.

  1. Crie um grupo dinâmico. Na definição de grupo dinâmico, você fornece as regras de correspondência para especificar quais instâncias você deseja permitir que façam chamadas de API para serviços.

  2. Crie uma política que conceda permissões ao grupo dinâmico para acessar serviços em sua tenancy (ou compartimento).

  3. Um desenvolvedor em sua organização configura o aplicativo criado usando o SDK do Oracle Cloud Infrastructure para autenticação usando o provedor de principais da instância. O desenvolvedor implanta o aplicativo e o SDK em todas as instâncias que pertencem ao grupo dinâmico.

  4. O SDK implantado faz chamadas para APIs do Oracle Cloud Infrastructure, conforme permitido pela política (sem precisar configurar credenciais de API).

  5. Para cada chamada de API feita por uma instância, o serviço Audit registra o evento, gravando o OCID da instância como o valor de principalId no log de eventos. Consulte Conteúdo de um Evento de Log de Auditoria para obter mais informações.

Etapas para Ativar Instâncias para Chamar Serviços

Gravando Políticas para Grupos Dinâmicos

Depois de criar um grupo dinâmico, você precisa criar políticas para permitir que os grupos dinâmicos acessem os serviços do Oracle Cloud Infrastructure.

A política de grupos dinâmicos segue a sintaxe descrita em Como as Políticas Funcionam. Analise esse tópico para entender os recursos básicos da política.

A sintaxe para permitir que um grupo dinâmico acesse recursos em um compartimento é:

Allow dynamic-group <dynamic_group_name> to <verb> <resource-type> in compartment <compartment_name>

A sintaxe para permitir o acesso de um grupo dinâmico a uma tenancy é:

Allow dynamic-group <dynamic_group_name> to <verb> <resource-type> in tenancy

Veja alguns exemplos de políticas:

Para permitir que um grupo dinâmico (FrontEnd) use um balanceador de carga em um compartimento específico (ProjectA):

Allow dynamic-group FrontEnd to use load-balancers in compartment ProjectA

Para permitir que um grupo dinâmico inicie instâncias em um compartimento específico:

Allow dynamic-group FrontEnd to manage instance-family in compartment ProjectA
Allow dynamic-group FrontEnd to use volume-family in compartment ProjectA
Allow dynamic-group FrontEnd to use virtual-network-family in compartment ProjectA

Para obter mais amostra de políticas, consulte Políticas Comuns.

Configurando o SDK, a CLI ou o Terraform

Para obter informações sobre SDKs, consulte Software Development Kits e Interface de Linha de Comandos.

Para o SDK para Java:

No SDK para Java, crie um objeto InstancePrincipalsAuthenticationDetailsProvider. Por exemplo:

public static void main(String[] args) throws Exception {

   InstancePrincipalsAuthenticationDetailsProvider provider =

      InstancePrincipalsAuthenticationDetailsProvider.builder().build();

   IdentityClient identityClient = new IdentityClient(provider);

...

Para o SDK para Python:

Em seu SDK para Python, crie um objeto oci.auth.signers.InstancePrincipalsSecurityTokenSigner. Por 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 do Controlador de Instâncias para a CLI

Para ativar a autorização do controlador de instâncias na CLI, você pode definir a opção de autorização (--auth) em relação a um comando. Por exemplo:

oci os ns get --auth instance_principal

Como alternativa, você pode definir a seguinte variável de ambiente:

OCI_CLI_AUTH=instance_principal

Observe que se ambos forem definidos, o valor definido para --auth prevalecerá sobre a variável de ambiente.

Para obter informações sobre o uso da CLI, consulte Como Trabalhar com a Interface de Linha de Comando.

Ativando a Autorização do Controlador de Instâncias para o Terraform

Para ativar a autorização do controlador de instâncias no Terraform, você pode especificar o atributo auth como "InstancePrincipal" na definição do provedor, conforme mostrado na seguinte amostra:

variable "region" {}

provider "oci" {
   auth = "InstancePrincipal"  
   region = "${var.region}"

}

Observe que quando você usa a autorização de controlador de instâncias, não é necessário incluir os atributos tenancy_ocid, user_ocid, fingerprint e private_key_path.

Perguntas Frequentes

Como faço para consultar o serviço de metadados da instância para consultar o certificado na instância?

Use este comando curl: curl http://169.254.169.254/opc/v1/identity/cert.pem

Com que frequência o certificado é rotacionado em cada instância?

O certificado é rotacionado várias vezes por dia.

O que acontece se eu receber um erro 401-Não Autenticado?
Se você receber um erro 401-Não Autenticado, verifique os seguintes problemas:
  • Tente executar o comando novamente. Às vezes, a rotação do certificado e a solicitação ocorrem ao mesmo tempo.
  • O certificado pode ter expirado. Verifique se o certificado é válido.
Posso alterar a frequência na qual o certificado é rotacionado?

Não. Não é possível alterar a frequência na qual o certificado é rotacionado. No entanto, você pode alterar a política no grupo dinâmico. Se achar que uma instância foi comprometida, você poderá alterar a política no grupo dinâmico para revogar permissões para todos os membros do grupo ou remover a instância do grupo dinâmico. Consulte Posso remover uma instância de um grupo dinâmico?

O que acontece se o certificado for rotacionado no meio de uma operação longa?

A expiração do token é independente do período de expiração do certificado. E também depende do aplicativo com o qual você está interagindo. Por exemplo, se o serviço Object Storage não tiver uma operação PUT multiparte, não importa por quanto tempo a operação será executada.

Os certificados podem ser acessados por todos os usuários de uma instância?

Sim. Certifique-se de que somente usuários que devem receber o acesso concedido ao grupo dinâmico tenham acesso à instância.

Posso remover uma instância de um grupo dinâmico?

Sim. É possível removê-la modificando a regra de correspondência para excluí-la. Veja abaixo um exemplo.

Posso excluir instâncias específicas em um compartimento do grupo dinâmico?

Sim. Por exemplo, suponha que você queira excluir duas instâncias específicas em um compartimento do grupo dinâmico. Grave uma regra de correspondência da seguinte forma:

All {instance.compartment.id = '<compartment_ocid>',
 instance.id != '<instance1_to_exclude_ocid>', instance.id != '<instance2_to_exclude_ocid>'}

A regra acima inclui todas as instâncias do compartimento, exceto aquelas com os OCIDs especificados.