Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
secure:
ingress:
hostname: <immuta-fqdn>
annotations:
nginx.ingress.kubernetes.io/auth-tls-secret: <namespace>/<secret-name>kubectl create secret tls <secret-name> --cert=path/to/tls.cert --key=path/to/tls.keyhelm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20secure:
ingress:
hostname: <immuta-fqdn>
annotations:
ingress.gcp.kubernetes.io/pre-shared-cert: <certificate-name>helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20secure:
ingress:
hostname: <immuta-fqdn>
annotations:
alb.ingress.kubernetes.io/certificate-arn: <certificate-arn>helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20secure:
ingress:
hostname: <immuta-fqdn>
annotations:
appgw.ingress.kubernetes.io/appgw-ssl-certificate: <certificate-name>helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20secure:
ingress:
annotations:
traefik.ingress.kubernetes.io/router.tls: "true"
hostname: <immuta-fqdn>
tls: true
# If left unset the TLS secret name defaults to <hostname>-tls
secretName: <secret-name>kubectl create secret tls <secret-name> --cert=path/to/tls.cert --key=path/to/tls.keyhelm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20kubectl edit secret/immuta-secretcache:
enabled: false
secure:
extraConfig:
server:
cache:
provider:
constructor: catbox-redis
options:
host: <redis-fqdn>
port: <port>
# Setting options.tls to an empty dict enables TLS without configuring any other options.
tls: {}
# Dict representation of TLS config options json-object for package ioredis
# https://github.com/redis/ioredis
#
# tls:
# ca:
# key:
# cert:
extraEnvVars:
- name: IMMUTA_SERVER_CACHE_PROVIDER_OPTIONS_PASSWORD
valueFrom:
secretKeyRef:
key: IMMUTA_SERVER_CACHE_PROVIDER_OPTIONS_PASSWORD
name: immuta-secretcache:
enabled: false
secure:
extraConfig:
server:
cache:
provider:
constructor: catbox-memcached
options:
host: <memcached-fqdn>
port: <port>helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20global:
imageRegistry: <private-registry-fqdn>
secure:
backgroundWorker:
image:
repository: <prefix>/immuta-service
web:
image:
repository: <prefix>/immuta-servicecomputerScientists:
- Alan Turing
- Grace Hopper
- Donald Knuth
- Tim Berners-Lee
- John McCarthy
- <first-name> <last-name>computerScientists:
- Alan Turing
- Grace Hopper
- Donald Knuth
- Tim Berners-Lee
- John McCarthy
- Margaret Hamilton<property>
<name>immuta.spark.require.equalization</name>
<value>true</value>
</property>Your guide to discovering, securing, and monitoring your data with Immuta.




echo <token> | helm registry login --password-stdin --username <username> ocir.immuta.comkubectl create namespace immutakubectl config set-context --current --namespace=immutakubectl create secret docker-registry immuta-oci-registry \
--docker-server=https://ocir.immuta.com \
--docker-username="<username>" \
--docker-password="<token>" \
[email protected]kubectl run pgclient \
--stdin \
--tty \
--rm \
--image docker.io/bitnami/postgresql -- \
psql --host <postgres-fqdn> --username <postgres-admin> --dbname postgres --port 5432 --passwordCREATE ROLE immuta with login encrypted password '<postgres-password>';
GRANT immuta TO CURRENT_USER;
CREATE DATABASE immuta OWNER immuta;
GRANT all ON DATABASE immuta TO immuta;
ALTER ROLE immuta SET search_path TO bometadata,public;global:
imageRegistry: ocir.immuta.com
imagePullSecrets:
- name: immuta-oci-registry
imageRepositoryMap:
immuta/immuta-service: stable/immuta-service
immuta/immuta-db: stable/immuta-db
immuta/immuta-fingerprint: stable/immuta-fingerprint
immuta/audit-service: stable/audit-service
immuta/audit-export-cronjob: stable/audit-export-cronjob
immuta/classify-service: stable/classify-service
immuta/cache: stable/cache
audit:
config:
databaseConnectionString: postgres://immuta:<postgres-password>@<postgres-fqdn>:5432/immuta?schema=audit
elasticsearchEndpoint: <elasticsearch-endpoint>
elasticsearchUsername: <elasticsearch-username>
elasticsearchPassword: <elasticsearch-password>
secure:
ingress:
enabled: false
tls: false
extraEnvVars:
- name: FeatureFlag_AuditService
value: "true"
- name: FeatureFlag_detect
value: "true"
- name: FeatureFlag_auditLegacyViewHide
value: "true"
postgresql:
host: <postgres-fqdn>
port: 5432
database: immuta
username: immuta
password: <postgres-password>
ssl: truehelm install immuta oci://ocir.immuta.com/stable/immuta-enterprise \
--values immuta-values.yaml \
--version 2024.2.20kubectl wait --for=condition=Ready pods --allkubectl get service --selector "app.kubernetes.io/component=secure" --output namekubectl port-forward service/<name> 8080:httpecho <token> | helm registry login --password-stdin --username <username> ocir.immuta.comoc new-project immutaoc get project immuta --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'oc get project immuta --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'oc run pgclient \
--stdin \
--tty \
--rm \
--image docker.io/bitnami/postgresql -- \
psql --host <postgres-fqdn> --username <postgres-admin> --dbname postgres --port 5432 --passwordCREATE ROLE immuta with login encrypted password '<postgres-password>';
GRANT immuta TO CURRENT_USER;
CREATE DATABASE immuta OWNER immuta;
GRANT all ON DATABASE immuta TO immuta;
ALTER ROLE immuta SET search_path TO bometadata,public;global:
imageRegistry: ocir.immuta.com
imagePullSecrets:
- name: immuta-oci-registry
imageRepositoryMap:
immuta/immuta-service: stable/immuta-service
immuta/immuta-db: stable/immuta-db
immuta/immuta-fingerprint: stable/immuta-fingerprint
immuta/audit-service: stable/audit-service
immuta/audit-export-cronjob: stable/audit-export-cronjob
immuta/classify-service: stable/classify-service
immuta/cache: stable/cache
audit:
config:
databaseConnectionString: postgres://immuta:<postgres-password>@pg-db-postgresql.immuta.svc.cluster.local:5432/immuta?schema=audit
elasticsearchEndpoint: http://es-db-elasticsearch.immuta.svc.cluster.local:9200
elasticsearchUsername: <elasticsearch-username>
elasticsearchPassword: <elasticsearch-password>
deployment:
podSecurityContext:
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'
runAsUser: <user-id>
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'
runAsGroup: <group-id>
seccompProfile:
type: RuntimeDefault
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
discover:
deployment:
podSecurityContext:
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'
runAsUser: <user-id>
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'
runAsGroup: <group-id>
seccompProfile:
type: RuntimeDefault
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
secure:
extraEnvVars:
- name: FeatureFlag_AuditService
value: "true"
- name: FeatureFlag_detect
value: "true"
- name: FeatureFlag_auditLegacyViewHide
value: "true"
ingress:
enabled: false
tls: false
postgresql:
host: <postgres-fqdn>
port: 5432
database: immuta
username: immuta
password: <postgres-password>
ssl: false
web:
podSecurityContext:
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'
runAsUser: <user-id>
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'
runAsGroup: <group-id>
seccompProfile:
type: RuntimeDefault
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
backgroundWorker:
podSecurityContext:
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'
runAsUser: <user-id>
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'
runAsGroup: <group-id>
seccompProfile:
type: RuntimeDefault
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALLhelm install immuta oci://ocir.immuta.com/stable/immuta-enterprise \
--values immuta-values.yaml \
--version 2024.2.20oc wait --for=condition=Ready pods --alloc get service --selector "app.kubernetes.io/component=secure" --output nameoc port-forward service/<name> 8080:httpecho <token> | helm registry login --password-stdin --username <username> ocir.immuta.comkubectl create namespace immutakubectl config set-context --current --namespace=immutakubectl create secret docker-registry immuta-oci-registry \
--docker-server=https://ocir.immuta.com \
--docker-username="<username>" \
--docker-password="<token>" \
[email protected]master:
masterOnly: false
replicaCount: 1
data:
replicaCount: 0
coordinating:
replicaCount: 0
ingest:
replicaCount: 0helm install es-db oci://registry-1.docker.io/bitnamicharts/elasticsearch \
--values es-values.yamlauth:
database: immuta
username: immuta
password: <postgres-password>helm install pg-db oci://registry-1.docker.io/bitnamicharts/postgresql \
--values pg-values.yamlglobal:
imageRegistry: ocir.immuta.com
imagePullSecrets:
- name: immuta-oci-registry
imageRepositoryMap:
immuta/immuta-service: stable/immuta-service
immuta/immuta-db: stable/immuta-db
immuta/immuta-fingerprint: stable/immuta-fingerprint
immuta/audit-service: stable/audit-service
immuta/audit-export-cronjob: stable/audit-export-cronjob
immuta/classify-service: stable/classify-service
immuta/cache: stable/cache
audit:
config:
# Each Kubernetes Service has a DNS record associated with it. See: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
# The anatomy of a domain name is as follows:
# <service>.<namespace>.svc.<cluster-domain>
#
# Where the default cluster domain is: cluster.local
databaseConnectionString: postgres://immuta:<postgres-password>@pg-db-postgresql.immuta.svc.cluster.local:5432/immuta?schema=audit
elasticsearchEndpoint: http://es-db-elasticsearch.immuta.svc.cluster.local:9200
elasticsearchUsername: <elasticsearch-username>
elasticsearchPassword: <elasticsearch-password>
secure:
ingress:
enabled: false
extraEnvVars:
- name: FeatureFlag_AuditService
value: "true"
- name: FeatureFlag_detect
value: "true"
- name: FeatureFlag_auditLegacyViewHide
value: "true"
postgresql:
# Each Kubernetes Service has a DNS record associated with it. See: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
# The anatomy of a domain name is as follows:
# <service>.<namespace>.svc.<cluster-domain>
#
# Where the default cluster domain is: cluster.local
host: pg-db-postgresql.immuta.svc.cluster.local
port: 5432
database: immuta
username: immuta
password: <postgres-password>helm install immuta oci://ocir.immuta.com/stable/immuta-enterprise \
--values immuta-values.yaml \
--version 2024.2.20kubectl wait --for=condition=Ready pods --allkubectl get service --selector "app.kubernetes.io/component=secure" --output namekubectl port-forward service/<name> 8080:httpexport IMMUTA_VERSION=2024.2.20
export IMMUTA_IMAGES="audit-service audit-export-cronjob cache classify-service immuta-service"
export IMMUTA_LEGACY_IMAGES="immuta-db immuta-fingerprint"
for image in ${IMMUTA_IMAGES} ${IMMUTA_LEGACY_IMAGES}; do
skopeo copy docker://ocir.immuta.com/stable/${image}:${IMMUTA_VERSION} docker-archive://${PWD}/${image}-${IMMUTA_VERSION}.tar;
doneecho <token> | helm registry login --password-stdin --username <username> ocir.immuta.comhelm pull oci://ocir.immuta.com/stable/immuta-enterprise --version 2024.2.20export PRIVATE_REGISTRY=your.private-registry.com
export IMMUTA_VERSION=2024.2.20
export IMMUTA_IMAGES="audit-service audit-export-cronjob cache classify-service immuta-service"
export IMMUTA_LEGACY_IMAGES="immuta-db immuta-fingerprint"
for image in ${IMMUTA_IMAGES} ${IMMUTA_LEGACY_IMAGES}; do
skopeo copy docker-archive://${PWD}/${image}-${IMMUTA_VERSION}.tar docker://${PRIVATE_REGISTRY}/immuta/${image}:${IMMUTA_VERSION};
donehelm upgrade --install immuta ./immuta-enterprise-2024.2.20.tgz -f immuta-values.yamlmkdir ./offline-kithelm pull oci://ocir.immuta.com/stable/immuta-enterprise --destination ./offline-kit --version 2024.3.9tar --extract --gzip --strip-components=1 --directory=./offline-kit --file=./immuta-enterprise-*.tgz immuta-enterprise/DIGESTS.mdskopeo copy docker-archive:offline-kit/<name>-<tag>.tar docker://<private-registry-fqdn>/immuta/<name>:<tag>echo <token> | helm registry loginkubectl create namespace immutakubectl config set-context --current --namespace=immutakubectl create secret docker-registry immuta-oci-registry \
--docker-server=https://ocir.immuta.com \
--docker-username="<username>" \
--docker-password="<token>" \
[email protected]kubectl run pgclient \
--stdin \
--tty \
--rm \
--image docker.io/bitnami/postgresql -- \
psql --host <postgres-fqdn> --username postgres --port 5432 --passwordCREATE ROLE immuta with login encrypted password '<postgres-password>';
GRANT immuta TO CURRENT_USER;
CREATE DATABASE immuta OWNER immuta;
GRANT all ON DATABASE immuta TO immuta;
ALTER ROLE immuta SET search_path TO bometadata,public;global:
imageRegistry: ocir.immuta.com
imagePullSecrets:
- name: immuta-oci-registry
imageRepositoryMap:
immuta/immuta-service: stable/immuta-service
immuta/immuta-db: stable/immuta-db
immuta/immuta-fingerprint: stable/immuta-fingerprint
immuta/audit-service: stable/audit-service
immuta/audit-export-cronjob: stable/audit-export-cronjob
immuta/classify-service: stable/classify-service
immuta/cache: stable/cache
audit:
enabled: false
secure:
ingress:
enabled: false
tls: false
extraEnvVars:
- name: FeatureFlag_AuditService
value: "false"
- name: FeatureFlag_detect
value: "false"
- name: FeatureFlag_auditLegacyViewHide
value: "false"
postgresql:
host: <postgres-fqdn>
port: 5432
database: immuta
username: immuta
password: <postgres-password>
ssl: truehelm install immuta immuta/immuta-enterprise \
--values immuta-values.yamlkubectl wait --for=condition=Ready pods --allkubectl get service --selector "app.kubernetes.io/component=secure" --output template='{{ .metadata.name }}'kubectl port-forward service/<name> 8080:httpsecure:
ingress:
hostname: <immuta-fqdn>
ingressClassName: nginx
annotations:
nginx.ingress.kubernetes.io/force-ssl-redirect: 'true'
nginx.ingress.kubernetes.io/proxy-body-size: '64m'helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20secure:
ingress:
hostname: <immuta-fqdn>
annotations:
# Determines which type of load balancer is provisioned
# gce-internal
# gce
kubernetes.io/ingress.class: gce
# Listen on both 80 and 443
kubernetes.io/ingress.allow-http: 'true'
# Redirect traffic from 80 to 443
cloud.google.com/frontend-config: immutaapiVersion: networking.gke.io/v1beta1
kind: FrontendConfig
metadata:
name: immuta
spec:
redirectToHttps:
enabled: true
responseCodeName: RESPONSE_CODEkubectl apply -f frontendconfig.yamlsecure:
ingress:
hostname: <immuta-fqdn>
ingressClassName: alb
annotations:
# Determines which type of load balancer is provisioned
# internal
# internet-facing
alb.ingress.kubernetes.io/scheme: internet-facing
alb.ingress.kubernetes.io/target-type: ip
# Listen on both 80 and 443
alb.ingress.kubernetes.io/listen-ports: '[{"HTTP": 80}, {"HTTPS":443}]'
# Redirect traffic from 80 to 443
alb.ingress.kubernetes.io/ssl-redirect: '443'helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20secure:
ingress:
hostname: <immuta-fqdn>
ingressClassName: webapprouting.kubernetes.azure.com
# https://azure.github.io/application-gateway-kubernetes-ingress/annotations/
annotations:
appgw.ingress.kubernetes.io/ssl-redirect: 'true'helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20secure:
ingress:
hostname: <immuta-fqdn>
ingressClassName: traefik
annotations:
# Listen on ports 80 and 443
traefik.ingress.kubernetes.io/router.entrypoints: web,websecure
# Redirect HTTP to HTTPS
# When referencing middleware you must prefix the name with its namespace
# <namespace>-<middleware-name>@kubernetescrd
traefik.ingress.kubernetes.io/router.middlewares: immuta-https-redirectscheme@kubernetescrdapiVersion: traefik.containo.us/v1alpha1
kind: Middleware
metadata:
name: https-redirectscheme
spec:
redirectScheme:
scheme: https
permanent: truekubectl apply -f middleware.yamlsecure:
ingress:
enabled: falseoc get service --selector "app.kubernetes.io/component=secure" --output template='{{ .metadata.name }}'audit:
worker:
replicaCount: 1
resources:
requests:
cpu: 1000m
memory: 1024Mi
limits:
cpu: 1000m
memory: 2048Mi
deployment:
replicaCount: 1
resources:
requests:
cpu: 1000m
memory: 4096Mi
limits:
cpu: 3000m
memory: 8192Mi
secure:
backgroundWorker:
replicaCount: 2
resources:
requests:
cpu: 1000m
memory: 4096Mi
limits:
cpu: 4000m
memory: 4096Mi
web:
replicaCount: 2
resources:
requests:
cpu: 1000m
memory: 4096Mi
limits:
cpu: 4000m
memory: 4096Mi
discover:
deployment:
replicaCount: 1
resources:
requests:
cpu: 500m
memory: 4096Mi
limits:
cpu: 3000m
memory: 4096Mi
cache:
deployment:
replicaCount: 1
resources:
requests:
cpu: 500m
memory: 512Mi
limits:
cpu: 1000m
memory: 512Mi# audit
ELASTICSEARCH_USERNAME=<elasticsearch-username>
ELASTICSEARCH_PASSWORD=<elasticsearch-password>
# PostgreSQL connection string used by audit for the metadata database
# postgresql://<user>:<password>@<postgres-fqdn>:5432/<database>?schema=audit
#
# More info
# https://www.postgresql.org/docs/current/libpq-connect.html#LIBPQ-CONNSTRING
DATABASE_CONNECTION_STRING=postgresql://immuta:<postgres-password>@<postgres-fqdn>:5432/immuta?schema=audit
# secure
IMMUTA_DATABASES_IMMUTA_CONNECTIONS_IMMUTADB_PASSWORD=<postgres-password>kubectl create secret generic immuta-secret --from-env-file=secret-data.envaudit:
#...
deployment:
existingSecret: immuta-secret
export:
cronJob:
existingSecret: immuta-secret
secure:
#...
existingSecret:
name: immuta-secret
# Optional. Map expected keys with keys in existing secret
# keyMapping: {}helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20kubectl get secret/immuta-secretkubectl edit secret/immuta-secretkubectl edit secret/immuta-legacy-secretkubectl rollout restart deployment --all --selector "app.kubernetes.io/component=audit,app.kubernetes.io/component=secure"kubectl get secret/immuta-legacy-secretkubectl get statefulset --selector "app.kubernetes.io/component=query-engine" --output namekubectl scale statefulset --all --replicas 1 --selector "app.kubernetes.io/component=query-engine"helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20kubectl get secret/immuta-secret# query-engine
IMMUTA_FEATURE_PASSWORD=<immuta-feature-password>
PATRONI_SUPERUSER_PASSWORD=<patroni-superuser-password>
PATRONI_REPLICATION_PASSWORD=<patroni-replication-password>
PATRONI_RESTAPI_PASSWORD=<patroni-api-password>kubectl create secret generic immuta-legacy-secret --from-env-file=secret-data.envlegacy:
enabled: true
queryEngine:
statefulset:
extraEnvVars:
- name: IMMUTA_FEATURE_PASSWORD
valueFrom:
secretKeyRef:
name: immuta-legacy-secret
key: IMMUTA_FEATURE_PASSWORD
- name: PATRONI_SUPERUSER_PASSWORD
valueFrom:
secretKeyRef:
name: immuta-legacy-secret
key: PATRONI_SUPERUSER_PASSWORD
- name: PATRONI_REPLICATION_PASSWORD
valueFrom:
secretKeyRef:
name: immuta-legacy-secret
key: PATRONI_REPLICATION_PASSWORD
- name: PATRONI_RESTAPI_PASSWORD
valueFrom:
secretKeyRef:
name: immuta-legacy-secret
key: PATRONI_RESTAPI_PASSWORD
postgres:
# Query Engine feature user
# Instead use queryEngine.statefulset.extraEnvVars[].name[IMMUTA_FEATURE_PASSWORD]
# password: <immuta-feature-password>
# Query Engine superuser user
# Instead use queryEngine.statefulset.extraEnvVars[].name[PATRONI_SUPERUSER_PASSWORD]
# superuserPassword: <patroni-superuser-password>
# Query Engine replication user
# Instead use queryEngine.statefulset.extraEnvVars[].name[PATRONI_REPLICATION_PASSWORD]
# replicationPassword: <patroni-replication-password>
# Query Engine patroni api user
# Instead use queryEngine.statefulset.extraEnvVars[].name[PATRONI_RESTAPI_PASSWORD]
# patroniApiPassword: <patroni-api-password>
immutaSecurity:
# Each Kubernetes Service has a DNS record associated with it. See: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
# The anatomy of a domain name is as followed:
# <service>.<namespace>.svc.<cluster-domain>
#
# Where the default cluster domain is: cluster.local
authEndpoint: "http://immuta-secure.immuta.svc.cluster.local:8823"
secure:
extraEnvVars:
- name: IMMUTA_DATABASES_IMMUTA_CONNECTIONS_FEATURESTOREDB_PASSWORD
valueFrom:
secretKeyRef:
name: immuta-legacy-secret
key: IMMUTA_FEATURE_PASSWORD
extraConfig:
queryEngineRehydration:
enabled: true
disableFeatureStore: false
databases:
immuta:
connections:
featureStoreDb:
# Each Kubernetes Service has a DNS record associated with it. See: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
# The anatomy of a domain name is as followed:
# <service>.<namespace>.svc.<cluster-domain>
#
# Where the default cluster domain is: cluster.local
host: "immuta-legacy-query-engine-service.immuta.svc.cluster.local"
port: 5432
ssl: false
# Query Engine feature user
# Instead use secure.extraEnvVars[].name[IMMUTA_DATABASES_IMMUTA_CONNECTIONS_FEATURESTOREDB_PASSWORD]
# password: <immuta-feature-password>
fingerprints:
# Each Kubernetes Service has a DNS record associated with it. See: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
# The anatomy of a domain name is as follows:
# <service>.<namespace>.svc.<cluster-domain>
#
# Where the default cluster domain is: cluster.local
uri: "http://immuta-legacy-fingerprint-service.immuta.svc.cluster.local:5001/"
queryEngineHost: "immuta-legacy-query-engine-service.immuta.svc.cluster.local"
queryEnginePort: 5432helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20helm get metadata --output yaml <helm-release-name>kubectl get pod --selector "app.kubernetes.io/component=database" --output namekubectl exec --stdin --tty <metadata-database-pod-name> -- shpg_dump --dbname=bometadata --file=/tmp/bometadata.dump --format=custom --no-owner --no-privilegeskubectl run immuta-setup-db --stdin --tty --rm --image docker.io/bitnami/postgresql:latest -- shpsql --host <postgres-fqdn> --username <postgres-admin> --dbname postgres --port 5432 --passwordkubectl run immuta-restore-db --image docker.io/bitnami/postgresql:latest -- sleep infinitykubectl cp bometadata.dump immuta-restore-db:/tmpmv immuta-values.yaml immuta-values.ihc.yamlkubectl run debug-dns --stdin --tty --rm --image docker.io/rockylinux/rockylinux:9 -- shdnf install bind-utilsdig <fqdn>helm list --all-namespaces --output json | jq '.[]|select(.chart | startswith("immuta"))'immuta-values.yaml Helm values file. How do I recover this file?helm get values <release-name> > immuta-values.yaml--namespace every time I run a Helm command. How do I set a default?kubectl config set-context --current --namespace=<name>kubectl run debug-postgres --stdin --tty --rm --image docker.io/bitnami/postgresql:latest -- shpg_isready --host <postgres-fqdn> --port 5432kubectl run debug-redis --stdin --tty --rm --image docker.io/rockylinux/rockylinux:9 -- shnc -zv <redis-fqdn> 6379kubectl run debug-redis --stdin --tty --rm --image docker.io/bitnami/redis:latest -- shredis-cli -h <redis-fqdn> -p 6379kubectl run debug-elasticsearch --stdin --tty --rm --image docker.io/rockylinux/rockylinux:9 -- shdnf install curlcurl --fail --request GET "http://<elasticsearch-fqdn>:9200/_cluster/health?pretty"{
"id": "c8e020cb-232c-4ba9-a0d8-f3a84ba6808d",
"dateTime": "1670355170336",
"month": 1475,
"profileId": 1,
"userId": "immuta_system_account",
"dataSourceId": 2,
"dataSourceName": "Customer 2",
"count": 1,
"recordType": "nativeLineageDataSourceTagUpdate",
"success": true,
"component": "dataSource",
"extra": {
"sourceColumn": {
"nativeColumnName": "\"MY_DATABASE\".\"PUBLIC\".\"CUSTOMER\".\"C_FIRST_NAME\"",
"dataSourceId": 1,
"columnName": "c_first_name"
},
"dataSourceId": 2,
"columnName": "c_first_name",
"tagPropagationDirection": "downstream",
"tags": [
{
"name": "SNOWFLAKE_TAGS.pii",
"source": "immuta-us-east-1"
}
]
},
"newAuditServiceFields": {
"actorIp": null,
"sessionId": null
},
"createdAt": "2022-12-06T19:32:50.372Z",
"updatedAt": "2022-12-06T19:32:50.372Z"
}hive_metastoreallowedCallingClasses.json
immuta-benchmark-suite.dbc
immuta-spark-hive-X.X.X_YYYYMMDD-hadoop-Z.Z.Z-public.jar
immuta_cluster_init_script.sh
obscuredCommands.yamlIMMUTA_INIT_AWS_SECRET_ACCESS_KEY=<aws secret key>
IMMUTA_INIT_AWS_ACCESS_KEY_ID=<aws access key id>IMMUTA_INIT_AWS_SESSION_TOKEN=<aws session token>IMMUTA_INIT_AZCOPY_CRED_TYPE=SharedKey
IMMUTA_INIT_ACCOUNT_NAME=<ADLg2 account name>
IMMUTA_INIT_ACCOUNT_KEY=<ADLg2 account key>IMMUTA_INIT_AZURE_SAS_TOKEN=<SAS token>IMMUTA_INIT_AZURE_AD_USER=<Microsoft Entra ID username>
IMMUTA_INIT_AZURE_PASSWORD=<Microsoft Entra ID password>IMMUTA_INIT_AZURE_SERVICE_PRINCIPAL=<azure service principal>
IMMUTA_INIT_AZURE_PASSWORD=<azure service principal password>
IMMUTA_INIT_AZURE_TENANT=<tenant ID where principal was created>IMMUTA_INIT_HTTPS_USER=<basic auth username>
IMMUTA_INIT_HTTPS_PASSWORD=<basic auth password>MY_SECRET_ENV_VAR=super_secret_stuffMY_SECRET_ENV_VAR={{secrets/my_secrets/my_secret_env_var}}<configuration>
<property>
<name>fs.s3n.awsAccessKeyId</name>
<value>[AWS access key ID]</value>
</property>
<property>
<name>fs.s3n.awsSecretAccessKey</name>
<value>[AWS secret key]</value>
</property>
</configuration><configuration>
<property>
<name>fs.azure.account.key.[storage account name].dfs.core.windows.net</name>
<value>[storage account key]</value>
</property>
</configuration><configuration>
<property>
<name>fs.adl.oauth2.refresh.url</name>
<value>https://login.microsoftonline.com/[directory ID]/oauth2/token</value>
</property>
<property>
<name>fs.adl.oauth2.access.token.provider.type</name>
<value>ClientCredential</value>
</property>
<property>
<name>fs.adl.oauth2.credential</name>
<value>[client secret from Azure]</value>
</property>
<property>
<name>fs.adl.oauth2.client.id</name>
<value>[client ID from Azure]</value>
</property>
</configuration><configuration>
<property>
<name>fs.azure.account.key.[storage account name].blob.core.windows.net</name>
<value>[storage account key]</value>
</property>
</configuration>%sql
GRANT SELECT,READ_METADATA ON DATABASE immuta TO `[email protected]`%sql
select * from immuta.my_data_source limit 5;%sql
select * from my_data_source limit 5;IMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS=maven:/com.github.immuta.hadoop.immuta-spark-third-party-maven-lib-test:2020-11-17-144644TrustedLibraryUtils: Successfully found all configured Immuta configured trusted libraries in Databricks.
TrustedLibraryUtils: Wrote trusted libs file to [/databricks/immuta/immutaTrustedLibs.json]: true.
TrustedLibraryUtils: Added trusted libs file with 1 entries to spark context.
TrustedLibraryUtils: Trusted library installation complete.%sh echo "I'm creating a new file in DBFS" > /dbfs/my/newfile.txt%python
with open("/dbfs/my/newfile.txt", "w") as f:
f.write("I'm creating a new file in DBFS")%fs put -f s3://my-bucket/my/scratch/path/mynewfile.txt "I'm creating a new file in S3"
%scala dbutils.fs.put("s3://my-bucket/my/scratch/path/mynewfile.txt", "I'm creating a new file in S3") <property>
<name>immuta.spark.databricks.scratch.paths</name>
<value>s3://my-bucket/my/scratch/path</value>
</property>%python
import os
import shutil
s3ScratchFile = "s3://some-bucket/path/to/scratch/file"
localScratchDir = os.environ.get("IMMUTA_LOCAL_SCRATCH_DIR")
localScratchFile = "{}/myfile.txt".format(localScratchDir)
localScratchFileCopy = "{}/myfile_copy.txt".format(localScratchDir)dbutils.fs.cp(s3ScratchFile, "file://{}".format(localScratchFile))shutil.copy(localScratchFile, localScratchFileCopy)
with open(localScratchFileCopy, "a") as f:
f.write("Some appended file content")dbutils.fs.cp("file://{}".format(localScratchFileCopy), s3ScratchFile)<property>
<name>immuta.spark.databricks.allow.non.immuta.reads</name>
<value>true</value>
</property><property>
<name>immuta.spark.non.immuta.table.cache.seconds</name>
<value>3600</value>
</property><property>
<name>immuta.spark.databricks.allow.non.immuta.writes</name>
<value>true</value>
</property><property>
<name>immuta.spark.non.immuta.table.cache.seconds</name>
<value>3600</value>
</property><property>
<name>immuta.spark.audit.all.queries</name>
<value>true</value>
</property><property>
<name>immuta.spark.databricks.allow.non.immuta.reads</name>
<value>false</value>
</property>
<property>
<name>immuta.spark.databricks.allow.non.immuta.writes</name>
<value>false</value>
</property>
<property>
<name>immuta.spark.non.immuta.table.cache.seconds</name>
<value>3600</value>
</property>
<property>
<name>immuta.spark.audit.all.queries</name>
<value>false</value>
</property>immuta Databasedf = spark.sql("select * from immuta.table")import org.apache.spark.sql.SparkSession
val spark = SparkSession
.builder()
.appName("Spark SQL basic example")
.config("spark.some.config.option", "some-value")
.getOrCreate()
val sqlDF = spark.sql("SELECT * FROM immuta.table")%sql
select * from immuta.tablelibrary(SparkR)
df <- SparkR::sql("SELECT * from immuta.table")IMMUTA_DATABRICKS_SPARKLYR_SUPPORT_ENABLED=truesc <- spark_connect(method = "databricks")spark.databricks.passthrough.enabled true
spark.databricks.pyspark.trustedFilesystems com.databricks.s3a.S3AFileSystem,shaded.databricks.azurebfs.org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem,shaded.databricks.v20180920_b33d810.org.apache.hadoop.fs.azurebfs.SecureAzureBlobFileSystem,com.databricks.adl.AdlFileSystem,shaded.databricks.V2_1_4.com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem,shaded.databricks.org.apache.hadoop.fs.azure.NativeAzureFileSystem,shaded.databricks.org.apache.hadoop.fs.s3a.S3AFileSystem,org.apache.hadoop.fs.ImmutaSecureFileSystemWrapper
spark.hadoop.fs.s3a.aws.credentials.provider com.amazonaws.auth.InstanceProfileCredentialsProviderIMMUTA_DATABRICKS_SPARKLYR_SUPPORT_ENABLED=true
IMMUTA_SPARK_REQUIRE_EQUALIZATION=true
IMMUTA_SPARK_CURRENT_USER_SCIM_FALLBACK=falseimmuta.spark.acl.assume.not.privileged true
immuta.api.key=<user’s API key><property>
<name>immuta.spark.databricks.scratch.paths</name>
<value>s3://path/to/the/dir</value>
</property>Delta Lake API reference guide
spark.read.format("parquet").load("s3:/my_bucket/path/to/my_parquet_table/partition_column=01/my_file.parquet")spark.read.format("parquet").load("s3:/my_bucket/path/to/my_parquet_table/partition_column=01")spark.read.format("parquet").load("s3:/my_bucket/path/to/my_parquet_table").where("partition_column=01")trino:
globalAdminUsername: "[email protected]"access-control.config-files=/etc/starburst/immuta-access-control.properties# Enable the Immuta System Access Control (v2) implementation.
access-control.name=immuta
# The Immuta endpoint that was displayed when enabling the Starburst integration in Immuta.
immuta.endpoint=http://service.immuta.com:3000
# The Immuta API key that was displayed when enabling the Starburst integration in Immuta.
immuta.apikey=45jdljfkoe82b13eccfb9c
# The administrator user regex. Starburst usernames matching this regex will not be subject to
# Immuta policies. This regex should match the user name provided at Immuta data source
# registration.
immuta.user.admin=immuta_system_account
# Optional argument (default is shown).
# A CSV list of operations allowed on schemas/tables registered as Immuta data sources.
immuta.allowed.immuta.datasource.operations=READ
# Optional argument (default is shown).
# A CSV list of operations allowed on schemas/tables not registered as Immuta data sources.
# Set to empty to allow no operations on non-Immuta data sources.
immuta.allowed.non.immuta.datasource.operations=READ,WRITE
# Optional argument (default is shown).
# Controls table metadata filtering for inaccessible tables.
# - When this property is enabled and non-Immuta reads are also enabled, a user performing
# 'show catalogs/schemas/tables' will not see metadata for a table that is registered as
# an Immuta data source but the user does not have access to through Immuta.
# - When this property is enabled and non-Immuta reads and writes are disabled, a user
# performing 'show catalogs/schemas/tables' will only see metadata for tables that the
# user has access to through Immuta.
# - When this property is disabled, a user performing 'show catalogs/schemas/tables' can see
# all metadata.
immuta.filter.unallowed.table.metadata=falsetrino:
globalAdminUsername: "[email protected]"access-control.config-files=/etc/trino/immuta-access-control.properties# Enable the Immuta System Access Control (v2) implementation.
access-control.name=immuta
# The Immuta endpoint that was displayed when enabling the Starburst integration in Immuta.
immuta.endpoint=http://service.immuta.com:3000
# The Immuta API key that was displayed when enabling the Starburst integration in Immuta.
immuta.apikey=45jdljfkoe82b13eccfb9c
# The administrator user regex. Starburst usernames matching this regex will not be subject to
# Immuta policies. This regex should match the user name provided at Immuta data source
# registration.
immuta.user.admin=immuta_system_account
# Optional argument (default is shown).
# A CSV list of operations allowed on schemas/tables registered as Immuta data sources.
immuta.allowed.immuta.datasource.operations=READ
# Optional argument (default is shown).
# A CSV list of operations allowed on schemas/tables not registered as Immuta data sources.
# Set to empty to allow no operations on non-Immuta data sources.
immuta.allowed.non.immuta.datasource.operations=READ,WRITE
# Optional argument (default is shown).
# Controls table metadata filtering for inaccessible tables.
# - When this property is enabled and non-Immuta reads are also enabled, a user performing
# 'show catalogs/schemas/tables' will not see metadata for a table that is registered as
# an Immuta data source but the user does not have access to through Immuta.
# - When this property is enabled and non-Immuta reads and writes are disabled, a user
# performing 'show catalogs/schemas/tables' will only see metadata for tables that the
# user has access to through Immuta.
# - When this property is disabled, a user performing 'show catalogs/schemas/tables' can see
# all metadata.
immuta.filter.unallowed.table.metadata=falseCREATE USERCREATE USER








MERGETRUNCATEREFRESHMERGETRUNCATEREFRESH


psqlimmutaIMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS environment variable. In the driver log4j logs, Databricks outputs the source jar locations when it installs transitive dependencies. In the cluster driver logs, look for a log message similar to the following:read -r -p "Enter the container image to download (e.g., docker.io/hello-world:latest):" image && \
skopeo copy docker://"$image" docker-archive:"offline-kit/$(sed 's#.*/##; s#:#-#g' <<< "$image").tar"kubectl get pod --selector "app.kubernetes.io/component=query-engine"kubectl exec pod/<query-engine-pod-name> -- \
psql -d immuta -c \
"ALTER USER postgres WITH ENCRYPTED PASSWORD '<new-patroni-superuser-password>'"kubectl exec pod/<query-engine-pod-name> -- \
psql -d immuta -c \
"ALTER USER replicator WITH ENCRYPTED PASSWORD '<new-patroni-replication-password>'"kubectl exec pod/<query-engine-pod-name> -- \
psql -d immuta -c \
"ALTER USER feature_service WITH ENCRYPTED PASSWORD '<new-immuta-feature-password>'"kubectl scale statefulset --all --replicas <query-engine-previous-replica-count> --selector "app.kubernetes.io/component=query-engine"rm -i secret-data.envrm -i secret-data.envkubectl cp <metadata-database-pod-name>:/tmp/bometadata.dump bometadata.dumpCREATE ROLE immuta with login encrypted password '<postgres-password>';
GRANT immuta TO CURRENT_USER;
CREATE DATABASE immuta OWNER immuta;
GRANT all ON DATABASE immuta TO immuta;
ALTER ROLE immuta SET search_path TO bometadata,public;
REVOKE immuta FROM CURRENT_USER;psql --host <postgres-fqdn> --username immuta --port 5432 --password
CREATE EXTENSION pgcrypto;kubectl exec immuta-restore-db --stdin --tty -- shpg_restore --host=<postgres-fqdn> --port=5432 --username=immuta --password --dbname=immuta --no-owner --role=immuta < /tmp/bometadata.dumpkubectl delete pod/immuta-restore-dbhelm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20helm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: immuta
spec:
host: <immuta-fqdn>
to:
kind: Service
name: immuta-secure
port:
targetPort: http
tls:
termination: edge
insecureEdgeTerminationPolicy: Redirectoc apply -f route.yamlhelm upgrade <release-name> oci://ocir.immuta.com/stable/immuta-enterprise --values immuta-values.yaml --version 2024.2.20curl -X 'POST' \
'https://www.organization.immuta.com/lineage/ingest/snowflake' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-H 'Authorization: 846e9e43c86a4ct1be14290d95127d13f' \
-d '{
"tableFilter": "MY_DATABASE\\MY_SCHEMA\\..*",
"batchSize": 1,
"lastTimestamp": "2022-06-29T09:47:06.012-07:00"
}'spark.executor.extraJavaOptions -Djava.security.manager=com.immuta.security.ImmutaSecurityManager /
-Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json /
-Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service
spark.driver.extraJavaOptions -Djava.security.manager=com.immuta.security.ImmutaSecurityManager /
-Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json /
-Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service
spark.databricks.repl.allowedLanguages python,sql
spark.databricks.pyspark.enableProcessIsolation true
spark.databricks.isv.product Immuta# Specify the URI to the artifacts that were hosted in the previous steps
# The URI must adhere to the supported types for each service mentioned above
IMMUTA_INIT_JAR_URI=<Full URI to immuta-spark-hive.jar>
IMMUTA_INIT_CONF_URI=<Full URI to Immuta configuration file>
IMMUTA_INIT_ALLOWED_CALLING_CLASSES_URI=<full URI to allowedCallingClasses.json>
IMMUTA_INIT_OBSCURED_COMMANDS_URI=<full URI to obscuredCommands.yaml>
# (OPTIONAL)
# Specify an additional configuration file to be added to the spark.sparkContext.hadoopConfiguration.
# This file allows administrators to add sensitive configuration needed by the SparkSession that
# should not viewable by users.
# Further explanation of this variable as well as examples are provided below.
IMMUTA_INIT_ADDITIONAL_CONF_URI=<full URI to additional configuration file>dbGetQuery(sc, "show tables in immuta")<property>
<name>immuta.spark.databricks.scratch.paths</name>
<value>s3://path/to/the/dir, dbfs:/user/hive/warehouse/any_db_name.db</value>
</property># Not recommended by Spark and not supported in Immuta
spark.read.format("delta").load("s3:/my_bucket/path/to/my_delta_table/partition_column=01")
# Recommended by Spark and supported in Immuta.
spark.read.format("delta").load("s3:/my_bucket/path/to/my_delta_table").where("partition_column=01")immuta.allowed.immuta.datasource.operations=READ,WRITE,OWN
immuta.allowed.non.immuta.datasource.operations=READ,WRITE,CREATE,OWNaccess-control.config-files=/etc/starburst/immuta-access-control.propertiesimmuta.allowed.immuta.datasource.operations=READ,WRITE,OWN
immuta.allowed.non.immuta.datasource.operations=READ,WRITE,CREATE,OWNaccess-control.config-files=/etc/trino/immuta-access-control.propertiesIMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS=dbfs:/immuta/bstabile/jars/immuta-spark-third-party-lib-test.jarIMMUTA_SPARK_DATABRICKS_TRUSTED_LIB_URIS=maven:/my.group.id:my-package-id:1.2.3,dbfs:/path/to/my/library.jaroc project immutaoc create secret docker-registry immuta-oci-registry \
--docker-server=https://ocir.immuta.com \
--docker-username="<username>" \
--docker-password="<token>" \
[email protected]\c immuta
CREATE EXTENSION pgcrypto;ALTER ROLE immuta SET search_path TO bometadata,public;CREATE EXTENSION pgcrypto;REVOKE immuta FROM CURRENT_USER;\c immuta
CREATE EXTENSION pgcrypto;echo <token> | helm registry login --password-stdin --username <username> ocir.immuta.comoc new-project immutaoc get project immuta --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'oc get project immuta --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'oc run pgclient \
--stdin \
--tty \
--rm \
--image docker.io/bitnami/postgresql -- \
psql --host <postgres-fqdn> --username postgres --port 5432 --passwordCREATE ROLE immuta with login encrypted password '<postgres-password>';
GRANT immuta TO CURRENT_USER;
CREATE DATABASE immuta OWNER immuta;
GRANT all ON DATABASE immuta TO immuta;
ALTER ROLE immuta SET search_path TO bometadata,public;global:
imageRegistry: ocir.immuta.com
imagePullSecrets:
- name: immuta-oci-registry
imageRepositoryMap:
immuta/immuta-service: stable/immuta-service
immuta/immuta-db: stable/immuta-db
immuta/immuta-fingerprint: stable/immuta-fingerprint
immuta/audit-service: stable/audit-service
immuta/audit-export-cronjob: stable/audit-export-cronjob
immuta/classify-service: stable/classify-service
immuta/cache: stable/cache
audit:
enabled: false
deployment:
podSecurityContext:
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'
runAsUser: <user-id>
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'
runAsGroup: <group-id>
seccompProfile:
type: RuntimeDefault
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
discover:
deployment:
podSecurityContext:
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'
runAsUser: <user-id>
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'
runAsGroup: <group-id>
seccompProfile:
type: RuntimeDefault
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
secure:
extraEnvVars:
- name: FeatureFlag_AuditService
value: "false"
- name: FeatureFlag_detect
value: "false"
- name: FeatureFlag_auditLegacyViewHide
value: "false"
ingress:
enabled: false
tls: false
postgresql:
host: <postgres-fqdn>
port: 5432
database: immuta
username: immuta
password: <postgres-password>
ssl: true
web:
podSecurityContext:
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'
runAsUser: <user-id>
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'
runAsGroup: <group-id>
seccompProfile:
type: RuntimeDefault
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALL
backgroundWorker:
podSecurityContext:
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.uid-range"}}{{"\n"}}'
runAsUser: <user-id>
# A number that is within the project range:
# oc get project <project-name> --output template='{{index .metadata.annotations "openshift.io/sa.scc.supplemental-groups"}}{{"\n"}}'
runAsGroup: <group-id>
seccompProfile:
type: RuntimeDefault
containerSecurityContext:
allowPrivilegeEscalation: false
capabilities:
drop:
- ALLhelm install immuta immuta/immuta-enterprise \
--values immuta-values.yamloc wait --for=condition=Ready pods --alloc get service --selector "app.kubernetes.io/component=secure" --output template='{{ .metadata.name }}'oc port-forward service/<name> 8080:httpecho <token> | helm registry login --password-stdin --username <username> ocir.immuta.comkubectl create namespace immutakubectl config set-context --current --namespace=immutaoc create secret docker-registry immuta-oci-registry \
--docker-server=https://ocir.immuta.com \
--docker-username="<username>" \
--docker-password="<token>" \
[email protected]auth:
database: immuta
username: immuta
password: <postgres-password>helm install pg-db oci://registry-1.docker.io/bitnamicharts/postgresql \
--values pg-values.yamlkubectl wait --for=condition=Ready pods --allkubectl get pod --selector "app.kubernetes.io/name=postgresql" --output template='{{ .metadata.name }}'global:
imageRegistry: ocir.immuta.com
imagePullSecrets:
- name: immuta-oci-registry
imageRepositoryMap:
immuta/immuta-service: stable/immuta-service
immuta/immuta-db: stable/immuta-db
immuta/immuta-fingerprint: stable/immuta-fingerprint
immuta/audit-service: stable/audit-service
immuta/audit-export-cronjob: stable/audit-export-cronjob
immuta/classify-service: stable/classify-service
immuta/cache: stable/cache
audit:
enabled: false
secure:
ingress:
enabled: false
extraEnvVars:
- name: FeatureFlag_AuditService
value: "false"
- name: FeatureFlag_detect
value: "false"
- name: FeatureFlag_auditLegacyViewHide
value: "false"
postgresql:
# Each Kubernetes Service has a DNS record associated with it. See: https://kubernetes.io/docs/concepts/services-networking/dns-pod-service/
# The anatomy of a domain name is as follows:
# <service>.<namespace>.svc.<cluster-domain>
#
# Where the default cluster domain is: cluster.local
host: pg-db-postgresql.immuta.svc.cluster.local
port: 5432
database: immuta
username: immuta
password: <postgres-password>
ssl: truehelm install immuta immuta/immuta-enterprise \
--values immuta-values.yamlkubectl wait --for=condition=Ready pods --allkubectl get service --selector "app.kubernetes.io/component=secure" --output template='{{ .metadata.name }}'kubectl port-forward service/<name> 8080:httpREVOKE immuta FROM CURRENT_USER;kubectl exec --stdin --tty pod/<database-pod-name> -- psql -U immutaINFO LibraryDownloadManager: Downloaded library dbfs:/FileStore/jars/maven/org/slf4j/slf4j-api-1.7.25.jar as
local file /local_disk0/tmp/addedFile8569165920223626894slf4j_api_1_7_25-784af.jarREVOKE immuta FROM CURRENT_USER;\c immuta
CREATE EXTENSION pgcrypto;secure:
extraEnvVars:
- name: FeatureFlag_auditLegacyViewHide
value: "false"audit:
deployment:
extraEnvVars:
- name: AUDIT_RETENTION_POLICY_IN_DAYS
value: "90"kubectl wait --for=condition=Ready pods --allkubectl get pod --selector "app.kubernetes.io/name=postgresql" --output namekubectl exec --stdin --tty pod/<database-pod-name> -- psql -U immutaALTER ROLE immuta SET search_path TO bometadata,public;CREATE EXTENSION pgcrypto;secure:
extraEnvVars:
- name: FeatureFlag_auditLegacyViewHide
value: "false"audit:
deployment:
extraEnvVars:
- name: AUDIT_RETENTION_POLICY_IN_DAYS
value: "90"oc project immutaoc create secret docker-registry immuta-oci-registry \
--docker-server=https://ocir.immuta.com \
--docker-username="<username>" \
--docker-password="<token>" \
[email protected]REVOKE immuta FROM CURRENT_USER;\c immuta
CREATE EXTENSION pgcrypto;secure:
extraEnvVars:
- name: FeatureFlag_auditLegacyViewHide
value: "false"audit:
deployment:
extraEnvVars:
- name: AUDIT_RETENTION_POLICY_IN_DAYS
value: "90"SELECTMANAGEsystem.accessdocker run ocir.immuta.com/immuta/immuta-trino:414SHOW queries will not be filtered on table metadata.SHOW queries will not be filtered on table metadata.READ,WRITE,OWN,CREATEcosign verify \
--key ./immuta-cosign.pub \
ocir.immuta.com/stable/<artifact-name>:2024.2.20helm template <release-name> oci://ocir.immuta.com/stable/immuta-enterprise \
--values immuta-values.yaml \
--version 2024.2.20 \
| yq '..|.image? | select(.)' | sort -uALTER WAREHOUSE "INTEGRATION_WH" SET WAREHOUSE_SIZE = 'XSMALL' AUTO_SUSPEND = 120 AUTO_RESUME = TRUE MIN_CLUSTER_COUNT = 1 MAX_CLUSTER_COUNT = 2 SCALING_POLICY = 'STANDARD'; ALTER WAREHOUSE "WH_NAME" SET WAREHOUSE_SIZE = 'XSMALL' AUTO_SUSPEND = 61 AUTO_RESUME = TRUE MIN_CLUSTER_COUNT = 1 MAX_CLUSTER_COUNT = 2 SCALING_POLICY = 'STANDARD' COMMENT = '';SELECT h.* FROM "SNOWFLAKE"."ACCOUNT_USAGE"."QUERY_HISTORY" h
INNER JOIN "SNOWFLAKE"."ACCOUNT_USAGE"."SESSIONS" s
ON s.session_id = h.session_id
WHERE GET(parse_json(s.client_environment), 'APPLICATION') = 'IMMUTA' limit 25;dbfs:/path/to/code.jar can be in S3 or ABFS (on Azure Databricks) assuming the cluster is configured with access to that path.immuta.api.key setting with an Immuta API key generated on the Immuta profile page. [
"--conf","spark.driver.extraJavaOptions=-Djava.security.manager=com.immuta.security.ImmutaSecurityManager -Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json -Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service",
"--conf","spark.executor.extraJavaOptions=-Djava.security.manager=com.immuta.security.ImmutaSecurityManager -Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json -Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service",
"--conf","spark.databricks.repl.allowedLanguages=python,sql,scala,r",
"dbfs:/path/to/script.R",
"arg1", "arg2", "..."
]package com.example.job
import java.net.URLClassLoader
import java.io.File
import org.apache.spark.sql.SparkSession
object ImmutaSparkSubmitExample {
def main(args: Array[String]): Unit = {
val jarDir = new File("/databricks/immuta/jars/")
val urls = jarDir.listFiles.map(_.toURI.toURL)
// Configure a new ClassLoader which will load jars from the additional jars directory
val cl = new URLClassLoader(urls)
val jobClass = cl.loadClass(classOf[ImmutaSparkSubmitExample].getName)
val job = jobClass.newInstance
jobClass.getMethod("runJob").invoke(job)
}
}
class ImmutaSparkSubmitExample {
def getSparkSession(): SparkSession = {
SparkSession.builder()
.appName("Example Spark Submit")
.enableHiveSupport()
.config("immuta.spark.acl.assume.not.privileged", "true")
.config("spark.hadoop.immuta.databricks.config.update.service.enabled", "false")
.getOrCreate()
}
def runJob(): Unit = {
val spark = getSparkSession
try {
val df = spark.table("immuta.<YOUR DATASOURCE>")
// Run Immuta Spark queries...
} finally {
spark.stop()
}
}
} [
"--conf","spark.driver.extraJavaOptions=-Djava.security.manager=com.immuta.security.ImmutaSecurityManager -Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json -Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service",
"--conf","spark.executor.extraJavaOptions=-Djava.security.manager=com.immuta.security.ImmutaSecurityManager -Dimmuta.security.manager.classes.config=file:///databricks/immuta/allowedCallingClasses.json -Dimmuta.spark.encryption.fpe.class=com.immuta.spark.encryption.ff1.ImmutaFF1Service",
"--conf","spark.databricks.repl.allowedLanguages=python,sql,scala,r",
"--class","org.youorg.package.MainClass",
"dbfs:/path/to/code.jar",
"arg1", "arg2", "..."
]DEFINER security modeINVOKER security moderestricteddemoshow catalogspublic