Send As w środowisq hybrydowym

scenariusz

przenosiny do o365 – codzienność. Hybryda Exchange – codzienność. teraz jak zaplanować migrację kont? alfabetycznie? a może lokalizacjami?

największym ogranicznikiem są uprawnienia dla skrzynek. w sfederowanej rzeczywistości nie wszystko jest przechodnie – uprawnienia nadane dla Exchange OnPrem niekoniecznie działają dla userów OnLine i vice-versa. oficjalny guide jest tu: https://technet.microsoft.com/en-us/library/jj200581(v=exchg.150).aspx . dla tego podstawowym wyznacznikiem powinny być skrzynki współdzielone, które powinny być przenoszone grupami -> skrzynka + wszyscy którzy mają do niej dostęp.

co do samego artu – pierwszą rzeczą, na którą warto zwrócić uwagę jest to, że dotyczy on wersji Exchange 2o13 i 2o16. niewprost jest zatem informacja, że Exchange 2o1o jest niewspierany. oficjalnie. ale nieoficjalnie działa tak samo – nie przetestowałem 1oo% przypadqw ale różnic nie widzę.

jest jednak ciekawe zdanie, na którym bym chciał się sqpić:

We don’t, however, support the use of the Send-As, Receive-As, or Send on behalf of mailbox permissions in hybrid deployments between on-premises Exchange and Office 365 organizations

z moich doświadczeń wynika, że jak najbardziej da się nadać SendAs dla dowolnej skrzynki. cały ambaras tkwi w tym, żeby uprawnienie nadać po dobrej stronie – tego DLA kogo są uprawnienia. zaraz pokaże na przykładzie.

jak to zrobić?

z tymi uprawnieniami to jest generalnie trochę namieszane – są aż 3 różne mechanizmy działając na różnych poziomach i do każdego jest inne polecenie. jest jak jest, i stało się tak, że jedna skrzynka jest lokalnie, druga zdalnie. co można zrobić?

środowisko:

  • testuser@w-files.pl jest na Ex 2o1o onprem
  • manager@w-files.pl jest zmigrowany do o365

przykładowe nadanie uprawnień dla skrzynki będzie wyglądało tak:

  • nadanie uprawnień Full Access, bo granularne nie działają. to uprawnienie działa na poziomie folderów w mailboxie.
Add-MailboxPermission -Identity 'testuser@w-files.pl' -User 'manager@w-files.pl' -AccessRights FullAccess
  • nadanie Send on Behalf. to uprawnienie zapisywane jest dla mailboxa.
set-Mailbox -Identity testuser@w-files.pl -GrantSendOnBehalfTo manager@w-files.pl
  • i na koniec uprawnienie Send As. to uprawnienie jest na poziomie obiektu Active Directory ponieważ wiąże się z delegacją uprawnienia. nie do końca rozumiem jak ten mechanizm jest obsługiwany przez Exchange, ale niewątpliwie informacja jest zapisywana dla obiektu AD. i tu jest clue dla działania SendAs dla hybrydy – ponieważ są dwa AD – OnPrem oraz OnLine, to najlepiej wykonać polecenie w obu, a na pewno musi być wykonane w AD, w którym jest obiekt korzystający z niego:
#sendAs in onprem Exchange:
#manager's mailbox is onLine so get-mailbox will not find it. 'name' or 'distinguishedaname' attribute has to be used as Identity
Add-ADPermission -Identity (get-mailbox testuser).name -User "CN=manager,OU=LogicUnion,DC=w-files,DC=pl" -ExtendedRights 'Send As'

#sendAs in OnLine Exchange:
#although testuser's mailbox in onprem, manager will query Azure AD for SendAs permission. below works!
Add-RecipientPermission -Identity testuser@w-files.pl -AccessRights SendAs -Trustee manager@w-files.pl

podsumowanie

no i działa.  a miało nie działać q:

eN.

 

 

modern authentication – uwierzytelnienie do chmury

adalchmura zmienia wszystko. kto tego nie odczuł, to chyba przez ostatni rok był na wakacjach na Marsie. od długiego czasu Microsoft przepisuje wszystkie usługi na WS*, podstawą integracji Azure z onpremem jest ADFS, musi przyjść kolej i na protokoły uwierzytelnienia. stare, 'LANowskie’, mają swoje wady przy wykorzystaniu w takiej integracji. odpowiedzią jest coś, co nazywa się 'modern authentication’.

do czego służy? krótko – do pobrania tokenu z Azure AD, którym aplikacje będą mogły się posługiwać w celu uwierzytelnienia. efekt końcowy – natywne wsparcie dla MFA (MultiFactor Authentication) przez aplikacje oraz realizacja pełnego, przeźroczystego SSO dla aplikacji Azure.

nowość!(?)

modern authentication jest obecnie w fazie public preview – a więc w zasadzie go jeszcze nie ma. największy buzz zaczął się w listopadzie 2o15, kiedy pojawiała się nowa wersja biblioteki… ale co ciekawe, nowością nie jest. jeden z lepszych wpisów, wyjaśniających działanie biblioteki można znaleźć tutaj – datowane na sierpień 2o12… biblioteka, która odpowiedzialna jest za realizację logowania przeszła nazewniczne metamorfozy – AAL (Windows Azure Authentication Library), WAAL, a obecnie ADAL (Microsoft Azure Active Directory Authentication Library).

lista obecnie wspieranych cech i zakresu gotowości ADAL jest w poście z listopada, który wspominałem oraz na technecie. na razie więcej informacji developerskich – dość normalne dla produktu w tej fazie.

w praktyce

w praktyce potrafi skorzystać już z tego office2o16 (outlook, skype) oraz office2o13. przy czym w o16 ten typ uwierzytelnienia jest włączony standardowo, w o13 wymagane są poprawki (standardowe, więc jeśli ktoś dba o aktualizacje, to tą funkcjonalność ma) oraz włączenie funkcji w rejestrze.

to jednak nie wystarczy. podstawową zmianą jest włącznie obsługi modern authentication dla office365 – a konkretnie dla Exchange OL:

set-organizationconfig -oauth2clientprofileEnabled $true

po włączeniu, outlook i skype urzywają już MA zamiast basic authentication, co w praktyce przekłada się na niby błahą, ale istotną zmianę – nie ma już ramki z pytaniem o użytkownika i hasło, gdzie jedynym sposobem automatyzacji jest zaznaczenie opcji 'save credentials’ i przechowywanie ich w credential managerze. teraz zmiany hasła są również przeźroczyste dla użytkownika końcowego.

eN.

Exchange – uprawnienia do kalendarzy zasobów

exchange-logoogólnie

prosty scenariusz: trzeba założyć zasób, reprezentujący samochód firmowy tak, aby ludzie mogli go sobie rezerwować. następnie chcemy aby wszyscy widzieli kto go wypożyczył i dokąd zabrał. standardowo większość informacji jest ukryta i widać tylko ogólny wpis.

w tym celu należy nadać uprawnienia do kalendarza nie jest trudno i jest sporo linków, które szybko wskażą, że można to zrobić poleceniem:

Set-MailboxFolderPermission "roomResource@wfiles.pl:\calendar" -User default -AccessRights reviewer

… ale:

  • po pierwsze to nie zawsze zadziała (w Polsce można uznać, że prawie nigdy)
  • są bardziej złożone scenariusze. no i co daje 'reviewer’?? dla tego warto wiedzieć więcej – np. jakie inne uprawnienia można nadać
  • czemu nadal nie ma wszystkich informacji
  • a co przy jeszcze bardziej wymyślnych wymaganiach dotyczących automatyki? jak jeszcze może 'reagować’ taki obiekt na rezerwację?

lokalizacja

czemu w PL nie zadziała? ponieważ 'calendar’ to nazwa katalogu, a ta jest zlokalizowana. żeby było śmieszniej nazwa będzie zależna od… ustawień przeglądarki w momencie tworzenia obiektu zasobu (użytkownikom definiuje się kraj). sweet. ponieważ mam główną przeglądarkę ustawiona na en-US, żeby nie oglądać raniących w oczy auto-tłumaczeń technetowych czy portalu office365 w którym ciężko się połapać, część obiektów ma 'calendar’ a część 'kalendarz’. zakładając z command line zawsze tworzy 'calendar’ pomimo polskich regionalsów, więc mniemam, że ten sposób jest bardziej deterministyczny (ale trzeba by porobić więcej testów na różnie zlokalizowanych systemach).

czyli zapis ścieżki do konkretnego folderu to „roomResource@wfiles.pl:\kalendarz” . i znów – tyle dość łatwo i szybko można wyszperać na forach… ale pozostaje pytanie – jak wylistować wszystkie katalogi?? skoro jest kalendarz, to pewnie są jakieś inne foldery i może da się z nimi coś zrobić? i jak sprawdzić czy to jest 'calendar’ czy 'kalendarz’? ale najpierw…

uprawnienia

standardowo, po utworzeniu zasobu sali lub ekwipunq jedyne co widać w kalendarzu to 'busy’. equipmentMBXdef

można to zmienić i umożliwić bardziej pełny widok nadając uprawnienia LimitedDetails lub Reviewer (pełna lista uprawnień tutaj). różnica jest dość poważna. ograniczone detale pozwolą na zobaczenie organizatora i lokalizacji ale nie pozwolą otworzyć zdarzenia ze względu na brak uprawnień:

equipmentMBXrevequipementMBXnoaccnadanie uprawnień podglądacza (; pozwoli otworzyć wpis w kalendarzu i w pełni mu się przyjrzeć:

equipmentMBXdetaa gdzie informacje??

na pierwszy rzut oka może wygląda dobrze, ale ktoś choć trochę bardziej spostrzegawczy zauważy, że pole tematu oraz szczegółowe informacje chyba nie dają pełnych informacji. i faktycznie – standardowo, założenie jest takie: ktoś wynajmuje salę, wysyła zaproszenie, więc w tym zaproszeniu umieszcza informacje o czym będzie rozmowa, pewnie agendę, może jakieś materiały dodatkowe itd. zasób sali dostaje to samo zaproszenie co każdy inny – a to byłby niekontrolowany wyciek informacji. nie byłoby miło, gdyby cała firma wiedziała, że właśnie dyrektorzy spotykają się, np. żeby omówić zwolnienia pracowników… dla tego standardowe opcje są ustawione restrykcyjnie i wycinają wszystkie informacje.

są jednak scenariusze, w których niektóre osoby muszą wiedzieć więcej – np. dział logistyki musi wiedzieć gdzie jest samochód i po co. wtedy trzeba wykonać następujące operacje:

  • nadać ludzikom uprawnienia 'limitedDetails’ żeby widzieli 'kto’ ale niewiele więcej (set-MailboxFolderPermission)
  • nadać wybrańcom uprawnienia 'reviewer’ żeby mogli wejść i zobaczyć detale (add-MailboxFolderPermission)
  • no i skonfigurować zasób tak, żeby te informacje przyjmował a nie wycinał. (set-CalendarProcessing)

zobaczmy jakie zachowania można dla zasobu ustawić:

C:\...ive\_scriptz :))o- Get-CalendarProcessing -Identity roomResource@wfiles.pl|fl *


PSComputerName                      : outlook.office365.com
RunspaceId                          : 7518df28-1a3e-49e2-bc1b-6af5eb66bd48
PSShowComputerName                  : False
AutomateProcessing                  : AutoAccept
AllowConflicts                      : False
BookingWindowInDays                 : 180
MaximumDurationInMinutes            : 1440
AllowRecurringMeetings              : True
EnforceSchedulingHorizon            : True
ScheduleOnlyDuringWorkHours         : False
ConflictPercentageAllowed           : 0
MaximumConflictInstances            : 0
ForwardRequestsToDelegates          : True
DeleteAttachments                   : True
DeleteComments                      : False
RemovePrivateProperty               : True
DeleteSubject                       : False
AddOrganizerToSubject               : True
DeleteNonCalendarItems              : True
TentativePendingApproval            : True
EnableResponseDetails               : True
OrganizerInfo                       : True
ResourceDelegates                   : {}
RequestOutOfPolicy                  : {}
AllRequestOutOfPolicy               : False
BookInPolicy                        : {}
AllBookInPolicy                     : True
RequestInPolicy                     : {}
AllRequestInPolicy                  : False
AddAdditionalResponse               : False
AdditionalResponse                  :
RemoveOldMeetingMessages            : True
AddNewRequestsTentatively           : True
ProcessExternalMeetingMessages      : False
RemoveForwardedMeetingNotifications : False
MailboxOwnerId                      : Skoda
Identity                            : Skoda
IsValid                             : True
ObjectState                         : Changed

wszystkich nie ma sensu tłumaczyć, można przeczytać na technecie, nas interesują konkretnie DeleteSubject, DeleteComents. jak widać można również pozwolić na załączniki, kontrolować czy zatwierdzanie jest automatyczne czy wymaga ręcznego potwierdzenia, czy w polu tematu dodawana jest nazwa użytkownika… i inne. przykładowa konfiguracja zasobu:

set-MailboxFolderPermission 'roomResource@wfiles.pl:\kalendarz' -User default -AccessRights limitedDetails
add-MailboxFolderPermission 'roomResource@wfiles.pl:\kalendarz' -User logistics@wfiles.pl -AccessRights reviewer
Set-CalendarProcessing -Identity roomResource@wfiles.pl -DeleteComments $false -DeleteSubject $false

i w takim przypadq dział logistyki może zobaczyć takie krzaczki…

equipmentMBXfulllista folderów

na koniec powrócę do listy folderów. tu niestety niespodzianka: nie da się wylistować folderów dla zasobu. ponieważ zasób jest skrzynką… ale równocześnie nią nie jest. jest – i te foldery są, ale nie jest – bo tak twierdzi system. poniżej mała zabawa – wylistowanie folderów dla regularnego mailboxa, próba wylistowania dla zasobu i dowód, że jednak wszystkie foldery są…

C:\...ive\_scriptz :))o- Get-MailboxFolder -Identity nexor@wfiles.pl -GetChildren

Name                 FolderPath             HasSubfolders
----                 ----------             -------------
Conversation History {Conversation History} False
Dziennik             {Dziennik}             False
Elementy usunięte    {Elementy usunięte}    True
Elementy wysłane     {Elementy wysłane}     False
Kalendarz            {Kalendarz}            True
Kontakty             {Kontakty}             True
Mało istotne         {Mało istotne}         False
Notatki              {Notatki}              False
RSS Feeds            {RSS Feeds}            False
Skrzynka nadawcza    {Skrzynka nadawcza}    False
Skrzynka odbiorcza   {Skrzynka odbiorcza}   True
Sync Issues          {Sync Issues}          True
Wersje robocze       {Wersje robocze}       False
Wiadomości-śmieci    {Wiadomości-śmieci}    False
Zadania              {Zadania}              False


C:\...ive\_scriptz :))o- Get-MailboxFolder -Identity roomResource@wfiles.pl -GetChildren
The specified mailbox "testeq2@netwise.pl" doesn't exist.
    + CategoryInfo          : NotSpecified: (:) [Get-MailboxFolder], ManagementObjectNotFoundException
    + FullyQualifiedErrorId : [Server=VI1PR07MB1375,RequestId=2d356745-d5fe-4ff8-8deb-314d0a8e578b,TimeStamp=2015-11-0
   5 11:40:17] [FailureCategory=Cmdlet-ManagementObjectNotFoundException] 6C1FD1AF,Microsoft.Exchange.Management.Stor
  eTasks.GetMailboxFolder
    + PSComputerName        : outlook.office365.com

C:\...ive\_scriptz :))o- Get-MailboxFolderPermission 'roomResource@wfiles.pl:\inbox'

FolderName           User                 AccessRights
----------           ----                 ------------
Inbox                Default              {None}
Inbox                Anonymous            {None}

przy czym normalny user ma nazwy katalogów po polsq bo zakładając tak miał zdefiniowaną licencję, a zasób po ang. bo był zakładany z linii poleceń, a zasoby licencji nie posiadają. wykorzystanie 'get-mailboxfolderpermission’ w połączeniu z intuicją to jedyny sposób jaki znalazłem, żeby sprawdzić czy dany folder istnieje dla zasobu…

eN.

 

konfiguracja synchronizacji z Exchange online na android

po ugradzie do lollipopa [5.o.2] smartfon niemal umarł. nie obyło się bez przywrócenia do ustawień fabrycznych i instalacji od nowa. przy okazji okazało się, że jest nowa wersja wbudowanej wersji aplikacji do poczty elektronicznej. teraz jest „łatwiej” (;

  • jeśli po prostu doda się konto office365, bez większych problemów się konfiguruje, sam wykrywa ustawienia – po prostu rewelacja… gdyby nie fakt że:
    • potrafi synchronizować tylko maile (brak kontaktów i kalendarza)
    • nie da się ustawić auto-synchronizacji podkatalogów – obsługuje wyłącznie ręczny sync. swoją drogą po upgradzie w ogóle nie potrafił ich synchronizować…
  • zamiast konfiguracji 'poczty’ można skonfigurować Exchange ActiveSync. auto-konfiguracja nie działa, więc trzeba pamiętać o dwóch rzeczach:
    • podając usera, wbrew temu co pokazuje interfejs, należy wpisać użytkownika w takim dziwnym zapisie: '\user.name@company.com’
    • serwer poczty to: outlook.office365.com

w ten sposób wszystko działa, można w aplikacji pocztowej wybrać konkretne podkatalogi do synchronizacji bieżącej, jest kalendarz i kontakty.

a outlook na andka cały czas nie potrafi uwierzytelnić przy logowaniu sfederowanym O.o

do tej pory używam androida bo lubię się systemem pobawić, coś sobie w nim pogrzebać, wymienić, zcustomizować itd… ale mam wrażenie, że andek przeżywa kryzys podobny do tego, jaki przeżywał windows XP – wszystkiego jest za dużo, a sam system, choć ogólnie dobry, po prostu niewyrabia. za mała jest kontrola nad aplikacjami. niby lollipop miał być zoptymalizowany i działać wydajniej niż kitkat, a tuż po przywróceniu do ustawień fabrycznych, bez żadnych rootów ani nawet własnych zamienników launchera, telefonu czy kontaktów – po instalacji kilq apek telefon zaczyna mulić. w widocznym stopniu spada responsywność /:

eN.

Exchange online: przekierowanie, autoodpowiedź i blokada konta (exit procedure)

scenariusz… niemiły, ale życiowy: pracownik zostaje zwolniony z pracy, mamy skrzynki w Exchange online (wyłącznie) i synchronizację ADSync/ADFS z o365. bloqjemy konto w AD i… nadal odbiera pocztę na urządzeniach mobilnych i outlook. bloqjemy wszystkie funkcje w konfiguracji exchange online (active sync, owa etc)… i nadal może odbierać pocztę (SIC!) – odbierać, kasować etc.

jest tak, ponieważ sesja web dla Active Sync/outlook jest cały czas aktywna i uwierzytelniona. informacja jest scache’owana więc przeźroczyście będzie działać aż nie wygaśnie. dopiero po jakimś czasie wymusi powtórne uwierzytelnienie i przestanie działać. w środowisq on-prem trzeba wywalić sesje z serwerów CAS i pozamiatane. w chmurze takiej możliwości nie ma…

znalazłem jakieś porady polegająca na usunięciu mailboxa, poczekaniu 15 minut i przywróceniu mailboxa… ale w środowisq ADSync tego zrobić się nie da:

The following error occurred during validation in agent ‘Windows LiveId Agent’: ‘Unable to perform the save operation. ‘<UserName>′ is not within a valid server write scope.’ 
Click here for help…

trochę to problematyczne, bo w zasadzie aby mieć pewność, trzeba usunąć userowi licencję, co spowoduje usunięcie mailboxa. uważam, że ze względu na bezpieczeństwo to rozwiązanie pozostawia sporo do życzenia.

i taka ciekawostka dotycząca odpowiedzi automatycznej. skoro pracownik nie będzie już korzystał ze skrzynki, to:

  • chcemy aby maile były przekierowywane do przełożonego
  • nadawca ma odebrać informację zwrotną typu '…proszę kontaktować się z…’

należy wiedzieć, że wyzwalaczem odpowiedzi automatycznej jest zdarzenie 'wiadomość znalazła się w skrzynce’. co oznacza, że jeśli wiadomości są przekierowywane *bez kopii* do skrzynki lokalnej, to autoodpowiedź *nie zadziała*.

eN.

jak sprawdzić podstawowy adresy SMTP

adresy email zapisane są w atrybucie wielowartościowym proxyaddresses. adres podstawowy wyróżniony jest dużymi literami SMTP. zatem trick polega na wylistowaniu wszystkich tych wartości z tablicy, które są dużymi literami. służy do tego operator cmatch. w poniższym przykładzie dla o365:

get-msoluser -all|select userprincipalname,@{N="primarySMTP";E={$_.proxyaddresses -cmatch 'SMTP'}}

eN.

550 5.4.1 recipient@domain.com: Recipient address rejected: (Access Denied)

taka ciekawostka: exchange online. założony nowy user… tfu! odblokowany stary user. standard nazewniczy loginów jest jakiś-tam więc każdemu userowi dodaje się imie.nazwisko@domena.com . wszystkim działa.. temu nie. serwer zwraca błąd 5.4.1 acc denied. czytam sobie linki z opisami – wszyscy sugerują zmianę typu domeny na Internal Relay czyli „domenę przekazywania wewnętrznego” [te polskie nazwy. ciągle nie mogę się połapać w tym panelu. PowerShell RZĄDZI! (: ].

co to oznacza? to oznacza, że trzebaby uznać, że adresy wewnętrzne są… adresami zewnętrznymi. no może i zaczęłoby działać, ale nie akceptuję takiej bzdury.

po wielu testach i 2o minutach później działa. rozwiązanie:

sprawdzam jakie są adresy zdefiniowane, zmieniam alias z głównym, a potem z powrotem.

get-mailbox uname|select emailaddr*

EmailAddresses                                                                                EmailAddressPolicyEnabled
--------------                                                                                -------------------------
{SMTP:user.name@domain.com, smtp:uname@domain.com}                                                            False

set-mailbox uname -emailaddresses SMTP:uname@domain.com,user.name@domain.com
set-mailbox uname -emailaddresses SMTP:user.name@domain.com,uname@domain.com

…i działa. niby to samo a jednak nie to samo. cytując filmografię „noone’s perfect” ewentualnie „sowy nie są tym, czym się wydają”.

eN.

 

odzyskiwanie maili w o365

bardzo fajny link do opracowania dotyczącego odzyskiwania maili w office365 – zagregowane wiadomości co, jak, dlaczego i z czego to wynika. fajna lektura nie tylko z instrukcją, ale dobrym wyjaśnieniem całego mechanizmu:

czemu jest '1/3′ w nazwie… nie wiem. nie znalazłem kolejnych części a w tej wydaje się być wszystko co potrzeba. informacja, która straciła na aktualności [to art z 2o12] to dostępność aplikacji do backupu o365 – ponieważ tych już się trochę pojawiło. i jeszcze wyciągnięty z tegoż artu link z apką, która wchodzi na stałe do mojego menu:

eN.