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.
-
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.
-
Crie uma política que conceda permissões ao grupo dinâmico para acessar serviços em sua tenancy (ou compartimento).
-
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.
-
O SDK implantado faz chamadas para APIs do Oracle Cloud Infrastructure, conforme permitido pela política (sem precisar configurar credenciais de API).
-
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
Execute estas tarefas para permitir que uma instância chame serviços:
Criar um Grupo Dinâmico e Regras de Correspondência
Criando um Grupo Dinâmico e Regras de Correspondência
Consulte Gerenciamento de Grupos Dinâmicos.
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
Use este comando curl: curl http://169.254.169.254/opc/v1/identity/cert.pem
O certificado é rotacionado várias vezes por dia.
- 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.
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?
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.
Sim. Certifique-se de que somente usuários que devem receber o acesso concedido ao grupo dinâmico tenham acesso à instância.
Sim. É possível removê-la modificando a regra de correspondência para excluí-la. Veja abaixo um exemplo.
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.