Zautomatyzuj konfigurację Amazon RDS Custom dla SQL Server za pomocą AWS Systems Manager

18 maja 2023

W poprzednim artykule Amazon Relational Database Service (Amazon RDS) Custom for SQL Server autorzy wyjaśnili ręczne kroki dołączania usługi Amazon Relational Database Service (Amazon RDS) Custom dla SQL Server do usługi Active Directory obsługiwanej samodzielnie. Twórcy podkreślili znaczenie używania powtarzalnych, idempotentnych skryptów, ponieważ zmiany byłyby tracone w nowych wystąpieniach, na przykład w przypadku skalowania odczytu w poziomie.

W tym artykule autorzy pokazują, w jaki sposób zaimplementować automatyzację dołączania do samoobsługowego Active Directory za pomocą AWS Systems Manager.

Przedstawienie rozwiązania

Poniższy diagram ilustruje sposób działania automatyzacji:

Zautomatyzuj konfigurację Amazon RDS Custom dla SQL Server za pomocą AWS Systems Manager

Etapy przepływu pracy są następujące:

  1. Tworzona jest instancja RDS Custom for SQL Server ze znacznikiem RDSDomainJoin:TRUE.
  2. Podczas tworzenia instancja RDS jest rejestrowana w Menedżerze systemów.
  3. AWS Systems Manager State Manager jest skonfigurowany do uruchamiania dokumentu polecenia Systems Manager w instancjach pasujących do tagu.
  4. Gdy polecenie jest uruchomione, poświadczenia potrzebne do przyłączenia się do Active Directory są pobierane z AWS Secrets Manager, a dane wyjściowe polecenia są rejestrowane w zasobniku Amazon Simple Storage Service (Amazon S3)
  5. Instancja RDS Custom jest dołączana do domeny i uruchamiana ponownie.

Warunki wstępne

Aby móc utworzyć instancję RDS, musisz utworzyć zarządzany przez klienta symetryczny klucz AWS Key Management Service (AWS KMS), grupę podsieci DB i grupę zabezpieczeń. Aby uzyskać instrukcje, zobacz Make sure that you have a symmetric encryption AWS KMS key for instructions. Do rejestrowania danych wyjściowych poleceń Menedżera systemu AWS wymagany jest pakiet Amazon S3 zgodny z najlepszymi praktykami w zakresie bezpieczeństwa.

Utwórz klucz tajny dołączania do usługi Active Directory

Dodanie nazwy i poświadczeń domeny Active Directory do AWS Secrets Manager chroni poświadczenia przed nieautoryzowanym użyciem i umożliwia automatyzację za pomocą dokumentu poleceń Systems Manager. Konto Active Directory potrzebuje tylko uprawnień do tworzenia obiektów komputerowych w określonej Jednostce Organizacyjnej Active Directory, kierując się zasadą najmniejszych uprawnień, nie używa ponownie konta z uprawnieniami, które nie są wymagane. Dodatkowo możliwe jest ograniczenie poświadczeń Active Directory do jednorazowego użytku. Zobacz Przypadek użycia 3 w warsztacie Implement Advanced Access Control Mechanisms using AWS KMS, aby dowiedzieć się więcej.

Utwórz plik RDSADJoin.json z następującą zawartością:

{
   "username": "",
   "password": "",
   "domainname": "example.local",
   "ou": "OU=SQLServers,OU=example,DC=example,DC=local"
}

Aby utworzyć klucz tajny, uruchom następujące polecenie:
aws secretsmanager create-secret --name RDSADJoin --description "Credentials and details for RDS Instances to join self managed Active Directory" --secret-string file://RDSADJoin.json

Szczegóły utworzonego klucza tajnego są zwracane w danych wyjściowych polecenia

Szczegóły utworzonego klucza tajnego są zwracane w danych wyjściowych polecenia

Musisz dodać politykę do roli AWS Identity and Access Management (IAM) używanej dla niestandardowej instancji RDS, która umożliwia instancji dostęp do klucza tajnego. Musisz również zezwolić instancji RDS Custom na rejestrowanie danych wyjściowych w zasobniku Amazon S3 utworzonym w ramach wymagań wstępnych. Instrukcje dotyczące tworzenia roli IAM można znaleźć w artykule Creating an RDS Custom for SQL Server DB instance.

Utwórz plik policy.json z następującą zawartością:

{
   "Version": "2012-10-17",
   "Statement": [
   {
      "Sid": "domainJoinSecret",
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Resource": ""
    },
    {
      "Sid": "s3ssmlogging",
      "Effect": "Allow",
      "Action": [
	"s3:PutObject",
        "s3:GetObject",
        "s3:PutObjectAcl"
     ],
      "Resource": ""
    }
    ]
}

Uruchom następujące polecenie, aby dodać zasady do roli RDS Custom IAM:

aws iam put-role-policy --role-name <AWSRDSCustomSQLServerInstanceRole> --policy-name RDSADJoin --policy-document file://policy.json.

To polecenie nie zwraca żadnych danych wyjściowych.

To polecenie nie zwraca żadnych danych wyjściowych.

Utwórz dokument Menedżera systemów

Dokument programu Systems Manager (dokument SSM) definiuje działania, które program Systems Manager wykonuje na zarządzanych instancjach. W tym przypadku definiujesz polecenia, które mają być uruchamiane na Twojej instancji RDS Custom.

Następujące polecenia programu PowerShell używane w dokumencie SSM są zdefiniowane jako plik YAML.

Utwórz plik RDSDomainJoinSSM.yaml o następującej treści:

---
schemaVersion: "2.2"
description: "Command Document to add computer to Active Directory domain"
parameters:
mainSteps:
   - action: "aws:runPowerShellScript"
     precondition:
        StringEquals:
           - platformType
           - Windows
     name: "RunPowershellScript"
     inputs:
        runCommand:
           - "Write-Output {{Joining Instance to Domain}}"
           - $secret = (Get-SECSecretValue -SecretId <SecretArn>).SecretString | ConvertFrom-Json
           - $domainname = $secret.domainname
           - $ou = $secret.ou
           - $username = $secret.username
           - $password = ConvertTo-SecureString $secret.password -AsPlainText -Force
           - $domainCredential = New-Object System.Management.Automation.PSCredential -ArgumentList ($username, $password)
		- Add-Computer -DomainName $domainname -DomainCredential $domainCredential -oupath $ou -Restart

Uruchom następujące polecenie, aby utworzyć dokument SSM:

aws ssm create-document --name RDSDomainJoin --content file://RDSDomainJoinSSM.yaml --document-type Command --target-type /AWS::EC2::Instance --document-format YAML

Szczegóły dokumentu SSM są zwracane w danych wyjściowych polecenia.

Szczegóły dokumentu SSM są zwracane w danych wyjściowych polecenia.

Utwórz skojarzenie Menedżera stanu i Menedżera systemów

Systems Manager State Manager automatyzuje proces utrzymywania instancji zarządzanych (w tym przypadku niestandardowej instancji RDS) w zdefiniowanym stanie. Konfigurujesz powiązanie State Manager, aby wyzwalać i uruchamiać dokument SSM jeden raz, gdy tworzone są nowe niestandardowe instancje RDS z określonym znacznikiem. Użyj klucza tagu RDSDomainJoin i wartości TRUE, aby wywołać dokument SSM.

Skonfiguruj SSM do rejestrowania danych wyjściowych poleceń w zasobniku Amazon S3, który utworzyłeś w ramach wymagań wstępnych.

Uruchom następujące polecenie, aby utworzyć powiązanie Menedżera stanu:

aws ssm create-association --association-name RDSDomainJoinTags --targets Key=tag:RDSDomainJoin,Values=TRUE --name RDSDomainJoin --output-location '{"S3Location":{"OutputS3Region":"","OutputS3BucketName":""}}'

Szczegóły powiązania SSM są zwracane w danych wyjściowych komendy.

Szczegóły powiązania SSM są zwracane w danych wyjściowych komendy.

Utwórz niestandardową instancję RDS

Ważne jest, aby instancja była otagowana podczas jej tworzenia, aby kolejne zdarzenia tworzące nowe instancje (takie jak skalowanie) odziedziczyły tagi. Jeśli tagi są dodawane po utworzeniu, nowe instancje nie dziedziczą tagów. W chwili pisania tego tekstu konsola AWS nie obsługuje dodawania tagów podczas tworzenia niestandardowej instancji RDS, dlatego autorzy używają AWS CLI.

Uruchom następujące polecenie, aby utworzyć niestandardową instancję RDS:

aws rds create-db-instance \
--engine custom-sqlserver-ee \
--engine-version 15.00.4073.23.v1 \
--db-instance-identifier example-instance-name \
--db-instance-class db.m5.xlarge \
--allocated-storage 100 --storage-type gp2 \
--master-username <sausername> \
--master-user-password <sapassword> \
--kms-key-id <kmskeyid> \
--custom-iam-instance-profile <AWSRDSCustomSQLServerInstanceProfile> \
--db-subnet-group-name <dbsubnetgroup> \
--vpc-security-group-ids <ec2-securitygroup> \
--no-publicly-accessible \
--tags Key=RDSDomainJoin,Value=TRUE

Szczegóły niestandardowej instancji RDS są zwracane w danych wyjściowych polecenia.

Szczegóły niestandardowej instancji RDS są zwracane w danych wyjściowych polecenia.

Podczas tworzenia, Systems Manager uruchamia dokument SSM, dołącza instancję do domeny Active Directory i ponownie uruchamia instancję.

Dalsza automatyzacja

Możesz rozszerzyć dokument polecenia SSM, aby wykonać dodatkową automatyzację, na przykład dostosować ustawienia w SQL Server. W tym celu musisz znać początkową nazwę użytkownika i hasło administratora systemu (sa); możesz użyć Secrets Manager w sposób podobny do tego, w jaki sposób autorzy chronili poświadczenia usługi Active Directory w tym artykule. Typową dodatkową automatyzacją jest wykonanie ręcznej rejestracji nazwy SPN, aby można było użyć uwierzytelniania Kerberos.

Dodatkowo można zaimplementować automatyzację usuwania maszyn z Active Directory po ich usunięciu.

Możliwe jest również zautomatyzowanie dostosowań za pomocą niestandardowej wersji silnika (CEV). Zewnętrzni agenci lub inne dostosowania systemu operacyjnego mogą być utrwalane w Amazon Machine Image (AMI) i nowych niestandardowych instancjach RDS utworzonych na podstawie dostosowanego AMI.

Wnioski

Amazon RDS Custom for SQL Server umożliwia dostosowywanie, takie jak dołączanie do samodzielnie zarządzanej usługi Active Directory. Najlepszą praktyką jest przeprowadzanie tych dostosowań w powtarzalny, idempotentny sposób, zwłaszcza w celu obsługi zautomatyzowanych działań, takich jak skalowanie odczytu. Systems Manager może wyzwalać polecenia w niestandardowych instancjach RDS podczas ich tworzenia, umożliwiając automatyczne stosowanie dostosowań.

Aby dowiedzieć się więcej o Amazon RDS Custom, zapoznaj się z częścią Working with Amazon RDS Custom.

źródło: AWS

Case Studies
Referencje

Jesteśmy ogromnie zadowoleni ze współpracy z firmą Hostersi. Ich specjaliści doradzili nam rozwiązanie, które dało nam stabilną, skalowalną infrastrukturę, która umożliwia obsłużenie ciągle rosnącego ruchu związanego z COVID-19

Jakub Sperczyński
Prezes Zarządu EduNect
W skrócie o nas
Specjalizujemy się w dostarczaniu rozwiązań IT w obszarach projektowania infrastruktury serwerowej, wdrażania chmury obliczeniowej, opieki administracyjnej i bezpieczeństwa danych.