NVIDIA DGX SparkのSSDを暗号化する
とあるアレで NVIDIA DGX Sparkの検証をすることになり、ディスク暗号化にめっっっちゃ苦労したので記録します。
※私のググり力やドキュメント読解能力の問題なのですが、苦労したのは事実なのでどこかの誰かに役に立つことを祈って。
DGX Sparkとは
からあげさんの記事が非常に参考になったので、こちらを見て頂けると良きと思います。
NVIDIA DGX SparkでローカルAI環境を構築してLLM・画像生成AIを動かしてみた
本題
暗号化の方法について。
下記URLに記載の内容で暗号化出来ます。
LUKSを使って暗号化しますので、OS再インストールが必要ですのでそこだけご注意です。
※タイトルがなんか違う感ありますが、正真正銘(?)これです。
DGX Spark OS ISO Download - DGX Spark / GB10 - NVIDIA Developer Forums
事前準備
https://enterprise-support.nvidia.com/s/announcement/a4zVv000000DqDh/nvidia-dgx-os-72-release からDGXOS-7.2.3-2025-10-04-06-28-28-arm64.isoを入手しておきます。
NVIDIA のエンタープライズアカウントが必要なので販社からダウンロードしてもらいましょう。
ISOを無事に手に入れたらUSBメディアかDVDなどに焼きましょう。ちなみに9GB超あるのでDVDの場合は二層式とかじゃ無いと書き込めないので注意です。
暗号化までのステップ
上記に書いてありますが、やってきます。
- 事前準備で用意したISOをDGX Sparkに接続しておく。
- DGX Sparkを起動してNVIDIAロゴが出たらDELキーを連打してBIOSに入る。
- TPMを有効にする。※詳細のメモ忘れたので後で書きます
- 事前準備で用意したISOを指定してbootする。
- bootメニューからは下記を選択。
- DGX Spark Installation Options
- Advanced Installation Options
- Install DGX OS 7.2.3 with Encrypted Root for DGX Spark
- インストールが終わったら復号キー(後述)を入力して、初期セットアップを実施(ここは前述したからあげさんの記事を参考に)
- GNOMEが起動したらターミナルを起動して下記を入力(こうすることでFileVaultやbitlockerみたいにTPMによる復号が出来るので楽になる)
-
#install needed packages
apt-get -y install clevis clevis-tpm2 clevis-luks clevis-initramfs initramfs-tools tss2 tpm2-tools
#Take ownership of TPM
tpm2_clear#proceed
echo -n Enter LUKS password:
read -s LUKSKEY
echo “”#If you want some security behind your tpm
#This will set up the clevis key on the luks slot after the one you have already set up (which is slot 0).
#You can list these with cryptsetup luksDump /dev/nvme0n1p3
#The pcr_id’s show how secure you want your tpm2 setup to be, or you can test by omitting this part completely.
#See PCR choices below.
clevis luks bind -d /dev/nvme0n1p3 tpm2 ‘{“pcr_bank”:“sha256”, “pcr_ids”:“1,7”}’ <<< “$LUKSKEY”update-initramfs -u -k all
- ※上記のダブルクオテーションとシングルクオテーションは全角になってしまってるので半角に変えてください。
- 以上!
復号キーについて
最初、暗号化してインストールしたら初回起動時に当然のようにLUKSの復号パスワードを求められてとても混乱したが、このマニュアルの32Pに書いてます。(というか最初からマニュアル読んでおけば苦労しなかった疑惑もありますが前述のISOがエンタープライズアカじゃないとダウンロード出来ないというトラップ?もありなかなか初見では気づかず)
nvidia3dです。
https://docs.nvidia.com/dgx/dgx-os-7-user-guide/dgx-os-7-user-guide.pdf
以上です。
マニュアルとかをちゃんと読み込めば分かることも多かったと思いますが、私はなかなか苦労しました。
また/を暗号化インストールしたとしても復号化キーはマニュアルにしっかり記載されてるのでTPMキーによる復号を有効にしないとあんまり意味ないというのもあり、そこも地味にトラップだと思います。
Firefox x Entra IDで プラットフォームSSOできた
この記事は何か
Microsoft Entra IDへの認証方式の一つである、プラットフォームSSOをMacのFirefoxからも出来るようにしたという話しです。
そもそもプラットフォームSSOとは?
- MacをEntra IDに登録(AzureAD Joined)状態にすることで、そのMacは信用されたデバイスとしてパスワード入力やスマホなど多要素認証器などは不要でパスワードレスログイン出来る仕組みです。
- 内部的にはパスキーとして登録される模様です。
- 詳細は下記をご参照ください。
プラットフォームSSOの構築方法
私の環境はMDMはIntuneではなくJamfを使っているのですが、下記の記事が非常にわかりやすくほぼ下記の内容で実装しました。 そのため本記事ではプラットフォームSSO自体の構築方法は割愛します。
Jamf Pro + Microsoft Entra ID で macOS プラットフォーム シングル サインオン (PSSO) を構成する
本題
- どらやらプラットフォームSSOで利用できるブラウザはSafariとChromeのみが対象のようです。
- FirefoxにはMicrosoftシングルサインオンの拡張機能が提供されていないため。
- Safari は拡張機能入れなくてもデフォルトで対応しています。
- ただ私はFirefoxでも対応させたいので方法を調べたところ下記サイトが見つかったので下記サイトに従って構築してみました。
FirefoxをプラットフォームSSO対応させる方法
- ターミナルから
vi /Library/Managed\ Preferences/org.mozilla.firefox.plistでファイルを作成する。 下記内容で保存する。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" " http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>EnterprisePoliciesEnabled</key> <true/> <key>MicrosoftEntraSSO</key> <true/> </dict> </plist>
plutil -lint org.mozilla.firefox.plistでエラーが出ないことを確認- Firefoxを再起動して、パスワードとか聞かれずにパスワードレスでログインできるか確認。
以上です。 公式の手順ではないので、環境によってはうまくいかないかも?なのでそこはご容赦ください。
Zapier×Googleフォームで労務相談プライベートチャンネル作成を自動化してみた

この記事でわかること
- 労務相談用のSlackプライベートチャンネル作成自動化をノーコードでやる。
- この記事の対応で
roumu-<<問い合わせ社員のメールアドレスホスト部>>-<<実行日時>>といったチャンネル名のものが自動生成される。
- この記事の対応で
- 実装方法はZapierとGoogleフォーム(+労務メンバー管理でスプレッドシート)を利用。
経緯
- 現職の労務の方から こんな記事のようなことやりたい〜! と相談されたことがきっかけ。
- 上記記事だとショートカットコマンドを使っているが、コードで実装が面倒だったのでノーコードでなんとかできんかなという思いから、試してみることに。
この構成のメリット
事前準備
Googleフォームの準備(クリックすると詳細が展開されます)
①下記のようなフォームを作成する。
②回答の メールアドレスを収集する を 確認済にする
Zapier実装(全体像)

Zapier実装(詳細)
※詳細は各項目をクリックすると展開されるようにしています。
フォーム入力者のSlackIDを取得する(Find User by Email in Slack)
Find user by Emailでフォーム送信したユーザーのメールアドレスをSlack IDに変換します。(そうしないと招待処理できないので)
フォーム実行日時を取得する(Date / Time in Formatter by Zapier)
念の為の対応として、プライベートチャンネルの末尾にフォーム送信日時を付与したいので、そのための対応
Formatter by Zapierで現在の実行日時を取得。
→ フォーム実行日時を付与しておくことで、同一人物からの別の労務相談チャンネルが作成できるようにするため。
ポイント1: inputには{{zap_meta_human_now}}という変数(現在の実行日時を示す変数) を入れておく。
ポイント2: To TimezoneにはAsia/Tokyoを、From TimezoneにはUTCを入れておく。こうしておかないとアメリカ時間になっちゃう。
メールアドレスのドットをハイフンに変換(Text in Formatter by Zapier)
Slackチャンネル名にはドットが使えないのでドット部分をハイフンに変換。
プライベートチャンネルを作成する(Create Private Channel in Slack)
プライベートチャンネル作成処理
roumu-のあとに、3. フォーム実行日時を取得するとメールアドレスのドットをハイフンに変換の結果を指定して連結します。
フォーム入力者を作成したプライベートチャンネルに招待する(Invite User to Channel in Slack)
Channelに6. プライベートチャンネルを作成するの Result Channel Id を指定し、Usersに2. フォーム入力者のSlackIDを取得するで得られた ID を指定します。
注意点: ChannelとUsersにはデフォルトでは入力できない模様なので、横にあるハンバーガーメニューから"Custom"というのを選択すると入力できるようになります。
Zapierで日付加工処理をある程度柔軟にしてNotionの繰り返し予定の件名を更新する
この記事は?
下記悩みを解決した記事です。
- NotionのDatabaseの繰り返し予定は便利だけど、件名にYYYYMMDD形式といった内容を入れられない。
- ZapierでNotionページを作ると件名は柔軟に使えるが、Notionのテンプレートが使えない。
両方のいいとこどりをしたいのにーーーー!となったので考えました。 上記を短絡的に解決しようとするとAWS Lambda とか GASで頑張りたくなるのですがそうしないための記事です。
Notion手順
- Notion DBで繰り返し予定を作成する。
- これは任意で好きなテンプレートを使って良いです。件名も適当でいいです。
- これだけです。ここはNotionの通常機能なので詳細は https://www.notion.so/ja-jp/releases/2022-11-08 を参照ください。
Zapier手順
Zapierで下記のような感じでAutomationを組む。 全体像は↓です。

Trigger
New Database Itemで指定のDatabaseが作られたら発火するようにします。
時間計算処理
フォーマットを変換
Notionページの件名を修正
以上です!私はついでに、Slack通知もNotionでやってもらうことにしました。
ちょっと怖いところ
- Step4で「あんたループしてますよ」とエラー表示されている。
- そんなことないと思うんだけどな。。

参考にさせていただいた記事(感謝)
社内ブログに投稿しました
ヘルプデスク業務を楽にするためにSlackとGitHub Projectsを同期するヘルプデスクツールを自作したtech.mntsq.co.jp という記事を投稿しました。
こんなこと書いてます。
ヘルプデスク業務を楽にするためのツールを作成した話。 GitHub ProjectのItemとSlackを双方向同期したり、Azure OpenAI等を利用して効率化したりしてます。
hot entryにもなりました(嬉しい)https://x.com/hatebu/status/1727877377370489186?s=20
SlackのEnterprise GridでAdmin APIを使えるようにするまで
この記事は?
- Slack Enterprise Gridプランで使えるAdmin系のAPIで利用するためのTokenを入手するまでの手順。
- 「色々試してうまくいった」という感じなのでお作法やら何やらが間違っている可能性あり。
参考にさせていただいたURL
この手順書の最終ゴール
作成されたTokenを使って admin.teams.lis のテスターページから、管理化にあるSlackワークスペースの一覧が表示できるようになること。
前提条件
- 作業環境はMacを想定しています。 ※Windowsの方は適宜、読み替えてください。
- Node.JSが動く環境を想定しています。
Node.JS インストールとうでググれば環境構築手順は多数出てくるので、この資料では環境構築については省きます。
手順概要
- [Slack] 適当なSlack Appを作る。
- アプリ作成時の初期画面で、
From an app manifestを選択して、下記JSONを指定してください。 - 権限として、
"admin.teams:read"を利用することにしているので権限を変えたければ、アプリ作成後に OAuth & Permissions のメニューから必要な権限を選択してください。 - インストール先のSlackワークスペースはどこでもいいです。
{ "display_information": { "name": "admin_teams_read" }, "oauth_config": { "redirect_urls": [ "https://localhost:3000" ], "scopes": { "user": [ "admin.teams:read" ] } }, "settings": { "org_deploy_enabled": false, "socket_mode_enabled": false, "token_rotation_enabled": false } }
- アプリ作成時の初期画面で、
- 作成された画面のApp Credentialsという項目に、Client IDとClient Secretの項目があるので、それぞれメモしておく。(※あとで使う)
- [Slack] Manage Distribution メニューを選択して、Remove Hard Coded Information の欄にチェックを入れて、 Activate Public Distribution を選択する。
- [Slack] 同画面の上部に Shareble URL という項目があるので、それに記載してあるURLをメモしておく。(※あとで使う)
- [PC] OAuth2サーバ用の自己証明書を作成する。
- すぐに利用しなくなる証明書なので
/tmp配下に作成しておく。 mkdir -p /tmp/slack-oauth2.0-client cd /tmp/slack-oauth2.0-client openssl genrsa 2048 > server.key #※証明書について色々聞かれるが「Locality Name」だけ「JP」と答えて、あとは未入力。 openssl req -new -key server.key > server.csr # You are about to be asked to enter information that will be incorporated # into your certificate request. # What you are about to enter is what is called a Distinguished Name or a DN. # There are quite a few fields but you can leave some blank # For some fields there will be a default value, # If you enter '.', the field will be left blank. # ----- # Country Name (2 letter code) []:JP <-ここだけJPにする # State or Province Name (full name) []: # Locality Name (eg, city) []: # Organization Name (eg, company) []: # Organizational Unit Name (eg, section) []: # Common Name (eg, fully qualified host name) []: # Email Address []: # # Please enter the following 'extra' attributes # to be sent with your certificate request # A challenge password []: openssl x509 -days 3650 -req -sha256 -signkey server.key < server.csr > server.crt
- すぐに利用しなくなる証明書なので
- [PC]作業ディレクトリを作成し、そこにOAuth2サーバー用のスクリプトを配置する。
- 配置するのは下記のapp.jsとpackage.jsonです。
- app.js
const request = require('request'); const express = require('express'); const app = express(); const fs = require("fs"); const slack_client_id = process.env.SLACK_CLIENT_ID; const slack_client_secret = process.env.SLACK_CLIENT_SECRET; app.get('/', (req, res) => { // 認可コードの取得 const code = req.query["code"]; // 認可コードを使って、アクセストークンをリクエストする request({ url: "https://slack.com/api/oauth.v2.access", method: "POST", form: { client_id: slack_client_id, client_secret: slack_client_secret, code: code, redirect_uri: "https://localhost:3000/" } }, (error, response, body) => { // レスポンスからアクセストークンを取得する const param = JSON.parse(body); console.log(param); const access_token = param['access_token']; // アクセストークン }) }) // http サーバ var http = require("http").Server(app); // http サーバを立てる http.listen(80); // 80番ポートで待つ var opt = { // SSL 認証のパラメータ key: fs.readFileSync("/tmp/slack-oauth2.0-client/server.key"), // 秘密鍵 cert: fs.readFileSync("/tmp/slack-oauth2.0-client/server.crt"), // 証明書 //passphrase: "password", // パスワードを設定した場合 }; var https = require("https").Server(opt, app); // https サーバを立てる https.listen(3000, () =>{ console.log('HTTP Server(3000) is running.'); });
- package.json
{ "dependencies": { "cors": "^2.8.5", "express": "^4.17.0", "request": "^2.88.0" } }
- app.js
- 配置するのは下記のapp.jsとpackage.jsonです。
- [PC]
npm installコマンドで初期化しておく。 - [PC]手順2でメモしておいた Client IDとClient Secretを下記のように一時的に環境変数に入れておく。
export SLACK_CLIENT_ID="メモしたClient ID" export SLACK_CLIENT_SECRET="メモしたClient Secret"
node app.jsでOAuth2サーバを起動して待ち受けておく。- [PC] 手順4でメモしたShareble URLの末尾に
&redirect_uri=https://localhost:3000/とつけたURLを適当なブラウザで開く。 - [PC] Slackの認証画面が表示され、画面右上の方にSlackワークスペースを選択する画面が表示されるので、オーガナイゼーションのSlackワークスペース(一番親のワークスペース)を選択して、 Allow ボタンを選択。
- [PC]手順9で立ち上げていたOAuth2サーバのコンソールに access_token という値があるのでそれが今回の目的のSlack Tokenなので、それをメモしておく。

- 手順11でアクセスしたSlackの画面はグルグルとロード画面のままになっているが☓ボタンで閉じてOK。
- 以上
試してみる
- admin.teams.list のテスター画面にて取得したTokenを指定してみる。
- 意図した結果になればOK。
情シス向けのローカル環境でのTerraformテスト環境構築方法
この記事について
- 社内の情シスメンバー向けに勉強会的なものをやったときにステップバイステップで環境構築できるように説明した資料。
- ※SREなどガチガチのインフラ屋さんなどには情報量が薄いので、この記事の内容は適しませんので、このページはそっ閉じしてください。
- 勉強会時には記述していたが、ブログ記載にあたり記述内容を削除、修正しているところがあります。故に、一部説明が不十分な箇所があります。
- 特に肝心な認証周りの記述については、記載内容薄めです。
- 社内勉強用には認証周りの記述もしていたのですが、さすがに機微な情報なので...。
- 特に肝心な認証周りの記述については、記載内容薄めです。
- 既に社内でTerraform環境によるデプロイができている状態の人向け。
- 他の人がTerraformによるCI/CD環境構築してくれているが、「管理者が自分に変わってしまった!」等で、サクッと自分のPC(Macを想定)でTerraformの挙動を試してみたい方向け。
- お題として、「AzureAD環境にあるユーザーを操作する」 みたいな感じで書いてますが、適宜ご自身の会社の環境に読み替えてください。
- 余談:AzureADをTerraform管理下に置くためのファーストステップには以前にそんな感じの記事を書いたのでそちらを参照ください。 ※記事の内容が古いのでいずれ直します。。
最終形
下記のようなことができるようになること。
- terraformコマンドの基本的なものが理解できる。
- ローカルPCにてTerraformのインストール & バージョン切り替えができる。
- terraform planでtfファイルと実環境の差分を見れること。
- 特定リソース(今回はダミーのAzureADユーザーを作成)をimportできること。
- やらかしてしまった ときのterraform stateの修正方法。
実践編1: terraformコマンドの基本を理解
情シス的に下記を知っていればだいたいは対処できる系のコマンド(多分)
terraform init- terraformコマンドを叩くための初期化コマンド
- これを実行すると各種providerなど必要なものをダウンロードして実行環境整えてくれる
- terraformコマンドを叩くための初期化コマンド
terraform plan- 現行のtfファイルと相手先の環境が合っているかの確認コマンド
terraform apply- 現行のtfファイルの内容で相手先環境を更新
- terraform import
- 相手先リソースの内容をstateファイルに書き込む
terraform state pull > 出力先ファイルパス.json- 現行の構成状態(stateファイル)を取得 ※テキストに出力したい場合は
>とかで外部出力する。- ※出力したファイルを別のフォルダとかにコピーしておくと更に安全。
- バックアップファイル自体を削除したり、改変しちゃったときに別場所にコピーしたものからも復旧できるので。(バックアップはいくつあってもいい)
- 現行の構成状態(stateファイル)を取得 ※テキストに出力したい場合は
terraform state -force push- ローカルにあるstateファイルの内容で更新。
- forceつけとかないと大概の場合うまくいかない。
- これを実施するときは最終手段。(何かしらのリカバリ系)
- ローカルにあるstateファイルの内容で更新。
- 地味に使う技: コマンドに
-var "変数名=値"- tfファイルに環境ごとで違う変数をわたしたいときに使う
- 例: -var “env=prod” とするとenvという変数にprodを入れた状態でTerraformを実行できる。
- tfファイルに環境ごとで違う変数をわたしたいときに使う
実践編2: terraformをローカルPCにインストールする。
- Terraformはバージョンを変えることが割とあります。
- バージョンが違うとtfファイルの書き方が変わるなど
そのため、Terraformのバージョン変更や変更が容易な tfenv を用います。
手順
- ターミナルで
brew install tfenvコマンドでtfenvをインストール。 - パスを通すために、一旦ターミナルを終了、再度起動。
tfenv --versionでバージョンが表示されることを確認。- ご自身のプロジェクトで何のTerraformバージョンが使われているか調べるために
terraform {と言ったキーワードで検索。required_version = "1.2.5"みたいになっていれば、それがそのプロジェクトのバージョンです。- まぁ確認しなくても、違うバージョン使うと このバージョン使ってね! というエラーが出て、怒られるのでこんなことしなくても大丈夫そう…
tfenv install <<バージョン>>で指定されたTerraformのバージョンをインストールしつつ、tfenv use <<バージョン>>で利用するTerraformバージョンを指定する。terraform --versionで指定されたバージョンがインストールされたことを確認。
- ターミナルで
実践編3: terraform planでtfファイルと実環境の差分を見れること。
※下記は環境により異なるので一例。
- 各環境に合わせた認証情報をターミナル上でセットする。
応用編1: AzureADの特定リソース(今回はAzureADユーザー)をimportする
- AzureADで適当なユーザーを作成。
- そのユーザーのページを開いて、 オブジェクト ID をメモする。
- 作業ミス時リカバリ対応のため現状のstateファイルのバックアップを取得しておく。
terraform state pull > statefile_backup.txt
- importする。今回使うリソースは azuread_user。
- リンク先の末尾に import文の例がある。
- 今回だと
terraform import azuread_user.my_user 00000000-0000-0000-0000-000000000000my_userの部分がtfファイルに記載した名前。000000〜の部分にオブジェクトIDを指定する。
- 今回だと
- リンク先の末尾に import文の例がある。
user-test.tfと言った形の拡張子.tf の適当なテキストファイルを用意し、下記のように作成する。
jsx resource "azuread_user" "my_user" {- 試しに
terraform planしてみる。- 差分が表示されるので、差分がなくなるように作成したtfファイル(上記例だとuser-test.tf)を追記、修正する。
応用編2: やらかしてしまった ときのterraform stateの修正方法。
※上記の 応用編1 の変更内容を「やらかしてしまった」と仮定して、応用編1の変更内容をなかったことにします。
(この操作によりリカバリ操作の雰囲気がつかめるはず)
- 応用編1 で取得したバックアップファイルの
statefile_backup.txtを使います。 terraform state push -force statefile_backup.txtを実行。- これをすることで応用編1 の変更内容の前の状態に戻せる。
terraform plan -var "env=prod"を実行。- 応用編1 と違い、新規リソースが作成しようとする挙動になることを確認。






















