Snowflake Trust Centerでデータクラウドをもっと安全に使おう！

## Trust Centerとは

Trust CenterはSnowflakeのアカウントに存在するセキュリティリスクを統合的に評価・監視してくれる機能です。  
先日2024/5/20のリリースでPublic Preview (PuPr)になりました！  

https://docs.snowflake.com/en/user-guide/ui-trust-center  

SnowflakeのWeb UIであるSnowsight上にいつの間にか生えています。  

![top-page](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/52299130-296f-d6e5-60bd-f1a679e0ec01.png)

## 実際にはどんな感じの機能なのか

実際にセキュリティリスクの評価が行われると以下のような結果が表示されます。  
いかん、検証用のアカウントとはいえガバガバだ…  

![scan-result (1)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/f45b00e9-dc00-201b-7c21-8407e02407f2.png)

それぞれの指摘事項をクリックすると、詳細や推奨される対策方法などが表示されます。  

![scan-result (2)](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/74f47b80-e1ae-6777-d064-b546896948d2.png)

## 使い方

ACCOUNTADMINからおもむろに実行できそうですが、Trust Centerを使うためのロールを作成してから実行しましょう。  

### Trust Centerを管理できるロールの作成

```sql:snowsight
-- ロールを作成するときだけACCOUNTADMINを使う
USE ROLE ACCOUNTADMIN;

-- Trust Centerを管理できるロールを設定する
CREATE ROLE trust_center_admin_role;
GRANT APPLICATION ROLE SNOWFLAKE.TRUST_CENTER_ADMIN TO ROLE trust_center_admin_role;
GRANT ROLE trust_center_admin_role TO USER (ユーザ名);
```

### Trust Centerを閲覧できるロールの作成

```sql:snowsight
-- ロールを作成するときだけACCOUNTADMINを使う
USE ROLE ACCOUNTADMIN;

-- Trust Centerを閲覧できるロールを設定する
CREATE ROLE trust_center_viewer_role;
GRANT APPLICATION ROLE SNOWFLAKE.TRUST_CENTER_VIEWER TO ROLE trust_center_viewer_role;
GRANT ROLE trust_center_viewer_role TO USER (ユーザ名);
```

### Scanner Packagesの有効化

Trust Centerを管理できるロールに切り替えるとSnowsightのTrust CenterにScanner Packagesというタブが表示されます。  
デフォルトでCIS Benchmarksというパッケージが登録されているのでこれを使ってみましょう。  
CIS Benchmarksを選択してEnableボタンを押すと、定期実行スケジュールを聞かれるので適当に選択してあげます。  
頻度はHourly、Daily、Weeklyなどが選べます。また、タイムゾーンはUTCだけではなくTokyo (JST)なども選択できます。  
なお、Enableした直後、定期実行スケジュールと独立して1回だけ評価が実行されるようです。  

![Enable Trust Center](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/7568dcdd-747a-d3be-43df-55b4ca0fa59c.png)

しばらく待つとSTATUSがEnableになります。  

![STATUS Changed](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/0b7fbf7f-13ab-4e75-de75-14e6a75939d1.png)

Findingタブに戻ると結果が表示されます。自分のアカウントの場合は色々な指摘事項が挙がっているので、これを解消していきましょう。

![Scan Result](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/a80f7daf-f857-295a-3de4-8fbd344af06d.png)

### 指摘事項への対応

前述の通り、指摘事項をクリックすると詳細や推奨される対策方法などが表示されます。  
自分の場合はパスワード認証のユーザにMFAが設定されていない、と指摘されていますね。  

![Remediation](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/21b2d770-67cf-6221-023c-ec81aebc7f03.png)

言われた通りの手順で粛々と設定。  

![Enable MFA](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/59b17c51-72e5-4ded-9bff-3bd71022a5c0.png)

設定できました。  

![Finish to enable MFA](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/cd6a94dd-9403-8925-e162-f68bd468fda4.png)

確認したいので再評価してもらいましょう。  
すぐに評価を実行するにはScanner Packagesタブからパッケージを選択して以下のリフレッシュボタンをクリックします。  

![Rescan](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/aa57db85-55b2-aba5-63e0-11229eea82dc.png)

…が、指摘事項が消えませんでした。  
指摘事項の詳細を確認してみると、他のユーザも対象だと言われていますね。  
これはもう使わないユーザだったのでDROPしちゃいましょう。  

![Detail](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/9b29f25a-f9d7-6e97-cc75-ae4dda23dacd.png)

…が、やっぱり指摘事項が消えませんでした。  
指摘事項の詳細をさらに深堀りすると根拠になっているのは以下のようなクエリだそうです。  
このクエリが参照しているビューはリアルタイムで設定を取得するものではないようですね。  
翌日の定期実行スケジュールなどで消えるんじゃないでしょうか。  

![Query of Trust Center](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/f957970f-7409-f6aa-3441-dd9f569a83f9.png)

あとこのSNOWFLAKEユーザも対象だと言われるんですが…これって消したりできたっけ。  

![System User](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/d1a594e3-036a-86bf-be88-e984c92cf6a0.png)

### 追記

ユーザの削除は時間差で反映されました。  

![User deleted](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2917580/84b7f846-514e-17a8-5a47-f3d098a70bcf.png)


## おわりに

Trust Centerの指摘事項に対応していくだけでアカウントのセキュリティをかなり向上できそうです。  
Snowflakeは急速に機能が増えているため安全な正しい設定を維持するのも大変ですが、適切なパッケージを有効化することでかなり楽になるのではないでしょうか？  
今後も使っていきたい機能でした。