Neste guia, descrevemos como configurar o Acesso baseado no contexto para ajudar a proteger o acesso da conta de serviço às APIs do Google Cloud , com base nos níveis de acesso definidos por você.
Limitações
As seguintes limitações se aplicam às políticas de acesso baseado no contexto para contas de serviço:
Não é possível usar atributos baseados em rede ou endereço IP para vinculações de conta de serviço se a conta for usada para execuções de fluxo de trabalho e o Cloud Scheduler.
As conexões com clusters particulares do GKE, usando
kubectl, e com o Cloud SQL, usando o proxy de autenticação, não podem ser bloqueadas por políticas de acesso baseado no contexto.Se um nível de acesso vinculado a uma conta de serviço tiver atributos não compatíveis, como atributos
Device, o acesso à API será negado.Os níveis de acesso com escopo não são compatíveis com contas de serviço.
Se você usa o Cloud Build e o Cloud Run, recomendamos que você use os seguintes recursos integrados da VPC:
Para o Cloud Run, use o acesso VPC sem servidor.
Para o Cloud Build, use pools particulares.
Antes de começar
- Confira se você tem uma Google Cloud organização e pelo menos um Google Cloud projeto.
- Faça login na sua conta do Google Cloud . Se você começou a usar o Google Cloud, crie uma conta para avaliar o desempenho de nossos produtos em situações reais. Clientes novos também recebem US$ 300 em créditos para executar, testar e implantar cargas de trabalho.
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
-
Instale a CLI do Google Cloud.
-
Ao usar um provedor de identidade (IdP) externo, primeiro faça login na CLI gcloud com sua identidade federada.
-
Para inicializar a CLI gcloud, execute o seguinte comando:
gcloud init -
Crie ou selecione um Google Cloud projeto.
Funções necessárias para selecionar ou criar um projeto
- Selecionar um projeto: não é necessário um papel específico do IAM para selecionar um projeto. Você pode escolher qualquer projeto em que tenha recebido um papel.
-
Criar um projeto: para criar um projeto, é necessário ter o papel de Criador de projetos
(
roles/resourcemanager.projectCreator), que contém a permissãoresourcemanager.projects.create. Saiba como conceder papéis.
-
Crie um projeto do Google Cloud :
gcloud projects create PROJECT_ID
Substitua
PROJECT_IDpor um nome para o projeto Google Cloud que você está criando. -
Selecione o projeto Google Cloud que você criou:
gcloud config set project PROJECT_ID
Substitua
PROJECT_IDpelo nome do projeto do Google Cloud .
-
Verifique se o faturamento está ativado para o projeto do Google Cloud .
- Atualize os componentes da CLI do Google Cloud:
gcloud components update --quiet
- Crie uma conta de serviço no seu projeto se você ainda não tiver uma. Essa conta de serviço é o destino da política de acesso.
Funções exigidas
Nesta seção, descrevemos os papéis do Identity and Access Management (IAM) necessários para usar o acesso baseado no contexto.
Papéis para envolvidos no projeto
Para receber a permissão necessária
no nível do projeto,
peça ao administrador para conceder a você o
papel do IAM de Administrador da conta de serviço (roles/iam.serviceAccountAdmin) na conta de usuário ou de serviço.
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém a permissão the required permissions, que é necessária no nível do projeto.
Também é possível receber essa permissão com papéis personalizados ou outros papéis predefinidos.
Papéis no nível da organização
Para receber a permissão necessária no nível da organização, peça ao administrador para conceder a você os seguintes papéis do IAM na conta de usuário ou de serviço:
- Administrador de vinculação de acesso à nuvem (
roles/accesscontextmanager.gcpAccessAdmin) - Administrador do Access Context Manager (
roles/accesscontextmanager.policyAdmin)
Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.
Esse papel predefinido contém a permissão the required permissions, que é necessária no nível da organização.
Também é possível receber essa permissão com papéis personalizados ou outros papéis predefinidos.
Vincular políticas de acesso a diferentes níveis de recursos
É possível vincular políticas de acesso com o mesmo modo de aplicação a recursos que estão em diferentes níveis da hierarquia de recursos. Quando um recurso tenta acessar, o Acesso baseado no contexto usa a política vinculada a esse recurso antes de tentar usar uma política vinculada a um recurso de nível superior.
Por exemplo, é possível vincular uma política de acesso no modo de aplicação diretamente a uma conta de serviço e outra política no modo de aplicação ao projeto que contém a conta de serviço. Quando a conta de serviço tenta acessar recursos, o Acesso baseado no contexto avalia a política vinculada a ela. Para outras contas de serviço no projeto que não têm políticas de acesso vinculadas, o Acesso baseado no contexto avalia a política de modo de aplicação vinculada ao projeto. O mesmo vale se o modo de aplicação for definido como simulação para a política no nível do projeto e da conta de serviço.
É possível usar várias políticas de acesso para implantar de forma incremental e seletiva. Por exemplo, você pode fazer o seguinte:
- Vincule uma política de acesso no modo de teste no nível do projeto e verifique se ela está funcionando como esperado verificando eventos de acesso negado nos registros de auditoria do Cloud.
- Vincule a política de acesso no modo de aplicação apenas a contas de serviço específicas.
- Vincule a política de acesso no modo de aplicação no nível do projeto e vincule uma política de acesso menos restritiva e no modo de aplicação a contas de serviço específicas, conforme necessário.
Atributos do nível de acesso para contas de serviço
Esta seção lista os níveis de acesso compatíveis com contas de serviço.
Os seguintes atributos são compatíveis com contas de serviço:
- Sub-redes de IP, que são baseadas no endereço IP público.
- Redes VPC, que são baseadas no endereço IP privado.
-
Geolocalização, que é baseada no endereço IP público.
Quando a conta de serviço faz uma solicitação para as APIs do Google Cloud, ela é avaliada pelo Acesso Baseado no Contexto, e o endereço IP da solicitação é comparado aos endereços IP especificados na política do Acesso Baseado no Contexto. Se os endereços IP forem iguais, a chamada de API será permitida. Se o endereço IP não corresponder, a chamada de API será negada.
-
Um nível de acesso personalizado com uma expressão da Common Expression Language (CEL). A expressão precisa ser avaliada como
truepara permitir o acesso efalsepara negar o acesso.A expressão CEL a seguir é útil para restringir o acesso por contas de serviço.
A expressão é avaliada como
truese a solicitação tiver sido originada de um ou mais números de projeto especificados:expression: "originatesFromProjects(origin, [PROJECT_NUMBER, ...])"O
originatesFromProjectsverifica se a solicitação vem de uma rede associada ao projeto especificado e se ela vem de um endereço IP particular. -
Hora do dia, que é baseada na hora e data da solicitação em um fuso horário especificado.
Para mais informações, consulte Como configurar condições de acesso por hora e dia.
Criar um nível de acesso
Nesta seção, descrevemos como criar um nível de acesso na sua organização. Os níveis de acesso definem as condições em que o acesso é permitido.
Siga as instruções para Criar um nível de acesso básico ou Criar um nível de acesso personalizado.
Anote o nome completo da política de acesso, que tem o formato:
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME.
Criar uma vinculação de acesso
Vincule o nível de acesso à conta de serviço selecionada. Isso impõe as condições definidas no nível de acesso. É possível vincular o nível de acesso a uma única conta de serviço ou a todas as contas de serviço em um projeto.
Vincular o nível de acesso a uma conta de serviço específica
Esta seção descreve como vincular o nível de acesso a uma conta de serviço específica.
gcloud
Vincule o nível de acesso a uma conta de serviço usando a CLI gcloud.
gcloud access-context-manager cloud-bindings create \
--organization=ORGANIZATION_ID \
--service-account=SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com \
--level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
Substitua:
ORGANIZATION_ID: o ID da sua organização Google CloudSERVICE_ACCOUNT_NAME: o nome, não o e-mail, da conta de serviço de destinoSERVICE_ACCOUNT_PROJECT_ID: o ID do projeto que contém a conta de serviço de destinoPOLICY_ID: o ID da política de acessoACCESS_LEVEL_NAME: o nome do nível de acesso que você criouPara usar o Acesso baseado no contexto sem aplicar o nível de acesso e negar o acesso, vincule o nível de acesso no modo de simulação.
API REST
Para vincular o nível de acesso a uma conta de serviço específica usando a API REST, execute o seguinte comando:
Crie um arquivo
request.jsoncom o seguinte conteúdo:{ "principal": { "serviceAccount": "SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com" }, "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"] }Substitua:
SERVICE_ACCOUNT_NAME: o nome, não o e-mail, da conta de serviço de destinoSERVICE_ACCOUNT_PROJECT_ID: o ID do projeto que contém a conta de serviço de destinoPOLICY_ID: o ID da política de acessoACCESS_LEVEL_NAME: o nome do nível de acesso que você criou.
Execute este comando:
curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
Substitua:
PROJECT_ID: o ID do projeto que você está usando para fazer as chamadas de API.ORGANIZATION_ID: o ID da sua organização Google Cloud.
Vincular o nível de acesso a todas as contas de serviço em um projeto
Nesta seção, descrevemos como vincular o nível de acesso a todas as contas de serviço em um projeto.
gcloud
Para vincular o nível de acesso a todas as contas de serviço em um projeto usando a CLI gcloud, execute o seguinte comando:
gcloud access-context-manager cloud-bindings create \ --organization=ORGANIZATION_ID \ --service-account-project-number=PROJECT_NUMBER \ --level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
Substitua:
ORGANIZATION_ID: o ID da sua organização Google CloudPROJECT_NUMBER: o número do projeto que contém todas as contas de serviço a que você quer vincular o acesso.POLICY_ID: o ID da política de acessoACCESS_LEVEL_NAME: o nome do nível de acesso que você criou.
API REST
Para vincular o nível de acesso a todas as contas de serviço em um projeto usando a API REST, faça o seguinte:
Crie um arquivo
request.jsoncom o seguinte conteúdo:{ "principal": { "serviceAccountProjectNumber": "PROJECT_NUMBER" }, "accessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"] }Substitua:
PROJECT_NUMBER: o número do projeto que contém todas as contas de serviço a que você quer vincular o acesso.POLICY_ID: o ID da política de acessoACCESS_LEVEL_NAME: o nome do nível de acesso que você criou.
Execute este comando:
curl -H "X-Goog-User-Project: PROJECT_ID" -X POST \ -H "Authorization: Bearer $(gcloud auth print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ -d @request.json \ "https://accesscontextmanager.googleapis.com/v1/organizations/ORGANIZATION_ID/gcpUserAccessBindings"
Substitua:
PROJECT_ID: o ID do projeto que você está usando para fazer as chamadas de APIORGANIZATION_ID: o ID da sua organização Google Cloud
Para usar o Acesso Baseado no Contexto sem aplicar o nível de acesso e negar o acesso, vincule a política de acesso no modo de simulação.
A resposta da API para a operação de criação de vinculação inclui o nome da vinculação, que contém o ID exclusivo dela.
Usar o modo de teste
É possível vincular a política de acesso no modo de teste. Quando você usa o modo de teste, as contas de serviço podem continuar acessando recursos sem aplicação. No entanto, se as contas de serviço tentarem um acesso que viole as políticas de acesso, as violações serão registradas nos registros de auditoria do Cloud.
Vincular políticas de acesso no modo de teste
gcloud
Para vincular políticas de acesso no modo de teste, substitua o parâmetro --level por --dry-run-level, formatado da seguinte maneira:
--dry-run-level=accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
API REST
Para vincular políticas de acesso no modo de simulação, crie o arquivo request.json com
o seguinte conteúdo:
{
"principal": {
"serviceAccountProjectNumber": "TARGET_PROJECT_NUMBER"
},
"dryRunAccessLevels": ["accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME"]
}
Substitua:
TARGET_PROJECT_NUMBER: o número do projeto de destinoPOLICY_ID: o ID da política de acessoACCESS_LEVEL_NAME: o nome do nível de acesso
Verificar os Registros de auditoria do Cloud
Nesta seção, descrevemos como verificar os registros de auditoria do Cloud em busca de negações de acesso no modo de simulação para sua conta de serviço. Para saber mais sobre como pesquisar entradas do modo de simulação nos registros de auditoria do Cloud, consulte Visualizar registros do modo de simulação.
Console
Para ver as negações de acesso à conta de serviço do modo de simulação dos registros de auditoria do Cloud usando o console Google Cloud , faça o seguinte:
No console do Google Cloud , acesse a página Análise de registros:
Acessar a Análise de registros
Se você usar a barra de pesquisa para encontrar essa página, selecione o resultado com o subtítulo Logging.
No console Google Cloud , selecione seu projeto ou organização.
No campo "Consulta de registro", insira a seguinte consulta:
protoPayload.serviceName="contextawareaccess.googleapis.com" protoPayload.metadata.dryRunEvaluationResult:DENIED SEARCH("`SERVICE_ACCOUNT_NAME`")No seletor de período, escolha um período relativo predefinido, como Últimos 30 minutos, Última hora ou Últimas 24 horas, ou especifique um período personalizado.
gcloud
Para ver as negações de acesso à conta de serviço no modo de teste dos Registros de auditoria do Cloud usando a CLI gcloud, faça o seguinte:
gcloud logging read \
'protoPayload.serviceName="contextawareaccess.googleapis.com" AND
protoPayload.metadata.dryRunEvaluationResult:DENIED AND
SEARCH("`SERVICE_ACCOUNT_NAME`")' \
--organization=ORGANIZATION_ID
Substitua:
ORGANIZATION_ID: o ID da organizaçãoSERVICE_ACCOUNT_NAME: o nome da conta de serviço.
O comando gcloud logging read aceita a flag --freshness para ver informações de
registro em períodos relativos. Por exemplo, ao adicionar --freshness=3h ao comando, você pode ver as entradas de registro do modo de simulação nas últimas três horas.
Solução de problemas
Nesta seção, descrevemos como solucionar problemas do Acesso baseado no contexto para contas de serviço.
Solução de problemas gerais
Analise os registros de auditoria do Cloud.
Use a consulta de registro a seguir e analise as entradas de registro para mais informações.
protoPayload.serviceName="contextawareaccess.googleapis.com"
Revise o nome do recurso do nível de acesso que o acesso baseado no contexto informa quando registra eventos de aplicação.
Verifique se o nível de acesso é um recurso no nível da organização.
Verifique se o nível de acesso nas suas políticas de acesso é baseado em atributos compatíveis com contas de serviço.
Verifique se a política de acesso está vinculada à conta de serviço pretendida.
Verifique se a identidade do usuário não está com acesso restrito por uma política de acesso. Isso pode acontecer quando uma identidade de usuário é membro de um Grupo do Google que tem uma política de acesso vinculada. Essa política pode restringir o acesso do usuário, impedindo o fluxo de chamadas para a conta de serviço.
Entre em contato com seu administrador de segurança.
Acesso negado
O acesso foi negado pelos seguintes motivos:
Você vinculou a política de acesso no modo de aplicação, não no modo de teste.
Em vez de aplicar, use o modo de teste para permitir que as contas de serviço acessem recursos e registrem eventos de aplicação sem negar o acesso aos recursos. Além disso, siga as instruções gerais de solução de problemas.
O nível de acesso precisa ser atualizado para incluir mais fontes. Por exemplo, um endereço IP está sendo usado, mas não foi incluído no nível de acesso quando ele foi criado.
A seguir
- Saiba como gerenciar vinculações de acesso.