Google Driveで共有設定が適切に設定されているかドライブのファイル・フォルダを一覧で調べる方法
30分くらいで作ったやつを貼っておく。
かんたんなスクリプトなのでもっと良さそうな改良版あればコメント欄なり、自分で記事お願いします!
「2021年1月6日、福岡県の新型コロナウイルス感染症陽性者に関する個人情報の漏えい」がありましたが、この漏洩事案がGoogle Driveによるものだとは存じ上げないのですが、SaaSのドライブを利用するユーザーが増えてくると(絶対数が増える)と、共有設定を間違えるニュースが増えてくると思います。
なのでDriveのファイルとフォルダが適切に共有設定されているか確認しましょう、ってお話。
データ
const results = [];
function doGet() {
writeInforInFolder(DriveApp.getRootFolder());
const text = results.join("\n");
Logger.log(text);
// Webアプリとして導入するならこんな感じ?
// return HtmlService.createHtmlOutput(text);
}
function writeInforInFolder(folder) {
if(!folder) return;
// フォルダ以下ファイルをすべて取得
const files = folder.getFiles();
while(files.hasNext()) {
const file = files.next();
results.push(`FILE,${file.getName()},${file.getSharingAccess()},${file.getUrl()}`)
}
// フォルダ配下のフォルダを取得
const folders = folder.getFolders();
if (!folders) return;
while(folders.hasNext()) {
const folder = folders.next();
results.push(`FOLDER,${folder.getName()},${folder.getSharingAccess()},${folder.getUrl()}`)
// 更に下のフォルダを検索するため再帰処理
this.writeInforInFolder(folder)
}
}
- 権限を取得とかもろもろの許可が必要
CSV形式のテキストで出力されるので、3列目がANYONEとかANYONE_WITH_LINKになっているのは確認したほうがいいと思います。
// 出力例
// 長すぎるとエラーでるので、
// return HtmlService.createHtmlOutput(text);のとこコメントアウト外してWebで見たほうがいいかも
Logging output too large. Truncating output.
// folderとfile,名前,url
FOLDER,test,PRIVATE,https://script.google.com/d/sample
FILE,無題のプロジェクト,PRIVATE,https://script.google.com/d/1i
権限は以下を確認してください。
https://developers.google.com/apps-script/reference/drive/access
- ANYONE (誰でも見れる)
- ANYONE_WITH_LINK(リンク知っている人全員)
- DOMAIN (自社のGsuiteワークスペースの人のみ)
- DOMAIN_WITH_LINK(自社のワークスペースの人でリンク知っている人のみ)
- PRIVATE (自分のみ)
基本的に機密情報は、ANYONE,ANYONE_WITH_LINKだと合うと、特に気密性高い情報はDOMAINもDOMAIN_WITH_LINKもだめかも。
気密性の高いファイルは、PRIVATEにして、必要な人だけ個別で追加していくスタイルがよいかと。