Snowflakeエディションに関するメモ (Architect)

## これは何？

 Snowflakeエディションについてまとめてみたメモ。

## 公式情報

### エディションについて

こちら : https://docs.snowflake.com/ja/user-guide/intro-editions
主な機能 : https://docs.snowflake.com/ja/user-guide/intro-supported-features

- Standard Edition
    - これがベースになる
    - これでカバーできるようなビジネスユースケースはあまり問われないと思うのでEnterprise Edition以上で使える機能を把握しておくことが重要
- Enterprise Edition
    - (大規模)企業向けの最低限はこれ
    - 外部トークン化において、トークン化プロバイダーを`Snowflake外部トークン化に統合`することを選択した場合は、少なくともこのエディションが必要
        - 外部トークン化自体や、それに必要な外部関数はStandard Editionでもできる点は若干ひっかけポイント
        - `Snowflake外部トークン化`と`統合`というのがキーワード
- `Business Critical Edition`
    - 非常に機密性の高いデータを安全に扱うような`データ保護機能`を備える
        - `PHI`/`PCI DSS`/FedRAMP/ITAR/IRAPなど
    - 「Snowflakeアカウント間」におけるフェールオーバーおよびフェールバックも可能になる
    - 「`プライベート接続`」も使える
        - Snowflakeサービスへのプライベート接続のサポート
            - AWS PrivateLink
            - Azure PrivateLink
            - Google Cloud Private Service Connect
        - Snowflake内部ステージへのプライベート接続のサポート
            - AWS PrivateLink
            - Azure PrivateLink
            - こちらはGCPはなさそう
        - 外部関数向けのAmazon API Gatewayプライベートエンドポイント
            - AWSのみっぽい
- Virtual Private Snowflake（VPS）
    - Business Critical Editionよりも高いセキュリティ要件が求められるようなケースに
    - デフォルトではシェアに関する機能は提供されない(サポート経由で有効化は可能)
        - [こちら](https://other-docs.snowflake.com/ja/collaboration/provider-listings-auto-fulfillment#label-listings-auto-fulfill-vps)参照

### エディションを跨いだシェアについて

これも把握しておく必要がある。

特に`Business Critical Editionから他のエディションに対してデータ共有(シェア)`する場合には注意点がある。

#### Business Critical Editionから他エディションへのシェア

[公式](https://docs.snowflake.com/ja/user-guide/override_share_restrictions)より、

> デフォルトでは、SnowflakeはBusiness CriticalアカウントからBusiness Critical以外のアカウントへのデータ共有を許可していません

とのこと。

その理由はデータの保護レベルが違うことに起因している模様。
自分のアカウントより保護レベルが弱いアカウントにシェアすることに対して規制がかかっているイメージ。
`デフォルトではシェアできない`が、設定変更によってシェアできます、シェアする側(プロバイダー)の自己責任でお願いします、といった感じ。

詳細は[こちら](https://docs.snowflake.com/ja/user-guide/data-sharing-provider#label-esd-data-sharing)。

Business Critical Editionから他エディションへのシェアは有効化されていないことがわかる。

シェアする場合の注意事項に関して、[こちら](https://docs.snowflake.com/ja/user-guide/override_share_restrictions)と[こちら](https://docs.snowflake.com/ja/user-guide/data-sharing-provider#label-esd-data-sharing)のページの両方に同じことが書かれてる。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3475867/1b7327d3-59c8-bcff-980e-60e1c6595936.png)

`「大事なことなので2回言いました。」`ってところかなと。

では、その点も十分理解した上で、ビジネスユースケースに合わせてどうしてもシェアしたいとする。
シェアできるようにするためには以下の要素に注目する。

##### OVERRIDE SHARE RESTRICTIONS

- グローバル権限の一つ
- シェアオブジェクトのパラメータ「`SHARE_RESTRICTIONS`」を有効または無効にできる権限
- デフォルトではACCOUNTADMINが持っている
- 他ロールに付与可能 (ただし、付与されたロールが別ロールに再付与することはできない)

```sql
USE ROLE ACCOUNTADMIN;
GRANTOVERRIDE SHARE RESTRICTIONS ON ACCOUNT TO ROLE <ROLE_NAME>;

USE ROLE <ROLE_NAME>;
ALTER SHARE <SHARE_NAME> ADD ACCOUNTS=<CONSUMER_ACCOUNT_NAME> SHARE_RESTRICTIONS=FALSE;
```

##### SHARE_RESTRICTIONS

[こちら](https://docs.snowflake.com/ja/sql-reference/parameters#label-share-restrictions)参照。

- Business Critical EditionのアカウントからBusiness Critical Edition以外へのアカウントに対するシェアを有効/無効にするパラメータ(ブール値)
    - True : 他エディションにシェアできない / 他エディションへのシェアが無効 
    - False : 他エディションにシェアできる / 他エディションへのシェアが有効
- `デフォルトはTrue` (つまり無効。Business Critical Edtion以外にはシェアできないようになっている。)
- アカウントレベルで設定はできない
    - つまり、`都度指定する必要がある`パラメータである
    - `SHARE_RESTRICTIONS=FALSE`としたい場合のみ毎回指定する

###### 小ネタ : RESTRICTION について

「RESTRICTION」は「制限」という意味。
「LIMIT(LIMITATION)」も「制限」を表すときに使うが、ニュアンスが異なる。

- RESTRICTION : 誰かの行動や動作を制限する
- LIMITATION : 特定の値やレベルを超えないように制限する

とのこと。なるほど。
確かにシェアという動作を制限する、という意味にマッチしている。
FALSEを指定すると制限しない、ということでシェアできるようになるわけだ。

#### 他エディションのシェア

- VPSの場合はSnowflakeサポートに連絡して「`自動複製を有効`」にすることでシェアできるようになる
- Standard Edition、Enterprise Editionは一般的なシェアに関する考慮点に従う
    - [こちら](https://docs.snowflake.com/ja/user-guide/data-sharing-provider#general-data-sharing-considerations-and-usage)参照

## ポイント

わかる範囲で傾向等をまとめてみた。

###  「要件を満たす機能がすべて含まれるエディション」が選べるようにしておく

- [ここ](https://docs.snowflake.com/ja/user-guide/intro-editions#feature-edition-matrix)の記載を参考に、どの機能がどのエディションで提供されるのかを把握しておく
    - 「[Time Travel](https://docs.snowflake.com/ja/user-guide/data-time-travel#label-data-retention-specifying)」の期間が1日よりも多い、という要件がつくとその時点で「Standard」が候補から外れる
    - さらに「[Tri-Secret Secure](https://docs.snowflake.com/ja/user-guide/security-encryption-manage#tri-secret-secure)」が問題文の要件に挙げられていると答えは「Business Critical」か「VPS」に絞られる
    - そこに「[シェア(データ共有)](https://docs.snowflake.com/ja/user-guide/data-sharing-gs)」の要件が入ってくるようなケースが問題に取り上げられると思うので、「Business Critical」が回答になる
    - 一方で、シェアが要件に入っておらず「専用のメタデータストアとコンピューティングリソースのプール」のようなことが書かれていれば「VPS」が回答になる

### Business Critical EditionからStandard or Enterprise Editionにシェアする際の考慮点を理解しておく

- [ここ](https://docs.snowflake.com/ja/user-guide/override_share_restrictions)の記載を押さえておく
    - `デフォルトではシェアできない`点をまず知っておく
    - シェアする際にパラメータ(`SHARE_RESTRICTIONS=false`)の指定が必要
        - これはアカウントレベルでは設定できないので都度指定が必要
    - デフォルトではACCOUNTADMINで実行する必要がある
        - 他ロールに権限を移譲したい場合は、グローバル権限`OVERRIDE SHARE RESTRICTIONS`を付与する
    - 実際にシェアをするにあたっては、[こちら](https://docs.snowflake.com/ja/user-guide/override_share_restrictions)記載の注意点を踏まえておくこと (ベストプラクティス的なこと)
        - 機密データを非Business Criticalアカウントと共有しない
        - 2つ目の非Business Criticalアカウントを作成して、機密性の低いデータを保存し、このデータを非Business Criticalアカウントと共有することを検討する
        - Business CriticalアカウントでTri-Secret Secureを使用しており、他のアカウントとデータを共有している場合、Snowflakeはこれらのアカウントからのデータアクセスを自分のアカウント内から発生したかのように扱う
            - 具体的には、コンシューマーへのアクセスを許可するには、SnowflakeがAWS KMSにアクセスする必要がある場合がある

## おまけ

### 業務でのエディション選択

基本は業務であればEnterprise Edition、データの扱いとか機密性を気にするならBusiness Critical Editionというイメージではある。

一方で、コストを気にするとか、機密性の度合いがよく分からない、単にデータをシェアしたいだけといった場合にBusiness Critical Editionにしないと何に困るのか、といった事情があるので無条件にエディションを選択するというのも避けたい。

シンプルに以下の問いでどう考えるか？ではないか。

- Q1. データの扱いについて、標準的なセキュリティよりも高いセキュリティ要件が必要？(金融系のデータ等)
    - YESなら、Business Critical Edition
    - NOなら、Enterprise Edition
- Q2. 何重視？
    - セキュリティ優先なら、Business Critical Edition
    - コスト優先なら、Enterprise Edition
- Q3. Snowflakeの利用およびシェアをするにあたって、[こちら](https://docs.snowflake.com/ja/user-guide/intro-editions#security-governance-data-protection)のBusiness Critical欄に記載されている機能を使いたい？
    - YESなら、Business Critical Edition
    - NOなら、Enterprise Edition

Q1で悩むなら、そもそもの要件だったり、扱いたい(あるいはシェアしたい)データの性質に立ち返って考えた方が良さそう。

逆に、スッと答えられないような引っ掛かりがある、もしくは「万一」を気にするならBusiness Critical Editionではなかろうか。
コストを気にしてエディションを下げたいなら、その「万一」に対応できるようにデータをあらかじめ加工なりしてからSnowflakeに取り込むとかを検討してみてはどうだろうか。

#### コスト

上位エディションの方が高価なのは言わずもがなで、[こちら](https://www.snowflake.com/en/data-cloud/pricing-options/)を確認すると良い。

- Standard : $2.00/per credit
- Enterprise : $3.00/per credit
- Business Critical : $4.00/per credit

とのこと。

#### 機密性の度合い

データの性質、ビジネス上でのリスク許容度とか、規制要件によりけり。
といっても、その基準をどう判断すればいいか。

- 個人情報（PII）: 名前、住所、電話番号、メールアドレスなど
- 機密ビジネスデータ: 未公開の経営情報、戦略、契約内容、知的財産など
- 金融データ: クレジットカード情報、銀行口座情報、取引履歴など
- 医療データ（PHI）: 患者の診療記録、保険情報など

これらに該当するかどうかが一つの判断基準か。

データ保護レベルの差分について、扱うデータと照らし合わせてみて何らかのメリットを受けたいか、魅力的と感じるか。

以下がBusiness Critical以上で提供される機能。

- Tri-Secret Secure による顧客管理の暗号化キー
- PHI データのサポート（HIPAA と HITRUST CSF 規制に準拠）
- PCI DSS のサポート

特に不要、魅力的に感じないなら、Enterpriseで。

なお、以下の項目は日本リージョンでの恩恵はなさそうなので、基本的には考慮しないで良さそう。

- 米国連邦および州政府の要件に適合する公共部門のワークロード（FedRAMP および ITAR など）のサポート
    - これは「米国商用リージョン」「米国SnowGov リージョン」のみ
- IRAP のサポート - 保護された（P）データ（指定された アジア太平洋リージョン 内）
    - これは「アジア太平洋 （シドニー）」のみ

#### Business Critical Editionにしないと何に困るのか

前述の通り。

- [こちら](https://docs.snowflake.com/ja/user-guide/intro-editions#security-governance-data-protection)のBusiness Critical欄に記載されている機能を使いたいかどうか
- [機密性の度合い](#機密性の度合い) に記載した内容を参考に考えてみてどうか

どちらも当てはまらないなら「Business Critical Editionでなくても困らない」はずである。

### Enterprise Edition -> Business Critical Editionへの逆方向シェアはどうなる？

Snowflake公式ドキュメントで触れられている内容や、資格試験で問われそうなのは「自アカウントよりも下位エディションへのシェア」に関することばかりという印象がある。

そこで、逆方向つまり「自アカウントよりも上位エディションへのシェア」はどうなのかを確認してみたところ、普通にシェアはできた。

前述の

> デフォルトでは、SnowflakeはBusiness CriticalアカウントからBusiness Critical以外のアカウントへのデータ共有を許可していません

に関連するような制約や、何らかの警告が出る等はなかった。

すでにあるシェア元アカウントのエディションを考慮する必要はないのと、新たにアカウントを作成して上位エディションにシェアをする分には可能である。