[Dd]enzow(ill)? with DB and Python

DBとか資格とかPythonとかの話をつらつらと

AWS WorkMail をboto3でユーザー登録する

AWS WorkMail、便利ですね。AWSが提供しているメールサービスで、独自ドメインでメールの送受信ができます。自社のサービスでは、お客様ごとにメールアドレスを発行しており、その際にWorkMailを使っています。

現在は契約処理の一環で担当者がWorkMailにアカウントを作成していますが、これを自動化するための調査をしました。当たり前ですが、使うのはboto3です。よっぽどマニアックな処理でなければ、AWSコンソールからできる作業はboto3でできますね。

WorkMailのアカウント作成の流れ

まず、AWSコンソールでWorkMail利用までの流れを確認しておきます。WorkMailは以下のリージョンでのみ利用できます。

  • us-east-1
  • us-west-2
  • eu-west-1

メールの送受信をするには以下の流れが必要です。

  • Organizationsの作成とDomainの作成
  • Userの作成
  • Userを有効化

このあたりは少し古いですが以下の記事がわかりやすいかったです。

previewが通ったのでAmazon WorkMailを触ってみた https://dev.classmethod.jp/cloud/aws/introduce-of-amazon-workmail/

Organizationsの作成とDomainの作成は通常一回作るだけですので自動化するメリットはないので今回は行いません。Userの作成Userの有効化をboto3で自動化していきます。

boto3でのWorkMail

基本的にはドキュメントを見ればわかりますが、もう少し具体的に見ていきます。

Clientの作成

他のboto3での使い方と同様、まずはアクセスキー等を指定して接続を行います。

import boto3

wm_client = boto3.client(
    'workmail',
    aws_access_key_id=AWS_WM_ACCESS_KEY,
    aws_secret_access_key=AWS_WM_SECRET_KEY,
    region_name=REGION_NAME
)

ユーザの作成

ユーザを作成するにはOrganizationのIDが必要です。AWSコンソールで確認しておきます。

WorkMail -> 対象のOrganization -> Organization Settings

f:id:denzow:20180113173529p:plain
WorkMailのOrganization settings

このIDを元にユーザを作成します。

response = wm_client.create_user(
    OrganizationId='事前に確認したOrganizationID',
    Name='作成するユーザ名',
    DisplayName='表示名',
    Password='アカウントパスワード'
)

この後作成されるメールアドレスはデフォルトではName@domainの形式になります。特に要件がなければこの点を踏まえたNameを指定しておきます。

無事に作成できた場合はresponse['UserId']に作成されたユーザのIDが入っていますので、これを後段の処理に利用します。

ユーザの有効化

create_userした時点ではユーザはメールの送受信が出来る状態にはなっていません。AWSコンソール上ではDisabledとなっています。そのためregister_to_work_mailを実行します。

wm_client.register_to_work_mail(
    OrganizationId='事前に確認したOrganizationID', 
    EntityId='先ほど作成したUserId',
    Email='作成するメールアドレス'
)

これを実行することでユーザのステータスがEnabledに変更され、有効なアドレスとして利用できるようになります。

ユーザの削除について

念のため削除も確認しておきます。delete_userを実行すればよいのですが、Enabledなユーザは消せないため事前にderegister_from_work_mailDisabledにしておく必要があります。

wm_client.deregister_from_work_mail(
    OrganizationId='事前に確認したOrganizationID', 
    EntityId='削除するユーザのUserId'
)

wm_client.delete_user(
    OrganizationId='事前に確認したOrganizationID', 
    EntityId='削除するユーザのUserId'
)

これでユーザの削除は完了です。

まとめ

WorkMailのユーザ作成・削除をboto3で行う手順を確認しました。これらを利用することで自身のサービスの特定の処理をフックにしてアドレスを自動で払い出すことも容易に対応できそうです。