以前の記事の 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 IAM、AWS 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 IAM(aws-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テナント アカウントとポリシーは指向的で静的であり、TerraformやAnsibleなどのツールを使用して管理されますが、ポッド仕様は動的に構成できます。Helmなどのテンプレートジェネレーターを使用している場合、serviceAccountNameを変数として適切なサービステナントアカウントに設定できます。その結果、各テナントは同じアプリケーションの独自の専用デプロイメントを持ちます。実際、各テナントには、アプリケーションが実行される専用の名前空間が必要です。
隠しテキスト
Amazon Aurora Serverless, Amazon Neptune Amazon S3.
結論
以下のためのSaaSサービスは、データがアクセスされるかについて慎重に検討することが重要です。ストレージ、暗号化、パフォーマンス、およびテナント管理の要件を検討します。でマルチテナントデータ分割の好適な方法のいずれかを有しています。AWSでマルチテナントワークロードを実行する利点はAWS IAMで、これを使用してテナントデータへのアクセスの制御を簡素化できます。さらに、AWS IAMは、データへのアプリケーションアクセスを動的に構成するのに役立ちます。
説明に役立つ機能とテクニックについて、少し理論に触れてみましょう。ただし、特殊なケースでは、常に独立してソース情報を分析し、パーソナライズされたソリューションを作成する必要があります。