Azure Active Directory, jest to usługa, która zapewnia logowanie jednokrotne oraz uwierzytelnianie wieloskładnikowe. W prosty sposób możemy kontrolować dostęp do środowiska NiFi oraz przyznawać uprawnienia dla poszczególnych grup użytkowników. Active Directory jest na tyle popularną usługą, że wykorzystywana jest w prawie każdym przedsiębiorstwie, umożliwia ona logowanie do wielu aplikacji w ramach jednego konta użytkownika.
Utworzenie aplikacji
W tym celu, należy przejść do Azure Active Directory i wybrać „App registrations”, następnie kliknąć „New registration”. Wprowadzamy nazwę aplikacji, a także adres URL przekierowania, który ma być używany przez Azure Active Directory, aby powrócić do Apache NiFi z tokenem uwierzytelniającym danego użytkownika. URL tworzymy w następujący sposób „https://nazwa_domeny:port” + „/nifi-api/access/oidc/callback”, w tym przykładzie użyłem lokalnej instalacji NiFi, czyli: https://localhost:9443/nifi-api/access/oidc/callback
API permissions
Następnie, należy nadać odpowiednie uprawnienia aplikacji przechodząc do „API permissions” na utworzonej wcześniej aplikacji. Uprawnienia dodajemy za pomocą „Add a permission”, a następnie należy wybrać „Microsoft Graph” i dodać potrzebne uprawnienia z poniższej tabeli.
API / Permissions name | Type | Admin consent required |
---|---|---|
Delegated | No | |
profile | Delegated | No |
openid | Delegated | No |
Group.Read.All | Application | Yes |
User.Read.All | Application | Yes |
Po dodaniu wymaganych uprawnień, należy kliknąć „Grant admin consent”. Efekt końcowy powinien wyglądać tak jak na poniższym zrzucie ekranu.
Token configuration
Token jest wymagany do pomyślnego uwierzytelnienia OpenID na podstawie głównej nazwy użytkownika (UPN). Przechodząc do „Token configuration”, należy utworzyć nowy token, wybierając opcję „Add optional claim”. W polu „Token type” wybierz ID, a następnie zaznacz „UPN” i wybierz „Add”, jak na zrzucie poniżej.
Następnie, należy edytować wcześniej dodany „Claim” i zaznaczyć opcję „Externally authenticated”.
Certificates & secrets
Wymagane do prawidłowego działania jest wygenerowanie „Client secret”, należy przejść do „Certificates & secrets”, wybrać „New client secret” i dodać nowy klucz, zawartość kolumny Value należy zapisać.
Konfiguracja Apache NiFi
Apache NiFi, należy skonfigurować tak, aby działał przez TLS wraz z uwierzytelnianiem opartym na użytkownikach. W tym celu przejdźmy do plików konfiguracyjnych, które znajdują się w katalogu conf i uzupełnijmy miejsca oznaczone <> danymi wcześniej przygotowanej aplikacji oraz tokenu.
nifi.properties
nifi.security.user.authorizer=managed-authorizer
nifi.security.user.login.identity.provider=
# OpenId Connect SSO Properties #
nifi.security.user.oidc.discovery.url=https://login.microsoftonline.com/<Tenant ID>/v2.0/.well-known/openid-configuration
nifi.security.user.oidc.connect.timeout=5 secs
nifi.security.user.oidc.read.timeout=5 secs
nifi.security.user.oidc.client.id=<Application (client) ID>
nifi.security.user.oidc.client.secret=<Client Secret Value>
nifi.security.user.oidc.preferred.jwsalgorithm=
nifi.security.user.oidc.additional.scopes=profile
nifi.security.user.oidc.claim.identifying.user=upn
nifi.security.user.oidc.fallback.claims.identifying.user=email
nifi.security.user.oidc.truststore.strategy=JDK
authorizers.xml
<userGroupProvider>
<identifier>azure-graph-user-group-provider</identifier>
<class>org.apache.nifi.authorization.azure.AzureGraphUserGroupProvider</class>
<property name="Refresh Delay">5 mins</property>
<property name="Authority Endpoint">https://login.microsoftonline.com</property>
<property name="Directory ID"><Tenant ID></property>
<property name="Application ID"><Application (client) ID></property>
<property name="Client Secret"><Client Secret Value></property>
<property name="Group Filter Prefix"><Azure Group User></property>
<property name="Group Filter Suffix"></property>
<property name="Group Filter Substring"></property>
<property name="Group Filter List Inclusion"></property>
<property name="Page Size"></property>
<property name="Claim for Username">upn</property>
</userGroupProvider>
<userGroupProvider>
<identifier>composite-configurable-user-group-provider</identifier>
<class>org.apache.nifi.authorization.CompositeConfigurableUserGroupProvider</class>
<property name="Configurable User Group Provider">file-user-group-provider</property>
<property name="User Group Provider 1">azure-graph-user-group-provider</property>
</userGroupProvider>
<accessPolicyProvider>
<identifier>file-access-policy-provider</identifier>
<class>org.apache.nifi.authorization.FileAccessPolicyProvider</class>
<property name="User Group Provider">composite-configurable-user-group-provider</property>
<property name="Authorizations File">./conf/authorizations.xml</property>
<property name="Initial Admin Identity"><Admin address email></property>
<property name="Legacy Authorized Users File"></property>
<property name="Node Identity 1"></property>
<property name="Node Group"></property>
</accessPolicyProvider>
Po wprowadzonych zmianach, Apache NiFi należy zrestartować, następnie wejść poprzez link „https://adres_ip_hosta:9443/nifi/”, zostaniemy przekierowani w celu zalogowania się poprzez Azure Active Directory. W zakładce Users wyświetli się wskazana grupa(Group Filter Prefix) oraz inicjalny administrator(Initial Admin Identity) z pliku authorizers.xml, które zostały pomyślnie zaimportowane z Azure Active Directory.
Ostatni etap to nadanie uprawnień dla swojego użytkownika, w tym celu należy prawym przyciskiem myszy na głównym Canvasie, wybrać właściwość „Manage access policies” i dodać wszelkie uprawnienia, aby uzyskać kontrolę nad Apache NiFi.