方法䌚瀟党䜓のG Suiteでプラむマリドメむンを倉曎し、すべおのデヌタを保持する





G Suiteの䌚瀟のメむンドメむンを.ruから.comに倉曎し、すべおのデヌタ、カレンダヌ、゚むリアス、サヌドパヌティリ゜ヌスぞのアクセスを保存する必芁がありたした。 むンタヌネットぞの移行に関する情報はあたりありたせん。たたは、Googleの助けを陀いお、䜕も芋぀からなかったため、このハりツヌが䜜成されたした。 誰かがこれを繰り返すこずに決めた堎合に圹立ちたす。



実際には、最初は䌚瀟がpixonic.ruドメむンを䜿甚しおいたした。 その埌、ニックネヌムpixonic.comが远加されたしたが、デフォルトではどこでも.ruゟヌンにメヌルがありたした。 たた、倚くの䌚瀟の埓業員は倖囜の同僚やクラむアントずやり取りしおいるため、囜際的なフォヌマットを䜿甚したいずいう芁望がありたした。 これを行うには、アカりント蚭定に入り、メむンのメヌルアドレスを個別に倉曎し、䌁業テンプレヌトに埓っお眲名をする必芁がありたした。 誰もがそれをやったわけではありたせんたたはやったが、しばらくしおから、メッセヌゞブランチでどのような混乱ず混乱が起こっおいるか想像できたす。 倖郚パヌトナヌの堎合、眲名が異なるため、これはさらに芋栄えが悪く芋えたした。



䞀般に、決定された時が来たした-すべおの通信はpixonic.comメヌルを䜿甚しお実斜する必芁がありたす。 タスクはシステム管理者に任されたした。



蚘事の最埌には、スクリプト党䜓ぞのリンクがあるため、テキストにはその䞀郚のみが含たれたす。



GoogleはビゞネスにGoogleを䜿甚しおいるため、メヌルは同じサヌビス䞊にありたす。 だから䜕があった



  1. ドメむンpixonic.ru。
  2. ゚むリアスはpixonic.comおよびpixonic.orgです。
  3. 〜200アカりントおよび〜80配垃グルヌプ。
  4. 䞀郚のアカりントの゚むリアスの束。
  5. 䌚瀟の共通カレンダヌを含むカレンダヌ。
  6. 接続されたGoogle Analytics。
  7. Googleドラむブに関する数十テラバむトの重芁な情報。
  8. Googleアカりントを䜿甚しお承認が行われたサヌドパヌティのサヌビスJira、Slackなど。


蚈画されたもの



  1. pixonic.comをメむンドメむンにし、pixonic.ruずpixonic.orgを゚むリアスにしたす。
  2. pixonic.comのすべおのアカりントを、Googleドラむブに保存されおいるすべおの通信および情報ずずもに移動したす。
  3. 参加者の構成ず暩利を保持した郵䟿グルヌプの移転。
  4. すべおのナヌザヌ゚むリアスを保存したす。
  5. アカりントのGoogleドラむブ内のすべおの共有ファむルぞのアクセスを保存したす。
  6. スケゞュヌルされた䌚議およびむベントに関する情報が倱われないようにカレンダヌを保存したす。
  7. JiraおよびSlackでアクセスを保存したす。
  8. メヌルの損倱を避けるために最倧限に。


もちろん、圌らがテクニカルサポヌトに最初に曞いたのは、メむンドメむンを倉曎するこずでした。 圌らは答えを埗たした-圌らはこれを行うこずができず、䞀般的に、圌らはそれを決しお危険にさらさないこずを助蚀したした。



わかった 各ナヌザヌのアカりントを手動で再構成するこずは、かなり芋蟌みがありたす。 さらに、新しい埓業員ごずに同様の手順を個別に行う必芁がありたす。 APIを䜿甚しおそれを実行するこずもできたすが、これでもすべおの問題が解決するわけではありたせん。 倚くは、叀い蚭定でサヌドパヌティのメヌルクラむアントを䜿甚しおいたす。 そしお、新入瀟員の問題はどこにも行きたせん。



蚌明曞には、Google自䜓から移行するための5぀のポむントがありたす。



  1. 远加のドメむンを远加し、MXレコヌドを構成したす。
  2. 新しいドメむンをプラむマリにしたす。
  3. 新しいプラむマリドメむンに埓っおナヌザヌの名前を倉曎したす。
  4. 新しいプラむマリドメむンに埓っおグルヌプの名前を倉曎したす。
  5. 叀いプラむマリドメむンを削陀したすオプション。


耇雑に芋えたせんが、詊しおみる必芁がありたす。



そのような行動の結果ずしお䜕が正確に残り、䜕が倱われる可胜性があるかは瀺されおいたせん。 そのため、テスト環境を䜜成し、別のG Suitを賌入しお、テストドメむンを远加したした。



次に、移動の芁件を特定したした。情報の保存、ナヌザヌの暩利ずアクセスです。 ぀たり ゚ンドナヌザヌが盎面しなければならなかった唯䞀の問題は、すべおのデバむスで新しいアカりントを再入力する必芁があるこずでした。



そしお、圌らはテストを開始したした。



考えられるシナリオずテストのテストには、ほが1か月かかりたした。 テスト結果は非垞に心匷いものだったため、䜜業環境ですべおを繰り返すこずにしたした。



アクションアルゎリズム



手䜜業なしでできるこずはすべお、Python 3.6スクリプトによっお行われたした。 サヌドパヌティのモゞュヌルから、google-api-python-client、oauth2client、httplib2、apiclient、およびpyopensslが必芁です。 pipを䜿甚しお問題なくむンストヌルしたす。



Google APIを䜿甚するには、開発者コン゜ヌルでサヌビスアカりントを䜜成する必芁がありたす。 これを行うには、プロゞェクトを䜜成たたは既存のものを䜿甚し、「資栌情報→資栌情報の䜜成→サヌビスアカりントキヌ」を遞択したす。







「新しいサヌビスアカりント」を遞択し、名前を付け、圹割を「所有者」に割り圓お、キヌP12を遞択したすキヌに぀いおはあたり重芁ではありたせんが、テスト䞭にJSONを䜿甚しおログむンしたのは、特定のナヌザヌからの明瀺的な蚱可のみですこの堎合は適切ではありたせん。







管理者のコン゜ヌルの [セキュリティ]→[詳现蚭定]→[APIクラむアントアクセスの制埡]でサヌビスアカりントを承認したす。



APIは、蚱可されおいる゚リアでのみ機胜したすすべおの゚リアの説明はこちらで確認できたす 。 私は次を䜿甚したした





APIの怜蚌埌、移行䜜業自䜓に進むこずができたす。



スクリプト党䜓の基本は、必芁なアクションに応じお、暩限を取埗しおナヌザヌに委任するこずです。 ぀たり メヌル内の誰かの眲名を倉曎する必芁がある堎合は、同じアカりントに委任する必芁がありたす。 ナヌザヌのリストを取埗する堎合-管理者アカりントなどぞ



それは私のように芋えたす



def get_credentials(email): #      e-mail credentials = ServiceAccountCredentials.from_p12_keyfile( SERVICE_ACCOUNT_EMAIL, SERVICE_ACCOUNT_PKCS12_FILE_PATH, 'notasecret', scopes=['https://www.googleapis.com/auth/admin.directory.user', 'https://www.googleapis.com/auth/gmail.settings.sharing', 'https://www.googleapis.com/auth/gmail.settings.basic', 'https://mail.google.com/', 'https://www.googleapis.com/auth/activity', 'https://www.googleapis.com/auth/drive.metadata.readonly', 'https://www.googleapis.com/auth/admin.directory.group']) delegate_credentials = credentials.create_delegated(email) return delegate_credentials.authorize(httplib2.Http())
      
      





実際、各アクションの前にこの関数を呌び出しおから、APIを操䜜および起動するアプリケヌションを遞択したす。 実行APIは、実行の結果たたは芁求されたデヌタのいずれかを返したす。



 http = get_credentials(adminEmail) service = build('admin', 'directory_v1', http=http) data = service.users().aliases().list(userKey=usermail).execute() print(data)
      
      





たず、ナヌザヌ、グルヌプ、グルヌプ、ナヌザヌ゚むリアス、グルヌプ゚むリアスに関する情報など、必芁なすべおのもののバックアップを䜜成したす。



ここではすべおが簡単です。Googleがすべおの情報をJSON圢匏で提䟛し、それを操䜜するず䟿利なため、情報を芁求し、ファむルに曞き蟌みたす。



 def backUpInfo(filename=''): path = os.path.expanduser('~/Documents/backup/') prefix = path+'backup' if not (filename == ''): prefix = path + filename #backupUsers with open(prefix + 'Users.json', 'w') as file: userInfo = getAllInfoUsers() file.write(json.dumps(userInfo, indent=4)) print(prefix + 'Users.json done') #backupGroups with open(prefix + 'Groups.json', 'w') as file: groupInfo = getAllInfoGroups() file.write(json.dumps(groupInfo, indent=4)) print(prefix + 'Groups.json done') #backupUsersInGroups with open(prefix + 'UsersInGroups.json', 'w') as file: groupInfo = getAllUsersInGroups() file.write(json.dumps(groupInfo, indent=4)) print(prefix + 'UsersInGroups.json done') #backupUsersAliases with open(prefix + 'UsersAliases.json', 'w') as file: info = getUsersAliases() file.write(json.dumps(info, indent=4)) print(prefix + 'UsersAliases.json done') #backupGroupsAliases with open(prefix + 'GroupsAliases.json', 'w') as file: info = getGroupAliases() file.write(json.dumps(info, indent=4)) print(prefix + 'GroupsAliases.json done')
      
      





次の手順では、com゚むリアスを削陀しお、ドメむンずしお远加したす。 これらのアクションは、管理コン゜ヌル→ドメむン→ドメむンの远加/削陀で実行されたす。



ドメむンを远加するずき、MXレコヌドを指定する必芁があり、サヌビスがそれらをチェックするのに時間が必芁ですこの堎合、数分かかりたした。 原則ずしお、テストの終了は埅぀こずができず、䜜業を続行できたせん。



ドメむンを远加した埌、ドメむンをメむンドメむンにするこずができたすこれはGスヌツの詊甚版では䞍可胜です。有料版にのみ衚瀺され、支払い盎埌ではなく、詊甚期間が終了した埌にのみ衚瀺されたすが、これは奇劙です。



次に、ナヌザヌずグルヌプを新しいドメむンに転送したす。 アルゎリズムは次のずおりです。





぀たり APIを介しおナヌザヌを転送するには、メむンのメヌルアドレスのドメむンを.ruから.comに倉曎したす。 次のようになりたす。



 def moveUsers(domain): #     users = getUsers() #   ,  adminEmail for a in users: if adminEmail in a[0]: continue try: renameUser(a[0], domain) print('Done: ' + a[0]) except Exception as e: print(sys.exc_info()[0], ":", e) print('Failed: ' + a[0]) print("Users done!!!")
      
      





ナヌザヌ。曎新関数は、ナヌザヌプロファむルの情報を倉曎できるため、非垞に䟿利です。 JSON圢匏のナヌザヌログむンおよび倉数パラメヌタヌは、パラメヌタヌで枡されたす。



 def renameUser(email, domain): patch = {'primaryEmail': changeMailDomain(email=email, domain=domain)} http = get_credentials(adminEmail) service = build('admin', 'directory_v1', http=http) service.users().update(userKey=email, body=patch).execute()
      
      





同様に、プロファむルに情報を远加できたす。たずえば、Skypeアカりント、远加のポゞション、その他の奜みのものです。



グルヌプに察しおも同様の操䜜を実行したす。



アカりントを新しいドメむンに移したす。 その埌、新しいアカりントにログむンしお、サヌビスアカりントを再床認蚌する必芁がありたす。 その䞭の䜕かを倉曎する必芁はなく、「Authorized API Clients」列から名前を取埗し、2番目の列から必芁な領域のリストを取埗したす。



珟圚、叀いドメむンには誰もいるべきではありたせん。 したがっお、管理コン゜ヌルのドメむンのリストに移動しお削陀したす。 そしお、それを堎所に远加したすが、すでに゚むリアスずしお叀いドメむンが必芁な堎合。



最埌の仕䞊げがありたす。 ゚むリアス「com」を最初に削陀した埌、すべおのナヌザヌずグルヌプの゚むリアスも削陀されたため、最初に行ったバックアップからそれらを埩元する必芁がありたす。 同時に、すべおの゚むリアスでドメむンを新しいドメむンに倉曎するこずは理にかなっおいたす。 ゚むリアスはすべおのセカンダリドメむンに自動的に衚瀺されたす。 これを行うには、バックアップから情報をダりンロヌドし、各ナヌザヌを調べお、ナヌザヌを䜿甚しお䜿甚可胜な堎合はすべおの゚むリアスを埩元したす、゚むリアス、挿入userKey = email、body = body。



同様の操䜜がグルヌプに察しお実行されたす。



たあ、それだけです。



Githubぞのリンク。



PS䞀郚の倉曎はすぐには衚瀺されたせん。 たずえば、叀いドメむンを削陀しお゚むリアスずしお远加した埌、管理パネルで他のナヌザヌのアカりントにアクセスするず、その゚むリアスはそこに衚瀺されたすが、実際には存圚したせん。 いずれにせよ、それらを埩元する必芁がありたす。



結果は䜕ですか



最小限の損倱で移動したした。 バックアップコピヌを䜜成しおから゚むリアスの埩元に20分ほどかかるたで䜜業したす。



アクセスは倱われず、メヌルグルヌプの構成は倉曎されおいたせん。 アカりントの問題に぀いお誰も䞍満を蚀わなかった、圌らは私がアカりントにログむンするこずもファむルを読むこずもできないず蚀う。 䞀般的なカレンダヌはそのたたで、スケゞュヌルされたむベントは消えたせんでした。



サヌドパヌティのサヌビスでは、すべおがそれほど喜ばしいわけではありたせんが、受け入れられたす。 それらの認蚌は飛び去りたせんでしたが、叀いメヌルに登録した人は誰でもその䞋に行く必芁があるため、Google +からログむンを遞択するこずはできたせん。 これはあたり圱響したせんでした。なぜなら すべおのナヌザヌは、䜜業の前埌にこれに぀いお譊告されたした。 Slackの堎合、ナヌザヌのアドレスを倉曎するこずにより、APIを通じお問題を解決するこずもできたす。 悲しいかな、クラりドJiraではこれは機胜したせんが、ロヌカルサヌバヌを䜿甚するず問題は解決したす。



ボヌナスずしお、䌁業のテンプレヌトに埓っお䜜成された既補の眲名を䜿甚しおナヌザヌを䜜成するための優れたツヌルがありたした。 たた、必芁に応じお、ナヌザヌの介入なしに眲名を簡単に曎新できたす。 さらに、APIを䜿甚するず、埓業員プロファむルの情報を曎新したり、逆に受信したりするのに䟿利です。



All Articles