はじめに
こんにちは! 株式会社ABEJAで情シスをしている世古です。本記事はABEJAアドベントカレンダー2022の14日目の記事です!
今回は「AzureADの条件付きアクセスをポリシーをTerraformで作ってみた」という内容の実装の部分を架空の設定を用いて簡単にお話できたらなと思います!
なぜやるのか
作業ミスの防止
- GUIでぽちぽちやると集中力が切れたときにミスが起きやすい
作業効率の向上
- コード化することにより、大量の設定適用が楽になる。また設定の確認が捗る。
モダンな情シスっぽくてモテそうだから
環境準備
- Terraform、AzureCLIがインストール済であること
- 情報量(コード)を減らすために架空の設定です(ベストプラクティスではないです)
※インストールしてない方は以下を実行するとインストール可能です
# AzureCLI $ brew install azure-cli # Terraform $ brew tap hashicorp/tap $ brew install hashicorp/tap/terraform
- 本記事では下記環境を前提にすすめております
M1 Mac Azure-cli 2.43.0 Terraform v1.3.6
今回の実装想定
今回は、「特定のグループがGoogleWorkspace(GWS)、Slackへのアクセスするときに条件に満たしてない場合はアクセス不可にしたい」というポリシーを実装してみます。
※本設定を適用するグループ名をグループAとします
- グループAであること
- 制限の対象サービスはGWS、Slack
- MFA設定がされていることが必須
- 端末がAzureADのポリシーに準拠しているか
- 適用するPlatform
- Mac, Windows, iOS, Android
実装
1.最初にAzureADにログインします
$ az login --allow-no-subscriptions
※MicrosoftGraph経由で実装する方法もありますが今回は利用せずにAzureCLI経由で認証をします
2.ディレクトリを作成して移動します
$ mkdir azuread-conditional-access $ cd azuread-conditional-access
3.ファイルを作成します
$ touch main.tf $ touch conditional_access.tf
4.azuread
プロバイダーを定義します
TerraformでAzureADを制御するためにazureadというものを使います
なので、事前にプロバイダー情報をmain.tf
に定義しておきます
#main.tf # Configure Terraform terraform { required_version = ">=1" required_providers { azuread = { source = "hashicorp/azuread" version = "2.22.0" } } } # Configure the Azure Active Directory Provider provider "azuread" { # MicrosoftGraphで実装する場合はこの中にCredential情報を定義します }
4.条件付きアクセスの実装の部分を書いていきます
#conditional_access.tf resource "azuread_conditional_access_policy" "conditional_acccess_test" { display_name = "conditional_acccess_test" # 名前 state = "disabled" # 非アクティブ状態で作成する # enabledで作成すると設定が適用された状態で作成されるので注意が必要です conditions { client_app_types = [ "all", ] sign_in_risk_levels = [] user_risk_levels = [] applications { excluded_applications = [] included_applications = [ "37fce34f-f91b-4629-b0de-cfc39862ja1", # GWSのアプリID "82347edd-e79c-4000-a328-b2c294e429ec", # slackのアプリID ] } users { excluded_groups = [] excluded_roles = [ ] excluded_users = [] included_groups = [ "f2ff407d-ef84-4fa5-821f-a4d2f50030c5", # グループAとします ] included_roles = [] included_users = ["none"] # } platforms { # 制限するプラットフォームを記載 included_platforms = ["macOS", "windows" "android", "iOS"] } } grant_controls { built_in_controls = [ # 制限する条件でMFA必須、準拠デバイスであること "mfa", "compliantDevice" ] custom_authentication_factors = [] operator = "OR" terms_of_use = [] } timeouts {} }
コードの記述は以上です。
5.terraform plan
で設定状況確認
6.terraform apply
をすると実際に条件付きアクセスのポリシーが作成されてるはずです
中身を見ると中身も上記の既述通りに制限がかかっております(画像が増えそうなので一部だけ記載)
不要になった場合はterraform destroy
をするとterraform apply
で作成したリソースを削除することができます
参考
- 条件付きAccessPolicy の作成
- AzureADの設定をJSONでエクスポート出来る記事
https://azuread.net/archives/11676
- Azureadのドキュメント
https://registry.terraform.io/providers/hashicorp/azuread/latest/docs
採用メッセージ
ABEJAでは一緒に働く仲間を募集しています!
幅広い技術を活用・習得したい、顧客・社内メンバーと協業しながら開発したい、このブログを読んで興味を持った方は是非こちらの採用ページからエントリーください! careers.abejainc.com