AWS SSM Kullanarak SSH Günlüğü ve Oturum Yönetimi

Yayınlanan: 2022-03-11

Linux'ta bir SSH günlüğü tutmak için özel araçlar veya komut dosyaları ayarlamak sıkıcı ve hataya açık olabilir.

Mühendisler, kullanıcı etkinliğini günlüğe kaydetmek için rootsh , screen veya başka bir yardımcı programı kullanabilir, ancak kullanıcı izinleri doğru ayarlanmazsa, yetenekli bir kullanıcı izlerini kapatmak için denetim günlüklerini silebilir. Başka bir seçenek de, günlük kaydını çekirdek düzeyinde ayarlamak olabilir, ancak bunun için gereken uzmanlık o kadar yaygın değildir.

Neyse ki, tek bir Linux komutu bile yazmadan kullanıcı etkinliğini kaydetmenin bir yolu var! Şu hizmetlere ihtiyacımız olacak:

  • EC2
  • IAM (Kimlik ve Erişim Yönetimi)
  • KMS (Anahtar Yönetim Hizmeti)
  • CloudWatch Günlükleri (ve/veya S3)
  • AWS Systems Manager (eski adıyla SSM)

Her birinin nasıl kurulacağını görelim.

EC2 ve IAM

Bir EC2 bulut sunucusunu başlatmak normalde oldukça kolaydır, ancak başlatma sırasında yapılması gereken önemli bir görev vardır: Bulut sunucumuza bir IAM rolü eklememiz gerekir, aksi takdirde bunun sonunda ayrıntılı olarak açıklanan beklenen sonuçları elde edemeyiz makale.

EC2 bulut sunucumuzla ilişkilendirdiğimiz IAM rolü, yerleşik AmazonSSMManagedInstanceCore politikasına ve ayrıca bu politikaya (satır içi veya müşteri tarafından yönetilen olarak eklenir) sahip olmalıdır:

 { "Version": "2012-10-17", "Statement": [ { "Action": [ "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:DescribeLogGroups", "logs:PutLogEvents" ], "Effect": "Allow", "Resource": "*" } ] }

IAM rolünün yanı sıra genellikle bu EC2 bulut sunucusu yapılandırmasını kullanırız:

  • İşletim sistemi Amazon Linux 2'dir, çünkü varsayılan olarak AWS Systems Manager Agent (SSM Agent) yüklü olarak gelir. (Ayrıca bir seçenek olan Ubuntu dağıtımları da öyle.)
  • Örnek Türü t3.micro'dur (ancak herhangi bir tür işe yarar).
  • Bu alıştırma için açık bir SSH bağlantı noktasına ihtiyacımız olmadığından, AWS'nin VPC'ye atadığı varsayılan Güvenlik Grubu çalışacaktır.

EC2 örneğinin açılmasını beklemeden KMS kurulumuna başlayabiliriz.

KMS

CloudWatch'a gönderilen tüm oturum günlüklerinin şifreli olarak saklanmasını istiyorsak bir KMS anahtarına ihtiyacımız var. KMS servisine gidelim ve bir anahtar oluşturalım.

Şu anda 1. Adımda, "KMS", "Müşteri tarafından yönetilen anahtarlar" ve "Anahtar oluştur" içerik haritaları içeren bir AWS ekran görüntüsü: "Anahtarı yapılandırın". "Anahtar tipi", "Simetrik" (seçili) veya "Asimetrik" olarak ayarlanabilir. "Gelişmiş seçenekler" altında, "Anahtar malzeme kaynağı" ayarı "KMS" (seçili), "Harici" veya "Özel anahtar deposu (CloudHSM)" olabilir.
Adım 1: Simetrik bir anahtar türü seçme.

Aynı içerik haritalarına sahip AWS ekran görüntüsü, şimdi 2. Adımda: "Etiket ekle". Bir Alias ​​alanı "cwlg" olarak ayarlanır, isteğe bağlı bir Açıklama alanı boş bırakılır ve isteğe bağlı bir Etiketler alanına hiçbir etiket eklenmez.
Adım 2: Anahtarımızı adlandırmak.

Aynı içerik haritalarına sahip AWS'nin ekran görüntüsü, şimdi Adım 3: "Anahtar yönetici izinlerini tanımlayın." İlk alan olan "Anahtar yöneticiler", Ad, Yol ve Tür sütunlarıyla 10 satır sonuç (sayfa 1/3) içeren boş bir arama kutusuna sahiptir. Yalnızca ilk satırın ("admin", "/" ve "Kullanıcı" sütun değerleriyle) ilgili onay kutusu işaretlenir. Diğer alan, "Anahtar silme", ​​tek bir seçeneğe sahiptir, "Anahtar yöneticilerin bu anahtarı silmesine izin ver" ve onay kutusu da işaretlenmiştir.
Adım 3 (isteğe bağlı): Bir yönetici atama.

Anahtarın AWS hesabının kök kullanıcısı dışındaki kullanıcılar tarafından yönetilebilmesi için bir yönetici atamanızı öneririz, ancak başkalarının erişime ihtiyacı yoksa 3. Adımı atlayabiliriz.

Burada kilit yönetici olarak IAM kullanıcısını "yönetici" seçtik, ancak herhangi bir kullanıcıyı veya rolü seçmekte özgürüz. Yönetici için anahtar silme iznini devre dışı bırakmayı da seçebiliriz.

Aynı içerik haritalarına sahip AWS ekran görüntüsü, şimdi Adım 4'te: "Anahtar kullanım izinlerini tanımlayın." İlk alan olan "Bu hesap", 3. Adımdakiyle aynı arama sonuçlarına sahiptir, ancak hiçbiri kontrol edilmemiştir. Diğer "Diğer AWS hesapları" alanına eklenmiş hiçbir şey yoktur.
Adım 4: Kullanıcı atama sayfasını atlama.

Bu anahtarın yalnızca CloudWatch Logs hizmeti tarafından SSH günlük şifreleme ve şifre çözme işlemleri için kullanılmasını istediğimiz için bu anahtara herhangi bir kullanıcı atamayacağız.

Aynı içerik haritalarına sahip AWS ekran görüntüsü, şimdi Adım 5: "İnceleme"de. İlk alan olan "Anahtar yapılandırması", "Anahtar tipi"ni "Simetrik", "Anahtar özelliği"ni "SYMMETRIC_DEFAULT", "Anahtar kullanımı"nı "Şifrele ve şifresini çöz" ve "Origin"i "AWS_KMS" olarak listeler. " Sonraki alan olan "Takma ad ve açıklama", bir Takma Adı, "cwlg" ve Açıklamasız listeler. Sonraki alan olan "Etiketler" veri göstermiyor. Son alan olan "Anahtar ilkesi", JSON biçiminde bir ilkeyle önceden doldurulmuş bir metin kutusu içerir.
Adım 5: Yapılandırmamızı inceleyin ve varsayılan anahtar ilkesini değiştirin.

Gözden Geçirme sayfasında, CloudWatch Günlüklerinin anahtarı kullanma izinlerini içermediğinden, KMS tarafından oluşturulan anahtar politikasını değiştirmemiz gerekecek. Bunu şu politikayla değiştireceğiz:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "Enable IAM User Permissions", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:root" }, "Action": "kms:*", "Resource": "*" }, { "Sid": "Allow access for Key Administrators", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::ACCOUNT_ID:user/USERNAME" }, "Action": [ "kms:Create*", "kms:Describe*", "kms:Enable*", "kms:List*", "kms:Put*", "kms:Update*", "kms:Revoke*", "kms:Disable*", "kms:Get*", "kms:Delete*", "kms:TagResource", "kms:UntagResource", "kms:ScheduleKeyDeletion", "kms:CancelKeyDeletion" ], "Resource": "*" }, { "Sid": "Allow access to CloudWatch Log", "Effect": "Allow", "Principal": { "Service": "logs.REGION.amazonaws.com" }, "Action": [ "kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey" ], "Resource": "*", "Condition": { "ArnLike": { "kms:EncryptionContext:aws:logs:arn": "arn:aws:logs:REGION:ACCOUNT_ID:*" } } } ] }

Tüm yer tutucuları değiştirdiğinizden emin olun:

  • ACCOUNT_ID , AWS hesap kimliğimiz olur.
  • USERNAME , Adım 3'te seçilen yönetici kullanıcı adı olur. Bu adımdan vazgeçersek, burada ikinci ifade bloğunu kaldırırız ( "Sid": "Allow access for Key Administrators" ).
  • REGION , hizmetleri dağıttığımız bölgesel tanımlayıcı kod haline gelir (ör. us-west-1 ).

Bununla, KMS gitmeye hazır.

CloudWatch Günlük Grubu

Ardından, SSM Agent'ın SSH oturum günlüklerini gönderebileceği bir CloudWatch Log grubuna (ve/veya bir S3 kovası - aşağıya bakın) ihtiyacımız var. Hadi onu oluşturalım.

"CloudWatch", "CloudWatch Günlükleri", "Günlük grupları" ve "Günlük grubu oluştur" içerik kırıntılarına sahip bir AWS ekran görüntüsü. Çok adımlı kenar çubuğu yok. İlk alan, "Grup ayrıntıları", üç alt alana sahiptir: "Günlük grubu adı" ("ssm-session-demo" olarak ayarlanmıştır), "Saklama ayarı" (bir açılır menüden "Asla sona erme" olarak ayarlanmıştır) ve "KMS anahtarı ARN - isteğe bağlı" ("arn:aws:kms" ile başlayan kesilmiş bir değere ayarlanır). İkinci alan olan "Etiketler"de etiket yoktur.
“CloudWatch Günlükleri” günlük grubu oluşturma.

KMS anahtarı ARN alanına dikkat edin: AWS, KMS bölümünün 5. Adımında anahtar oluşturulduktan sonra burada gereken değeri bize sağlar.

(CloudWatch Logs hizmetinin anahtarı kullanmasına izin vererek doğru politikayı daha önce KMS anahtarımızla ilişkilendirmediysek, bu noktada KMS anahtarıyla ilgili bir hata alırız.)

SSH Günlüklerini S3 Kovasında Depolamak

Etkinlik günlüklerini CloudWatch Günlükleri yerine veya bunlara ek olarak S3 ile depolamak için, bu izinleri ayrı bir ilke olarak EC2 bulut sunucusu profilimize eklememiz (veya bunları manuel olarak ilişkilendirmemiz gerekebilecek diğer izinlerle birleştirmemiz) gerekir:

 { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::BUCKET_NAME/*" }, { "Effect": "Allow", "Action": [ "s3:GetEncryptionConfiguration" ], "Resource": "*" }, { "Effect": "Allow", "Action": "kms:GenerateDataKey", "Resource": "*" } ] }

Yukarıdaki snippet'te BUCKET_NAME yer tutucusunu değiştirdiğinizden emin olun.

Artık günlükleri (CloudWatch Günlükleri, bir S3 kovası veya her ikisini) depolamak için bir yer oluşturduğumuza göre, SSH oturumlarından yararlanmaya hazırız.

AWS Sistem Yöneticisi Oturum Yöneticisi

Bu, SSH oturumu izleme ve günlüğe kaydetme için Linux makinemize güvenli erişimi yapılandırdığımız son önemli adımdır. Oturum Yöneticisi panosunda başlayacağız.

"Nasıl çalışır", "Session Manager neden kullanılır?", "Başlarken", "Daha fazla kaynak" ve sağ üst köşede "Oturum başlat" bölümleriyle AWS Session Manager panosunun ekran görüntüsü. İkinci bölümde turuncu bir "Oturumu Başlat" düğmesi ve beyaz bir "Tercihleri ​​Yapılandır" düğmesi bulunur.
Adım 1: Gösterge tablosunu kullanmaya başlama.

Kontrol panelinde, oturum günlüğünü etkinleştirmek için sağ üstteki "Bir oturum başlat" kutusundaki beyaz "Tercihleri ​​Yapılandır" düğmesine tıklayın.

Tercihler sayfasında, keşfedebileceğimiz birden fazla bölüm bulacağız, ancak Linux makinemizde neler olduğunu hızlıca görmemizi sağlamak için SSH oturum günlüklerini CloudWatch veya S3'e aktarmaya odaklanacağız.

"CloudWatch günlüğü" başlıklı bir AWS bölümünün ekran görüntüsü. "CloudWatch günlüğü" olarak da adlandırılan ilk ayarı, işaretli Etkinleştir etiketli bir onay kutusuna sahiptir. Sonraki ayar olan "Tercih ettiğiniz günlük kaydı seçeneğini seçin", "Oturum günlüklerini yükle" yerine "Akış oturumu günlükleri (Önerilen)" seçilidir. Sonraki ayar olan "Şifrelemeyi uygula", işaretli "Yalnızca şifrelenmiş CloudWatch günlük gruplarına izin ver" etiketli bir onay kutusuna sahiptir. Son ayar olan "CloudWatch günlük grubu", "Metin kutusuna bir günlük grubu girin" yerine "Listeden bir günlük grubu adı seçin" seçilmiştir. Altında, "ssm-session-demo" seçili olarak "CloudWatch günlük grupları" listesi bulunur. "Şifreleme" ("Şifreli" olarak ayarlandı), "Olayların süresi dolmadan sonra" ("Asla sona erme" olarak ayarlandı), "Metrik filtreler" (0'a ayarlandı), "Depolanan baytlar" (0'a ayarlandı) ve ilgili sütunlara sahiptir. "Oluşturma zamanı" zaman damgası.
Adım 2a: CloudWatch günlüğünü etkinleştirme.

“CloudWatch logging” bölümünden hemen sonra, kovayı seçebileceğimiz bir “S3 logging” bölümü var.

"S3 günlüğü" başlıklı bir AWS bölümünün ekran görüntüsü. İlk ayarı olan "Oturum günlüklerini S3'e gönder", işaretli "Etkinleştir" etiketli bir onay kutusuna sahiptir. Bir sonraki ayarı olan "Şifrelemeyi uygula", işaretli "Yalnızca şifreli S3 kovalarına izin ver" etiketli bir onay kutusuna sahiptir. Bir sonraki ayarı olan "S3 kovası seç", "Metin kutusuna bir kova adı girin" yerine "Listeden bir kova adı seçin" seçilmiştir. Bunun altında açılır listeden "ssm-session-demo" seçilir. Son alan olan "S3 anahtar öneki - isteğe bağlı" boştur.
Adım 2b: S3 günlüğünü etkinleştirme.

SSH günlüğü yapılandırıldıktan sonra, Linux makinemize SSH uygulayabilir ve etkinliğin yakalanıp yakalanmadığını görmek için bazı komutlar yürütebiliriz.

Öyleyse, bir oturum başlatalım. Aynı sayfada, bir oturum başlatabileceğimiz bir “Oturumlar” sekmesi bulacağız. "Oturumu başlat" düğmesine tıklamak, bize bir oturum başlatabileceğimiz EC2 makinelerinin bir listesini verecektir:

AWS Systems Manager, Session Manager ve Bir oturum başlat öğelerini içeren bir AWS ekran görüntüsü. Bir "Hedef örnekler" arama kutusu doldurulmuş bir sorgu içermez ve "Örnek adı" "SSM Demosu" olarak ayarlanmış yalnızca bir sonuç vardır.
Adım 3: Bir SSH oturumu başlatmak için EC2 bulut sunucumuzu seçme.

EC2 Linux örneğimizi listede görmüyorsak, çalışır durumda olup olmadığını ve daha önce açıkladığımız IAM izinlerine sahip olup olmadığını kontrol etmeliyiz.

Bir SSM Aracısının İşlenmesi "Akış Günlüklerini Desteklemiyor" Hatası

EC2 makinemizde kurulu SSM Agent sürümünün CloudWatch günlüklerinin akışını desteklemediğini söyleyen bir hata almamız durumunda endişelenmeyin. Bunu düzeltmenin acısız bir yolu var.

Kırmızı bir arka plan üzerinde beyaz metin içeren bir AWS hata mesajının ekran görüntüsü. "Bu örnekte yüklü olan SSM Agent sürümü, CloudWatch'a akış günlüklerini desteklemiyor. SSM Agent'ı en son sürüme güncelleyin veya tercihlerinizde akış günlükleri seçeneğini devre dışı bırakın." mesajının yanında daire içine alınmış bir X işareti bulunur.
Olası bir "eski SSM aracısı sürümü" hatası.

SSM Agent'ı güncellemek için AWS Systems Manager hizmetinin sol panelindeki Run Command'a gitmemiz gerekiyor.

"Nasıl Çalışır", "Özellikler ve Avantajlar", "Kullanım Örnekleri ve Blog Gönderileri", "Belgeler" ve sağ üst köşede "Örneklerinizi yönetin" bölümlerinin bulunduğu AWS Systems Manager Çalıştırma Komutu panosunun ekran görüntüsü. Bu bölüm yalnızca turuncu bir "Komut Çalıştır" düğmesi içerir.
Adım 1: “Komutu Çalıştır” panosundan başlayarak.

Oradayken, bazı parametreleri doldurabileceğimiz yeni bir sayfaya giden turuncu “Komut Çalıştır” düğmesine tıklayabiliriz.

AWS Systems Manager, Run Command ve Run a command öğelerini içeren AWS ekran görüntüsü. "Komut belgesi" etiketli bir arama kutusu, "AWS-UpdateSSMAgent" adlı biri seçili olarak 10 satır (sayfa 4 / 5'ten fazla) listeler. "Sahip" sütununda "Amazon" ve "Platform türleri" sütununda "Windows, Linux" vardır. En alttaki "Belge sürümü" alanında açılır listeden "1 (Varsayılan)" seçilmiştir.
Adım 2: Bir komut belgesi seçme.

Listeden AWS-UpdateSSMAgent'ı seçerek başlayacağız.

"Hedefler" başlıklı bir AWS bölümünün ekran görüntüsü. "Hedefler" olarak da adlandırılan ilk alan, "Örnek etiketlerini belirle", "Örnekleri manuel olarak seç" (seçili) ve "Bir kaynak grubu seç" seçeneklerine sahiptir. Altta, sorgusuz bir "Örnekler" arama kutusu bulunur ve tek sonucu "SSM Demosu" işaretlenir. Satırdaki karşılık gelen örnek kimliği, bir X ile "Örnekler"in hemen üzerindeki bir kutuya kopyalanır.
Adım 3: Güncellemeye ihtiyaç duyan bir SSM aracısına sahip EC2 bulut sunucusunu seçme.

Bu seçildiğinde, "Hedefler" bölümünü görene kadar aşağı kaydıracağız. Orada SSM Agent'ı güncellemek istediğimiz EC2 örneğini seçmemiz ve sonunda "Çalıştır" düğmesine basmamız gerekiyor. Bu bizi güncellemenin ilerlemesini izleyebileceğimiz bir sayfaya gönderecektir.

"AWS Systems Manager", "Run Command" ve "Command ID" (ardından bir GUID) içerik kırıntılarını içeren bir AWS ekran görüntüsü. İlk bölüm olan "Komut durumu", daha önceki tek örneği listeleyen sonraki bölümün tek satırı olan "Hedefler ve çıktılar"da olduğu gibi başarı göstergelerini gösterir. Alt kısımda ayrıca genişletilmemiş iki bölüm vardır, "Komut açıklaması" ve "Komut parametreleri".
Adım 4: Güncelleme ilerlememizin izlenmesi.

Aracı güncellemesi beş dakikadan fazla sürmemelidir. Bu yapıldıktan sonra, Oturum Yöneticisinde bir oturum oluşturabilmeliyiz.

Bu noktada bir SSH oturumu başlatmış olmalıyız.

Bir terminalin üzerinde oturum kimliği ve örnek kimliği ile AWS'nin ekran görüntüsü. Komut istemi "sh-4.2$" ve "whoami" ve "pwd" komutları, sırasıyla "ssm-user" ve "/usr/bin" çıktılarıyla girildi.
AWS Systems Manager Session Manager aracılığıyla SSM aracısını kullanan bir SSH oturumu.

Birkaç komut yürüttükten sonra, CloudWatch Logs günlük grubuna (veya gösterilmeyen S3 kovamıza) gidelim ve etkinliğin kaydedildiğini onaylayalım.

"CloudWatch", "CloudWatch Günlükleri", "Günlük grupları", "ssm-session-demo" ve önceki adımın oturum kimliğini içeren bir AWS ekran görüntüsü. Tek bölüm, her biri bir zaman damgasına ve JSON biçimli bir mesaja sahip satırlar içeren "Olayları günlüğe kaydet" arama kutusudur. Bunlardan biri, JSON'unu güzel bir şekilde basılmış ve sağda "Kopyala" etiketli beyaz bir düğmeyle ortaya çıkarmak için genişletildi.
CloudWatch Günlüklerine kaydedilmekte olan SSH günlüğü olayları.

Artık, Linux makinemizde başlatılan her komutu kaydeden, hareketsiz şifrelemenin etkin olduğu bir kurulumumuz var.

Aslında, her komut istediğimizden daha fazla olabilir: Oturum sırasında sağlanan veya oluşturulan herhangi bir sır, CloudWatch veya S3'e kaydedilecek ve gerekli izinlere sahip herkes tarafından görülebilecek. Bunu önlemek için stty -echo; read passwd; stty echo; stty -echo; read passwd; stty echo; oturum sırasında sağlamamız gereken her sır için.

Küçük Uyarılarla Harika Bir SSM/SSH AWS Günlük Kaydı Çözümü

Session Manager, 22 numaralı bağlantı noktasını açmak zorunda kalmadan AWS'deki sanal makinelerimize uzaktan erişim elde etmek için kullanışlı bir araçtır. Aslında, Oturum Yöneticisi olarak bağlantı noktası yönlendirme veya doğrudan bir SSH bağlantısı kullanırsak SSH günlüklerini bu şekilde oluşturamayız. dokümantasyon notları.

Bununla birlikte, Session Manager'ı oturum günlüğüyle birleştirmek, VM'lerdeki etkinliği kontrol etmek ve izlemek için sağlam bir çözümdür. Ayrıca, Session Manager hizmetini kullanmak için ücretlendirilmiyoruz. Yalnızca EC2 bulut sunucumuz ve CloudWatch Logs veya günlükleri depolamak için bir S3 paketi için ödeme yaparız.

Video eğitimlerini tercih eden okuyucular için YouTube'da çok benzer bir prosedürü biraz daha ayrıntılı olarak ele aldım.


Toptal Mühendislik Blogunda Daha Fazla Okuma:

  • Örnek Olay: Ürünlerim İçin Neden AWS Bulut Altyapısını Kullanıyorum?