マルチテナントソリューションにおけるデータウェアハウスの分離とサイロ



以前の記事の 1つで、マルチテナント(以下、マルチテナントAmazon EKSクラスターをセットアップする際のいくつかの重要なポイントを取り上げましたセキュリティに関しては、これは非常に広範なトピックです。セキュリティはアプリケーションクラスタだけでなく、データストアについても理解することが重要です。SaaSソリューションのプラットフォームとしての



AWSには、データウェアハウスの多様性があります。ただし、他の場所と同様に、セキュリティを適切に構成し、そのためのマルチテナントアーキテクチャを構築し、さまざまなレベルの分離を構成するには、作業の詳細について一定の知識と理解が必要です。



マルチテナントデータウェアハウス



サイロであるSiloを使用してマルチテナントデータを 管理すると便利です。主な機能は、マルチテナントSaaSソリューションでのレンタルデータ(以下、テナントの分離ですしかし、特定のケースについて話す前に、少し一般的な理論に触れましょう。



隠しテキスト
「バンカー」という用語は、ロシアのITスペシャリストの俗語にはまだ定着していませんが、「データレイク」と同様に使用します。



アクセスできるテナントは1つだけです



データセキュリティはSaaSソリューションの優先事項です外部からの侵入だけでなく、他のテナントとの相互作用からもデータを保護する必要があります。2つのテナントが連携し、ビジネスロジックに応じて共通データへのアクセスを制御・設定する場合でも。



暗号化とセキュリティの業界標準



テナント 基準は業界によって異なる場合があります。明確に定義されたキー変更頻度によるデータ暗号化が必要ものもあれば、共有キーではなくテナント指向のものを必要とするものもあります特定のテナントのデータセットを識別することにより、例外として個々のテナントに異なる暗号化標準とセキュリティ設定を適用できます



テナントサブスクリプションに基づくパフォーマンスチューニング



通常、SaaSプロバイダーはすべてのテナントに共通のワークフローを推奨します実用的な観点から見ると、これは特定のビジネスロジックとの関係で常に便利であるとは限りません。したがって、別の方法で行うことができます。テナントにはTIER標準に基づいて、プロパティとパフォーマンス制限の異なるセット割り当てられます。お客様がSaaS契約に記載されているパフォーマンスを得るには、プロバイダーが個々のテナントの使用を追跡する必要があります。これにより、すべての顧客がリソースに平等にアクセスできます。



隠しテキスト
当然、これはクライアントのアカウントに影響します。より多くのリソースを使用する人は誰でもより多く支払うでしょう。



データ管理



SaaSサービスが成長するので、多くのないテナントをクライアントがプロバイダーを変更する場合、ほとんどの場合、すべてのデータを別のリソースにアップロードし、古いデータを削除する必要があります。最初の要望に異議を唱えることができる場合、2番目の要望の履行は、欧州連合の一般データ保護規則によって保証されます。ルールを正しく実行するには、SaaSプロバイダーは最初個々のテナントのデータセットを識別する必要があります。



隠しテキスト
?! , , . . .


通常のデータウェアハウスをマルチテナントに変換する方法



マジックコードが存在しないことに注意してください。テナントデータウェアハウスのサイロをセットアップするだけでは不十分です。以下の側面を考慮する必要があります。



  • 役務契約;
  • 読み取りと書き込みのアクセスパターン。
  • 規制の遵守。
  • 費用。


しかし、データを分離および分離するための一般的に受け入れられているプラ​​クティスがいくつかあります。Amazon Auroraリレーショナルデータベースを例として使用して、これらのケースを見てみましょう



共有ストアとインスタンス間でのテナントデータのパーティション分割





テーブルはすべてのテナントで使用されます個々のデータは、キーtenant_idによって分離および識別されますリレーショナルデータベース認証は、行レベルのセキュリティで実装されますアプリケーションへのアクセスはアクセスポリシーに基づいており、特定のテナントが考慮されます



長所:



  • 高価ではありません。


マイナス:



  • データベースレベルの認証。これは、ソリューション内のいくつかの承認メカニズムを意味します。AWSIAMおよびデータベースポリシー。
  • テナントを特定するにはアプリケーションロジックを開発する必要があります。
  • 完全に分離しないと、TIERサービス契約を実施できません
  • データベース認証により、AWS CloudTrailによるアクセス追跡が制限されますこれは、外部からの情報を追加することによってのみ補償できます。追跡とトラブルシューティングを行うことをお勧めします。


共有インスタンスでのデータ分離





リース(テナントは)まだインスタンス・レベルでrassharivatです。しかし同時に、データバンキングはデータベースレベルで発生します。これにより、AWS IAMの認証と承認が有効になります。



長所:



  • 高価ではありません。
  • AWS IAMは認証と承認に完全に責任があります。
  • AWS IAMでは、独立したアプリケーションとして松葉杖なしAWS CloudTrailで監査証跡を維持できます


マイナス:



  • サービスに関する合意TIERを完全には満たしていない可能性のあるリソースの流出に関連してテナント間の基本インスタンスDB sharyatsya


テナントのデータベースインスタンスの分離





この図は、インスタンスを分離するときのテナントデータベースの実装を示しています。今日、これはおそらく安全性と信頼性を組み合わせた最良のソリューションです。あるAWS IAMAWS CloudTrailの監査、および完全なテナント分離が



長所:



  • AWS IAMは認証と承認の両方を提供します。
  • 完全な監査があります。
  • tenant.


:



  • tenant — .


multitenant



アプリケーションがデータに正しくアクセスできるようにすることは、ビジネス要件を満たすテナントモデルにデータを格納することよりも重要です。AWS IAMをアクセス制御に使用することは難しくありません(上記の例を参照)。データへのテナントアクセスを提供するアプリケーションAWS IAMを使用できます。これは、Amazon EKSの例で確認できます



提供するpod-レベルIAMのアクセスEKSがOpenIDの接続(OIDCは)完璧ですとともに、Kubernetesのアカウントの注釈。その結果、JWTは以下と交換されます。STSは、必要なクラウドリソースへのアプリケーションの一時的なアクセスを作成します。このアプローチでは、基本的なAmazon EKSワーカーノードに拡張アクセス許可を入力する必要はありません代わりに、ポッド関連アカウントのIAM権限のみを設定できますこれは、ポッドの一部として実行されているアプリの実際の権限に基づいて行われます。その結果、アプリケーションとポッドの権限を完全に制御できます



隠しテキスト
, AWS CloudTrail EKS pod API, .


IAM 統合は、テナントがデータストアにアクセスするための包括的な認証システムをサポートします。この場合、データベースへのアクセスは認証によってのみ制御されるため、別のレベルのセキュリティを導入する必要があります。



Amazon EKSがAWS DynamoDBマルチテナントデータベースにアクセスする







AmazonのEKS実行されているアプリケーション であるマルチテナントアクセスを詳しく見ると、マルチテナントデータベースのAmazonのDynamoDBにアクセスできます多くの場合、Amazon DynamoDBのマルチテナントプロセスはテーブルレベルで実装されています(テーブルとテナントの比率は1:1)。例として、すべてのデータがTenant1に関連付けられているアクセスパターンを完全に示すAWS IAMaws-dynamodb-tenant1-policy)の原則考えます。



{
   ...
   "Statement": [
       {
           "Sid": "Tenant1",
           "Effect": "Allow",
           "Action": "dynamodb:*",
           "Resource": "arn:aws:dynamodb:${region}-${account_id}:table/Tenant1"
       }
   ]
}




次のステップでは、このロールをOpenIDを使用するEKSクラスターアカウントに関連付けます



eksctl utils associate-iam-oidc-provider \
      --name my-cluster \
      --approve \
      --region ${region}



eksctl create iamserviceaccount \
      --name tenant1-service-account \
      --cluster my-cluster \
      --attach-policy-arn arn:aws:iam::xxxx:policy/aws-dynamodb-tenant1-policy \
      --approve \
      --region ${region}


必要なserviceAccountName仕様を含むポッド 定義は、新しいtenant1-service-accountサービスアカウントの使用に役立ちます



apiVersion: v1
kind: Pod
metadata:
 name: my-pod
spec:
serviceAccountName: tenant1-service-account
 containers:
 - name: tenant1


IAMテナント アカウントとポリシーは指向的で静的であり、TerraformAnsibleなどのツールを使用して管理されますがポッド仕様は動的に構成できます。Helmなどのテンプレートジェネレーターを使用している場合serviceAccountNameを変数として適切なサービステナントアカウントに設定できますその結果、各テナントは同じアプリケーションの独自の専用デプロイメントを持ちます。実際、各テナントには、アプリケーションが実行される専用の名前空間が必要です。



隠しテキスト
Amazon Aurora Serverless, Amazon Neptune Amazon S3.


結論



以下のためのSaaSサービスは、データがアクセスされるかについて慎重に検討することが重要です。ストレージ、暗号化、パフォーマンス、およびテナント管理の要件を検討します。でマルチテナントデータ分割の好適な方法のいずれかを有しています。AWSでマルチテナントワークロードを実行する利点AWS IAMで、これを使用してテナントデータへのアクセスの制御を簡素化できます。さらに、AWS IAMは、データへのアプリケーションアクセスを動的に構成するのに役立ちます。



説明に役立つ機能とテクニックについて、少し理論に触れてみましょう。ただし、特殊なケースでは、常に独立してソース情報を分析し、パーソナライズされたソリューションを作成する必要があります。



All Articles