As políticas da organização oferecem controle centralizado e programático sobre os recursos da organização. Como administrador de políticas da organização, é possível configurar políticas em toda a organização para alcançar os seguintes benefícios:
- Centralize o controle para configurar restrições sobre como usar os recursos da sua organização.
- Defina e estabeleça proteções para que suas equipes de desenvolvimento permaneçam dentro dos limites de conformidade.
- Ajudar os proprietários de projetos e as equipes deles a avançar rapidamente sem violar a conformidade.
O Google Distributed Cloud (GDC) com isolamento físico não oferece uma UI do console ou uma CLI dedicada para criar e gerenciar políticas da organização. É preciso usar a API Kubernetes ou a CLI kubectl.
Diferenças do gerenciamento de identidade e acesso
O Identity and Access Management (IAM) e as políticas da organização têm funções complementares de acesso e governança:
- O IAM se concentra na concessão de permissões. Ela define quem (membros como usuários, grupos ou contas de serviço) pode realizar quais ações (papéis) em quais recursos (escopo do recurso). As permissões concedidas por papéis do IAM são aditivas e não têm regras de negação.
- As políticas da organização se concentram em estabelecer proteções. Eles permitem que os administradores configurem restrições programáticas em recursos em toda a organização, como desativar serviços específicos ou restringir modificações de recursos com base em atributos de assunto usando o controle de acesso baseado em atributos (ABAC). As políticas da organização têm precedência para bloquear operações, mesmo que um membro tenha um papel do IAM.
Antes de começar
Antes de configurar as políticas da organização, solicite as permissões necessárias e prepare o ambiente.
Solicitar papéis do IAM
Entre em contato com o admin. da organização do IAM para solicitar os seguintes papéis do IAM com base nas tarefas que você precisa realizar:
- Administrador de políticas de serviço restrito
(
gdchrestrictedservice-policy-admin): criar, atualizar e excluir políticas de serviço restrito. - Administrador da política de restrição por atributos
(
gdchrestrictbyattributes-policy-admin): criar, atualizar e excluir políticas de controle de acesso com base em atributos.
Preparar o ambiente
Faça o download e instale a CLI gdcloud, caso ainda não tenha feito isso.
Gere um arquivo kubeconfig para configurar o acesso à CLI do kubectl.
Configurar uma política
É possível configurar dois tipos de políticas da organização no GDC:
- Política de serviço restrito (
GDCHRestrictedService): restringe quais serviços podem ser usados ou modificados em um cluster. - Política de controle de acesso com base em atributos (
GDCHRestrictByAttributes): restringe condicionalmente o acesso a recursos em um cluster com base em atributos de assunto mapeados do seu provedor de identidade.
Configurar uma política de serviço restrito
O tipo de política GDCHRestrictedService permite restringir quais serviços podem ser usados
ou modificados em um cluster bloqueando APIs específicas, como restringir um serviço a
determinados projetos ou bloquear o acesso a um novo serviço enquanto você o testa. Crie essa política no mesmo cluster que os recursos de serviço. É possível criar várias instâncias de política
em um cluster para diferentes serviços ou projetos.
O GDCHRestrictedService é compatível com as operações CREATE, UPDATE e DELETE. Para restringir as operações de leitura de GET e LIST, use as vinculações de papéis do IAM para conceder e revogar o acesso.
Configure uma política de serviço restrito:
Defina o manifesto da política:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: disabledOperations: - DISABLED_OPERATIONSubstitua:
POLICY_NAME: o nome da política da organização.API_GROUP: o grupo de APIs do serviço a ser restrito, conforme listado na tabela de serviços compatíveis a seguir.KIND: o tipo de recurso a ser restrito, conforme listado na tabela de serviços compatíveis a seguir.DISABLED_OPERATION: os grupos de operações que essa política bloqueia. Os valores permitidos sãoCREATE,UPDATEeDELETE. O valor padrão do campodisabledOperationsé*. Para desativar completamente um serviço, listeCREATE,UPDATEeDELETE(e especifique todos os tipos).
Por padrão, a política se aplica a todos os namespaces no cluster. Para definir o escopo da política para namespaces ou projetos específicos, consulte Definir o escopo de uma política da organização em um cluster.
A política
GDCHRestrictedServiceé compatível com o seguinte subconjunto de serviços no GDC:Serviço Grupo de APIs kinds Marketplace marketplace.gdc.googMarketplaceServiceVertex AI Workbench aiplatform.gdc.googNotebookServiço de banco de dados: Postgres postgresql.dbadmin.gdc.googDBClusterBackupPlanImportRestore
Transfer Appliance system.gpc.gke.ioTransferApplianceRequestBackup backup.gdc.googBackupRepositoryManagerContêiner do Dataproc para Spark (serviço do Marketplace) sparkoperator.k8s.ioSparkApplicationSe um serviço listar vários tipos na tabela (como o Serviço de banco de dados), especifique apenas os tipos individuais que você quer restringir. Por exemplo, é possível bloquear operações
Restoree continuar permitindo operaçõesDBCluster.O exemplo a seguir restringe as atualizações aos serviços do marketplace:
apiVersion: constraints.gatekeeper.sh/v1beta1 kind: GDCHRestrictedService metadata: name: no-update-to-marketplace-service spec: match: kinds: - apiGroups: - "marketplace.gdc.goog" kinds: - MarketplaceService parameters: disabledOperations: - "UPDATE"Aplique a política usando a CLI kubectl:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlSubstitua:
CLUSTER_KUBECONFIG: o arquivo kubeconfig do cluster em que você quer aplicar a política.POLICY_NAME: o nome do arquivo da política da organização
Configurar uma política de controle de acesso baseado em atributos
O tipo de política GDCHRestrictByAttributes permite criar políticas de ABAC para
restringir condicionalmente o acesso a recursos com base em atributos de assunto. Por exemplo,
é possível usar esse tipo de política para restringir operações de gravação ou modificação em buckets de armazenamento,
de modo que apenas usuários ou contas de serviço com atributos de identidade específicos
(como citizenship=USA ou citizenship=UK) possam realizá-las.
Crie essa política no mesmo cluster dos recursos. É possível criar várias instâncias de política em um cluster para diferentes recursos ou projetos.
Configure uma política de controle de acesso baseada em atributos:
Crie um arquivo JSON de patch para mapear atributos de identidade personalizados para o recurso
IdentityProviderConfig:cat <<EOF > attributeMapping-patch.json { "CUSTOM_ATTRIBUTE": "assertion[\"CUSTOM_ATTRIBUTE\"]" } EOFSubstitua
CUSTOM_ATTRIBUTEpelo nome do atributo de identidade a ser mapeado, comocitizenship.Aplique um patch ao recurso
IdentityProviderConfigno namespaceplatform:kubectl --kubeconfig CLUSTER_KUBECONFIG patch \ IdentityProviderConfig IDENTITY_PROVIDER_CONFIG_NAME \ -n platform --type=json \ -p '[{"op":"add","path":"/spec/oidc/attributeMapping", "value": '"$(cat attributeMapping-patch.json)"'}]'Substitua:
CLUSTER_KUBECONFIG: o arquivo kubeconfig do cluster em que o provedor de identidade reside.IDENTITY_PROVIDER_CONFIG_NAME: o nome do recursoIdentityProviderConfig.
Defina o manifesto da política:
apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: POLICY_NAME spec: match: kinds: - apiGroups: - "API_GROUP" kinds: - "KIND" parameters: attributes: - CUSTOM_ATTRIBUTE attributeValues: - ALLOWED_ATTRIBUTE_VALUESubstitua:
POLICY_NAME: o nome da política da organização.API_GROUP: o grupo de APIs dos recursos a serem restringidos, comoobject.gdc.goog.KIND: o tipo de recurso a ser restrito, comoBucket.CUSTOM_ATTRIBUTE: o atributo de assunto personalizado mapeado do provedor de identidade, comocitizenship.ALLOWED_ATTRIBUTE_VALUE: o valor permitido para o atributo personalizado, comoUSA. As solicitações de indivíduos cujo atributo não corresponde a um dos valores permitidos são negadas.
Por padrão, a política se aplica a todos os namespaces no cluster. Para definir o escopo da política para namespaces ou projetos específicos, consulte Definir o escopo de uma política da organização em um cluster.
O exemplo a seguir restringe a modificação de recursos
Bucketno namespaceproject-fooa indivíduos com o atributocitizenship=USAoucitizenship=UK:apiVersion: constraints.global.gatekeeper.sh/v1beta1 kind: GDCHRestrictByAttributes metadata: name: restrict-by-citizenship spec: match: scope: Namespaced kinds: - apiGroups: - "object.gdc.goog" kinds: - Bucket namespaces: - project-foo parameters: attributes: - "citizenship" attributeValues: - "USA" - "UK"Aplique a política usando a CLI kubectl:
kubectl --kubeconfig CLUSTER_KUBECONFIG apply -f POLICY_NAME.yamlSubstitua:
CLUSTER_KUBECONFIG: o arquivo kubeconfig do cluster em que você quer aplicar a política.POLICY_NAME: o nome do arquivo da política da organização
Definir o escopo de uma política da organização em um cluster
Ao definir uma política da organização, decida se ela deve afetar todos os namespaces, apenas namespaces específicos ou todos os namespaces, exceto uma determinada lista. Para
isso, use uma combinação dos parâmetros .spec.match.excludedNamespaces,
.spec.match.namespaceSelector, .spec.match.namespaces e
.spec.match.scope da definição da política.
Leia a página da
seção de correspondência da política da organização
para saber mais sobre esses parâmetros. Por exemplo, para permitir a criação de
bancos de dados apenas em namespaces que tenham o rótulo owner: dba-team, crie a
seguinte política:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: db-restricted-to-dbas
spec:
match:
scope: Namespaced
namespaceSelector:
matchExpressions:
# We are restricting the use of the service in namespaces that
# don't have the owner: dba-team label
- key: owner
operator: NotIn
values:
- dba-team
kinds:
- apiGroups:
- "postgresql.dbadmin.gdc.goog"
kinds:
- DBCluster
- BackupPlan
- Import
- Restore
parameters:
disabledOperations:
- "UPDATE"
- "CREATE"
- "DELETE"
Reverter uma política atual
Para interromper a aplicação de uma política, exclua-a usando a CLI kubectl. Use um
arquivo kubeconfig que dê acesso ao cluster em que a política está
definida e ao papel do IAM correspondente ao tipo de política (como
gdchrestrictedservice-policy-admin ou gdchrestrictbyattributes-policy-admin).
Exclua uma política da organização:
kubectl --kubeconfig CLUSTER_KUBECONFIG delete \
POLICY_TYPE/POLICY_NAME
Substitua:
CLUSTER_KUBECONFIG: o arquivo kubeconfig do cluster em que a política da organização residePOLICY_TYPE: o tipo de política da organização a ser excluída, comoGDCHRestrictedServiceouGDCHRestrictByAttributes.POLICY_NAME: o nome da política da organização a ser excluída.
Testar uma política em um modo de auditoria
É possível testar uma política sem aplicá-la. Teste uma política para garantir que
ela não interrompa os sistemas atuais antes de ser lançada ou para estimar
a abrangência de um comportamento. Para adicionar um teste, adicione um
enforcementAction à definição da política. Há três valores possíveis
para esse parâmetro:
deny: a política é aplicada. Esta é a configuração padrão.dryrun: a ação é permitida, mas é possível ver que há uma violação da política nos registros de auditoria e no status da política. Analise a violação comkubectl --kubeconfig CLUSTER_KUBECONFIG get POLICY_TYPE/POLICY_NAME.warn: equivalente adryrun, exceto que o teste também mostra um aviso em resposta à solicitação que acionou uma violação da política.
Por exemplo, para testar uma política que desativa o Marketplace, crie a seguinte política:
apiVersion: constraints.gatekeeper.sh/v1beta1
kind: GDCHRestrictedService
metadata:
name: disable-marketplace-service-project-alice
spec:
enforcementAction: warn
match:
kinds:
- apiGroups: ["marketplace.gdc.goog"]
kinds: ["MarketplaceService"]