この記事では、プラットフォーム・アズ・ア・サービス(PaaS)のウェブおよびモバイルアプリケーションを保護するためのAzure Storageセキュリティのベストプラクティスのコレクションについて解説します。 MicrosoftはこれらのベストプラクティスをAzureおよびAzureの顧客との経験から導き出しました。
Azure は、オンプレミスでは簡単に実現できない方法で、ストレージをデプロイして使用することを可能にしています。 Azure Storageを使えば、比較的少ない労力で高いスケーラビリティと可用性を実現できます。 Azure StorageはWindowsおよびLinuxのAzure 仮想マシンの基盤であり、大規模な分散アプリケーションもサポート可能です。
Azure Storageは、Blobストレージ、テーブルストレージ、キューストレージ、ファイルストレージの4つのサービスを提供しています。 詳細については、「Microsoft Azure Storage の概要」をご覧ください。
この記事では、以下のベスト プラクティスを扱います。
- 共有アクセス シグネチャ (SAS)
- Azure ロールベースのアクセス制御 (Azure RBAC)
- 高価値データに対するクライアント側暗号化
- ストレージ サービスの暗号化
ストレージ アカウント キーの代わりに Shared Access Signature を使用する
アクセス制御は非常に重要です。 Azure Storage のアクセス制御のために、ストレージ アカウント作成時に、2 つの 512 ビット ストレージ アカウント キー (SAK) を生成します。 このキー冗長性により、ルーチンキーローテーション中のサービス中断を回避できます。
ストレージアクセスキーは高優先度の秘密であり、ストレージアクセス制御を担当する人だけがアクセスできるようにすべきです。 もし間違った人がこれらの鍵にアクセスできると、ストレージの完全な支配権を得て、ファイルの置き換え、削除、追加が可能になります。 攻撃者はマルウェアやその他のコンテンツをダウンロードし、組織や顧客を危険にさらす可能性があります。
それでも、ストレージ内のオブジェクトにアクセスする手段は必要です。 より細かなアクセスを提供するには、共有アクセス署名(SAS)を活用しましょう。 SASは、特定のオブジェクトをあらかじめ決められた時間間隔と特定の権限でストレージ内で共有できるようにします。 Shared Access Signature では、次のことを定義できます。
- SAS が有効な間隔 (開始時刻と有効期限など)。
- SAS によって付与されるアクセス許可。 たとえば、BLOB 上の SAS では BLOB への読み取りと書き込み許可がユーザーに付与されますが、アクセス許可は削除されません。
- Azure Storage が SAS を受け入れるための省略可能な IP アドレスまたは IP アドレス範囲。 たとえば、組織に属する IP アドレスの範囲を指定できます。 このオプションはSASのセキュリティをさらに強化します。
- SAS を受け入れる Azure Storage のプロトコル。 このオプションパラメータを使って、HTTPSを使うクライアントへのアクセスを制限できます。
SAS を使用すれば、ストレージ アカウント キーを知らせることなく、望む方法でコンテンツを共有できます。 アプリケーション内では常にSASを使用して、ストレージアカウントの鍵を失わずに安全にストレージ資源を共有しましょう。
共有アクセス署名の詳細については、「 共有アクセス署名の使用」をご覧ください。
Azure ロールベースのアクセス制御
アクセスを管理する別の方法として、Azure ロールベースのアクセス制御 (Azure RBAC) を使用します。 Azure RBAC を使用すれば、知る必要性と最小権限という 2 つのセキュリティ原則に基づいて、実際に必要となるアクセス許可を従業員に付与することに注力できます。 アクセス許可が多すぎると、アカウントが攻撃者による悪用の対象になりかねません。 アクセス許可が少なすぎると、従業員は業務を効率的に遂行できなくなる可能性があります。 Azure RBAC は、Azure の詳細なアクセス管理によってこの問題を解決します。 アクセスの制御は、データ アクセスにセキュリティ ポリシーを適用する必要がある組織にとって、絶対に欠かせないものです。
Azure で Azure 組み込みロールを使用して、ユーザーに権限を割り当てることができます。 例えば、クラウド事業者は、ストレージ アカウントを管理する必要がある場合はストレージ アカウント共同作業者ロール、従来のストレージ アカウントを管理する場合は従来のストレージ アカウント共同作業者ロールの使用します。 VM を管理する必要はあるが接続先の仮想ネットワークまたはストレージ アカウントを管理する必要がないというクラウド事業者は、作業者に仮想マシン共同作成者ロールを追加できます。
Azure RBACのような機能を使ってデータアクセス制御を強制しない組織は、ユーザーに必要以上の権限を与えることがあります。 必要以上の権限が付与されると、一部のユーザーが最初の段階でアクセスすべきではないデータにアクセスできてしまい、データのセキュリティ侵害につながる恐れがあります。
Azure RBACの詳細については、以下をご覧ください:
高価値データにはクライアント側暗号化を使用してください
クライアント側暗号化を使用すると、Azure Storage にアップロードする前に転送中データをプログラムで暗号化でき、取得するときにデータをプログラムで複合化できます。 クライアント側の暗号化は、転送中のデータの暗号化ですが、保存データの暗号化も可能です。 クライアント側暗号化が最も安全にデータを暗号化できる方法ですが、アプリケーションのプログラムを変更し、キー管理プロセスを組み込む必要があります。
また、クライアント側暗号化では、暗号化キーを制御できる担当者を 1 人に限定できます。 独自の暗号化キーを生成し、管理することができます。 このプロセスはエンベロープ技術を用いており、Azureストレージクライアントライブラリがコンテンツ暗号化鍵(CEK)を生成し、鍵暗号鍵(KEK)を使ってラップ(暗号化)します。 キー識別子はKEKを識別します。 KEKは非対称キーペアまたは対称キーで、ローカルで管理することもAzure Key Vaultに保存することもできます。
クライアント側暗号化は、Java と .NET のストレージ クライアント ライブラリに組み込まれています。 クライアントアプリケーション内でのデータ暗号化や、自らの暗号化キーの生成・管理については、 ブロブに関する「クライアント側暗号化 」を参照してください。
静止データに対してストレージサービスの暗号化を有効にする
ファイルストレージのストレージサービス暗号化を有効にすると、Azure StorageはAES-256暗号化を使って自動的にデータを暗号化します。 Microsoft がすべての暗号化、復号化、キー管理を処理します。 この機能は、LRS と GRS という種類の冗長性を使用します。
次のステップ
この記事では、PaaS の Web アプリケーションとモバイル アプリケーションをセキュリティ保護するための、Azure Storage の一連のセキュリティ ベスト プラクティスについて説明しました。 PaaS デプロイのセキュリティ保護の詳細については、次のリンク先をご覧ください。