Ruby auf Schienen auf Oracle Cloud Infrastructure bereitstellen
Sie finden Terraform für diese bereitstellbare Architektur, oci-arch-ruby-rails-build
, im Repository DevRel GitHub, auf das Sie unter dem Thema "Weitere Informationen" unten zugreifen können.
Architektur
Die Architektur umfasst ein VCN mit mehreren Subnetzen, sodass verschiedene Services isoliert werden können. Daher erfolgt der öffentliche Zugriff über einen aktiven/Standby-Load Balancer. Ein zusätzliches öffentliches Subnetz stellt eine Bastion bereit, die SSH für den Zugriff auf die Backend-Services unterstützt.
Der Load Balancer unterstützt zwei virtuelle Compute-Maschinen (VMs), wobei jede ein Ruby auf dem Rails-Server hostet. Diese Server können auf eine MySQL-Datenbank zugreifen. Sowohl die VMs als auch die MySQL-Datenbank befinden sich in ihren eigenen separaten Subnetzen, um Aspekte wie den Zugriff zu berücksichtigen.
Das folgende Diagramm zeigt diese Referenzarchitektur.
Beschreibung der Abbildung deploy-ruby-rails-mds-arch.png
Bereitstellen-ruby-schienen-mds-arch-oracle.zip
-
Mandant
Ein Mandant ist eine sichere und isolierte Partition, die Oracle bei der Registrierung für Oracle Cloud Infrastructure in Oracle Cloud einrichtet. Sie können Ihre Ressourcen in Oracle Cloud in Ihrem Mandanten erstellen, organisieren und verwalten.
Ein Mandant ist ein Synonym für eine Firma oder Organisation. In der Regel verfügt ein Unternehmen über einen einzelnen Mandanten und spiegelt seine Organisationsstruktur innerhalb dieses Mandanten wider. Ein einzelner Mandant ist in der Regel mit einem einzelnen Abonnement verknüpft, und ein einzelnes Abonnement hat in der Regel nur einen Mandanten.
- Region
Eine Oracle Cloud Infrastructure-Region ist ein lokalisierter geografischer Bereich, der ein oder mehrere Data Center enthält, die als Availability-Domains bezeichnet werden. Regionen sind unabhängig von anderen Regionen, und große Entfernungen können sie trennen (über Länder oder sogar Kontinente).
- Compartment
Compartments sind regionsübergreifende logische Partitionen innerhalb eines Oracle Cloud Infrastructure-Mandanten. Mit Compartments können Sie Ihre Ressourcen in Oracle Cloud organisieren, den Zugriff auf die Ressourcen kontrollieren und Nutzungs-Quotas festlegen. Um den Zugriff auf die Ressourcen in einem bestimmten Compartment zu kontrollieren, definieren Sie Policys, mit denen angegeben wird, wer auf die Ressourcen zugreifen kann und welche Aktionen sie ausführen können.
- Availability-Domains
Availability-Domains sind eigenständige, unabhängige Data Center innerhalb einer Region. Die physischen Ressourcen in den einzelnen Availability-Domains sind von den Ressourcen in den anderen Availability-Domains isoliert. Dies sorgt für Fehlertoleranz. Availability-Domains haben keine gemeinsame Infrastruktur wie Stromversorgung oder Kühlung sowie das interne Availability-Domainnetzwerk. Daher ist es unwahrscheinlich, dass der Ausfall einer Availability-Domain Auswirkungen auf die anderen Availability-Domains in der Region hat.
- Faultdomains
Eine Faultdomain ist eine Gruppierung aus Hardware und Infrastruktur innerhalb einer Availability-Domain. Jede Availability-Domain umfasst drei Faultdomains mit unabhängiger Stromversorgung und Hardware. Wenn Sie Ressourcen auf mehrere Faultdomains verteilen, können Ihre Anwendungen physischen Serverausfall, Systemwartung und Stromausfälle innerhalb einer Faultdomain tolerieren.
- Virtuelles Cloud-Netzwerk (VCN) und Subnetze
Ein VCN ist ein anpassbares, Software definiertes Netzwerk, das Sie in einer Oracle Cloud Infrastructure-Region einrichten. Wie bei Data Center-Netzwerken erhalten Sie mit VCNs eine vollständige Kontrolle über Ihre Netzwerkumgebung. Ein VCN kann mehrere sich nicht überschneidende CIDR-Blöcke enthalten, die Sie nach dem Erstellen des VCN ändern können. Sie können ein VCN in Subnetze segmentieren, die sich auf eine Region oder eine Availability-Domain erstrecken. Jedes Subnetz besteht aus einem fortlaufenden Adressbereich, der sich nicht mit den anderen Subnetzen im VCN überschneidet. Sie können die Größe eines Subnetzes nach der Erstellung ändern. Ein Subnetz kann öffentlich oder privat sein.
- Load Balancer
Der Oracle Cloud Infrastructure Load Balancing-Service ermöglicht automatisierte Trafficverteilung von einem einzigen Endpunkt auf mehrere Server im Backend.
Der Load Balancer bietet Zugriff auf verschiedene Anwendungen.
- Sicherheitsliste
Für jedes Subnetz können Sie Sicherheitsregeln erstellen, die Quelle, Ziel und Typ des Traffics angeben, die in das Subnetz ein- und ausgehen dürfen.
- NAT-Gateway
Das NAT-Gateway ermöglicht privaten Ressourcen in einem VCN den Zugriff auf Hosts im Internet, ohne dass diese Ressourcen für eingehende Internetverbindungen freigegeben werden.
- Servicegateway
Das Servicegateway ermöglicht den Zugriff von einem VCN auf andere Services wie Oracle Cloud Infrastructure Object Storage. Der Traffic vom VCN zum Oracle-Service durchläuft die Oracle-Netzwerkstruktur und nie das Internet.
- MySQL Database Service
Oracle MySQL Database Service ist ein vollständig verwalteter Oracle Cloud Infrastructure-(OCI-)Datenbankservice, mit dem Entwickler schnell sichere, cloud-native Anwendungen entwickeln und bereitstellen können. Oracle MySQL Database Service ist für OCI optimiert und ausschließlich in OCI verfügbar. Er wird zu 100% von den OCI- und MySQL-Entwicklungsteams erstellt, verwaltet und unterstützt.
Oracle MySQL Database Service verfügt über eine integrierte leistungsstarke Analyse-Engine (HeatWave), mit der komplexe Echtzeitanalysen direkt für eine betriebsfähige MySQL-Datenbank ausgeführt werden.
- Bastion-Service
Oracle Cloud Infrastructure Bastion bietet eingeschränkten und zeitlich begrenzten sicheren Zugriff auf Ressourcen, die keine öffentlichen Endpunkte haben und die strikte Ressourcenzugriffskontrollen erfordern, wie Bare-Metal- und virtuelle Maschinen, Oracle MySQL Database Service Autonomous Transaction Processing (ATP), Oracle Container Engine for Kubernetes (OKE) und alle anderen Ressourcen, die Secure Shell Protocol-(SSH-)Zugriff zulassen. Mit dem Oracle Cloud Infrastructure Bastion-Service können Sie den Zugriff auf private Hosts ermöglichen, ohne einen Jumphost bereitzustellen und zu verwalten. Darüber hinaus erhalten Sie eine verbesserte Sicherheit mit identitätsbasierten Berechtigungen und einer zentralisierten, auditierten und zeitgebundenen SSH-Session. Mit Oracle Cloud Infrastructure Bastion ist keine öffentliche IP für den Bastionzugriff erforderlich, sondern es werden unnötige und potenzielle Angriffsflächen bei der Bereitstellung von Remotezugriff eliminiert.
Empfehlungen
Verwenden Sie die folgenden Empfehlungen als Ausgangspunkt für das Deployment von Ruby auf Schienen auf OCI. Ihre Anforderungen können davon abweichen.
- Sicherheit
Mit Oracle Cloud Guard können Sie die Sicherheit Ihrer Ressourcen in OCI proaktiv überwachen und aufrechterhalten. Cloud Guard verwendet Detektorrezepte, die Sie definieren können, um Ihre Ressourcen auf Sicherheitsschwächen zu untersuchen und Operatoren und Benutzer auf riskante Aktivitäten zu überwachen. Wenn falsche Konfigurationen oder unsichere Aktivitäten erkannt werden, empfiehlt Cloud Guard Korrekturmaßnahmen und unterstützt Sie bei der Ausführung dieser Aktionen basierend auf den Responder-Rezepten, die Sie definieren können.
Für Ressourcen, die maximale Sicherheit erfordern, empfiehlt Oracle, Sicherheitszonen zu verwenden. Eine Sicherheitszone ist ein Compartment, das mit einem von Oracle definierten Rezept von Sicherheits-Policys verknüpft ist, die auf Best Practices basieren. Beispiel: Die Ressourcen in einer Sicherheitszone dürfen nicht über das öffentliche Internet zugänglich sein und müssen mit vom Kunden verwalteten Schlüsseln verschlüsselt werden. Wenn Sie Ressourcen in einer Sicherheitszone erstellen und aktualisieren, validiert OCI die Vorgänge anhand der Policys im Security-Zone-Rezept und lehnt Vorgänge ab, die eine der Policys verletzen.
Wenn die Anwendung so implementiert ist, dass dynamische Inhalte verfügbar gemacht werden, oder wenn Clients Daten über APIs weiterleiten können, wird ein API-Gateway empfohlen, da damit die Interaktion mit den APIs über API-Policys verwaltet werden kann.
- Cloud Guard
Klonen und passen Sie die von Oracle bereitgestellten Standardrezepte an, um benutzerdefinierte Detektor- und Responder-Rezepte zu erstellen. Mit diesen Rezepten können Sie angeben, welche Art von Sicherheitsverletzungen eine Warnung generieren und welche Aktionen für sie ausgeführt werden dürfen. Beispiel: Sie möchten Object Storage-Buckets ermitteln, deren Sichtbarkeit auf "public" gesetzt ist.
Wenden Sie Cloud Guard auf Mandantenebene an, um den umfassenderen Geltungsbereich abzudecken und den Administrationsaufwand bei der Verwaltung mehrerer Konfigurationen zu reduzieren.
Sie können auch verwaltete Listen verwenden, um bestimmte Konfigurationen auf Detektoren anzuwenden.
- Sicherheitszonen
Klonen und passen Sie die von Oracle bereitgestellten Standardrezepte an, um benutzerdefinierte Detektor- und Responder-Rezepte zu erstellen. Mit diesen Rezepten können Sie angeben, welche Art von Sicherheitsverletzungen eine Warnung generieren und welche Aktionen für sie ausgeführt werden dürfen. Beispiel: Sie möchten Object Storage-Buckets ermitteln, deren Sichtbarkeit auf "public" gesetzt ist.
Wenden Sie Cloud Guard auf Mandantenebene an, um den umfassenderen Geltungsbereich abzudecken und den Administrationsaufwand bei der Verwaltung mehrerer Konfigurationen zu reduzieren.
Sie können auch verwaltete Listen verwenden, um bestimmte Konfigurationen auf Detektoren anzuwenden.
- Netzwerksicherheitsgruppen (NSGs)
Mit NSGs können Sie ein Set von Ingress- und Egress-Regeln definieren, die für bestimmte VNICs gelten. Wir empfehlen die Verwendung von NSGs anstelle von Sicherheitslisten, da NSGs die Subnetzarchitektur des VCN von den Sicherheitsanforderungen Ihrer Anwendung trennen können.
Mit NSGs können Sie ein Set von Ingress- und Egress-Regeln definieren, die für bestimmte VNICs gelten. Wir empfehlen die Verwendung von NSGs anstelle von Sicherheitslisten, da NSGs die Subnetzarchitektur des VCN von den Sicherheitsanforderungen Ihrer Anwendung trennen können.
- Load Balancer-Bandbreite
Beim Erstellen des Load Balancers können Sie entweder eine vordefinierte Ausprägungen mit einer festen Bandbreite auswählen oder eine benutzerdefinierte (flexible) Ausprägungen angeben, bei der Sie einen Bandbreitenbereich festlegen, sodass die Bandbreite vom Service basierend auf den Trafficmustern automatisch skaliert werden kann. Bei beiden Lösungen können Sie die Ausprägungen nach dem Erstellen des Load Balancers jederzeit ändern.
Hinweise
- Performance
Wenn diese RA als Ausgangspunkt verwendet wird, bedeutet dies, dass die Performance von der Anzahl der VM-Knoten und dem für jeden Knoten ausgewählten VM-Typ beeinflusst wird. Terraform unterstützt diese Anpassungen, um verschiedene Spezifikationsserver und die Anzahl der Knoten zu verwenden.
Zusätzliche Performancesteigerungen können durch Ausführung von Ruby und Schienen mit GraalVM erzielt werden.
- Sicherheit
Bei der Basiskonfiguration werden keine Anwendungsauthentifizierung, Autorisierung oder API-Unterstützung berücksichtigt. Auf Netzwerkebene müssen Zugriff und Routing so optimiert werden, dass die interne oder externe Verwendung des Ruby-Service berücksichtigt wird. Bei der externen Verwendung sollte die Umgebung auch auf die Verwendung einer Web Application Firewall erweitert werden, und Cloud Guard sollte in Betracht gezogen werden.
- Verfügbarkeit
Die Verfügbarkeit kann erweitert werden, indem Knoten auf mehrere Availability-Zonen verteilt werden, und das potenziell für die kritischsten Verfügbarkeitsstufen über Regionen hinweg.
Verfügbarkeit ist nicht nur ein Faktor für das Vorhandensein von Compute Nodes, sondern auch für die Sicherheit, sodass nur legitimer Datenverkehr mit den bereitgestellten Anwendungen interagieren kann. Dies kann über die Sicherheitsempfehlungen erreicht werden.
- Kostenfaktor
Die Sicherheit kann auch bei der Kostenverwaltung helfen, indem die für Serviceanfragen erforderliche Rechenleistung begrenzt wird. Dies liegt daran, dass verhindert wird, dass versehentlicher oder böswilliger Datenverkehr auf die Server in WAF oder API Gateway trifft, die Menge der potenziellen Workload reduziert, die generiert wird.