AWS Türkçe Blog

IAM Roles Anywhere ile çalışan gizli anahtarların güvenliğini sağlamak için kriptografik modülleri kullanın

Orijinal makale : Link (Edouard Kachelmann)

AWS Identity and Access Management (IAM) Roles Anywhere, sunucular, container’lar ve uygulamalar gibi Amazon Web Services (AWS) dışında çalışan iş yüklerinin, AWS’deki iş yüklerinde IAM rollerini kullandığınız gibi geçici AWS kimlik bilgileri almak ve AWS kaynaklarına erişmek için X.509 dijital sertifikaları kullanmasını sağlar. Artık IAM Roles Anywhere, son kullanıcı X.509 sertifikalarınızla ilişkili özel anahtarları güvenli bir şekilde saklamanıza yardımcı olmak için PKCS #11 uyumlu kriptografik modülleri kullanmanıza olanak tanır.

Kriptografik modüller, modül şeklindeki donanımlarda dışa aktarılamayan asimetrik anahtarlar oluşturmanıza olanak tanır. IAM Roles Anywhere ile bir kriptografik modül kullanmak, son kullanıcı X.509 sertifikalarınızla ilişkili gizli anahtarların modül içerisinde kalmasını, sisteme erişilememesini veya kopyalanamamasını sağlamaya yardımcı olur.

Bu makalede, gizli anahtarları güvenli bir şekilde saklamak için şirket içi sunucularınızda YubiKey 5 serisi ve Thales ID akıllı kartları gibi PKCS #11 uyumlu kriptografik modüllerini nasıl kullanabileceğinizi göstereceğim. Ayrıca AWS Komut Satırı Arabirimi (AWS CLI) ve AWS SDK‘ları için geçici kimlik bilgileri elde etmek üzere bu gizli anahtarları ve sertifikaları nasıl kullanacağınızı da göstereceğim.

Kriptografik modüllerin kullanım alanları

IAM Roles Anywhere, güvenlik konumunuzun iyileştirilmesine yardımcı olmak için AWS dışında çalışan iş yükleri için uzun vadeli AWS kimlik bilgilerini yönetme ihtiyacını azaltır. Artık IAM Roles Anywhere, kimlik bilgisi yardımcısı aracına (credential helper tool) uyumlu PKCS #11 kriptografik modüller için destek ekleyerek bu modülleri kullanmakta olan kuruluşların (savunma, kamu veya büyük işletmeler gibi) gizli anahtarlarını kendi güvenlik cihazlarında saklamalarına olanak tanıyor. Böylelikle gizli anahtarların yetkisiz kullanıcılar tarafından erişilebilecekleri veya kopyalanabilecekleri sunucularda dosya olarak saklanması riski azaltılmış olur.

Not: Kuruluşunuz PKCS #11 uyumlu modüller kullanmıyorsa, IAM Roles Anywhere kimlik bilgisi yardımcısı, işletim sistemi sertifika depolarını desteği ile (macOS için Keychain Access ve Cryptography API: Windows için Yeni Nesil (CNG)) sertifikalarınızın ve gizli anahtarlarınızın korunmasına yardımcı olur.

Çözüme genel bakış

Bu kimlik doğrulama akışı Şekil 1’de gösterilmekte ve aşağıdaki bölümlerde açıklanmaktadır.

Figure 1: Authentication flow using crypto modules with IAM Roles Anywhere

Şekil 1: IAM Roles Anywhere ile kripto modüllerini kullanarak kimlik doğrulama akışı

Nasıl çalışır?

Ön koşul olarak, önce IAM Roles Anywhere içinde bir güven bağlantısı (trust anchor) ve profil oluşturmanız gerekir. Güven bağlantısı, açık anahtar altyapınız (public key infrastructure – PKI) ile IAM Roles Anywhere arasında güven oluşturur ve profil, IAM Roles Anywhere’in hangi rolleri üstleneceğini ve iş yüklerinizin geçici kimlik bilgileriyle neler yapabileceğini belirtmenize olanak tanır. Bir güven bağlantısı oluşturarak IAM Roles Anywhere ile sertifika yetkiliniz (CA) arasında güven tesis edersiniz. Güven bağlantısı, AWS Private Certificate Authority’e (AWS Private CA) veya harici bir CA sertifikasına referanstır. Bu kılavuz için AWS Private CA’yi kullanacaksınız.

Tek seferlik başlatma işlemi (Şekil 1’deki “0 – Modül başlatma” adımı) aşağıdaki gibi çalışır:

  1. Önce kriptografik modülün güvenli container’ı içinde dışa aktarılamayan gizli anahtar oluşturursunuz.
  2. Ardından bir kimliği açık anahtara bağlayacak X.509 sertifikasını oluşturursunuz:
    1. Bir sertifika imzalama isteği (CSR) oluşturun.
    2. CSR’yi AWS Özel CA’ya gönderin.
    3. Güven oluşturmak için CA tarafından imzalanmış sertifikayı alın.
  3. Sertifika daha sonra mobilite amacıyla kriptografik modüle aktarılır, böylece modül sunucuya bağlandığında kullanılabilir ve kolayca bulunabilir hale gelir.

Başlatma işlemi tamamlandıktan sonra modül sunucuya bağlanır ve böylece diskte saklanan uzun süreli kimlik bilgileri olmadan AWS CLI ve AWS SDK ile etkileşime girebilir.

IAM Roles Anywhere’den geçici güvenlik kimlik bilgilerini almak için:

  1. Sunucu, IAM Roles Anywhere’in sağladığı kimlik bilgisi yardımcısı aracını kullanacaktır. Kimlik bilgisi yardımcısı, CLI ve uygulama dillerine ait SDK’lar tarafından kullanılabilecek kimlik bilgileri sağlamak için AWS CLI’ın credential_process özelliğiyle birlikte çalışır. Yardımcı aracı, gizli anahtar ile imza oluşturma sürecini yönetir.
  2. Kimlik bilgisi yardımcı aracı, CreateSession API metodu aracılığıyla IAM Roles Anywhere istemcilerine standart bir JSON formatında verilen geçici kimlik bilgilerini almak için IAM Roles Anywhere uç noktasını çağırır.
  3. Sunucu, AWS hizmetlerine programatik erişim için geçici kimlik bilgilerini kullanır.

Alternatif olarak, credential-process yerine update veya serve komutlarını kullanabilirsiniz. Update komutu, geçici kimlik bilgilerini sona erme süresinden 5 dakika önce yenileyecek ve AWS kimlik bilgileri dosyasında değiştirecek uzun süreli bir işlem olarak kullanılacaktır. Serve komutu, IMDSv2 (Instance Metadata Service Version 2) ile aynı URI’leri ve istek başlıklarını kullanarak yerel sunucuda çalışan bir uç nokta aracılığıyla geçici kimlik bilgilerini sağlamak için kullanılır.

Desteklenen modüller

IAM Roles Anywhere için kimlik bilgisi yardımcı aracı, PKCS #11 ile uyumlu çoğu cihazı destekler. PKCS #11 standardı, kriptografik bilgileri tutan ve imza ve şifreleme gibi kriptografik işlevleri gerçekleştiren aygıtlar için kullanılan bir API’yi belirtir.

PKCS #11 aracılığıyla Kişisel Kimlik Doğrulamayı (personal identity verification – PIV) destekleyen çok protokollü bir güvenlik anahtarı olan YubiKey 5 Serisi bir cihazın nasıl kullanılacağını göstereceğim. Yaygın olarak erişilebilir olduğu (Yubico mağazasından veya Amazon.com‘dan satın alabilirsiniz) ve dünyanın en büyük şirketlerinden bazıları tarafından tek seferlik parola (OTP), Fast IDentity Online (FIDO) ve çok faktörlü kimlik doğrulama için akıllı kart arayüzü olarak PIV sağlama aracı olarak kullanıldığından, demo amacıyla YubiKey 5 Serisini kullanıyorum. Bir canlı ortam sunucusu için, YubiHSM 2, Luna PCIe HSM veya sunucularınızda bulunan Güvenilir Platform Modülleri (TPM’ler) gibi sunucuya özgü PKCS #11 uyumlu donanım güvenlik modüllerini (HSM’ler) kullanmanızı öneririz.

Not: Uygulama diğer modüllerle farklılık gösterebilir, bazı modüller kendi özel araçları ve sürücüleriyle birlikte gelmektedir.

Çözümü uygulayın: Modül başlatma

Modülü başlatmak için aşağıdaki ön koşullara sahip olmanız gerekir:

Aşağıda YubiKey cihazının başlatılması ve AWS Private Certificate Authority (AWS Private CA) tarafından imzalanan sertifikanın oluşturulmasına yönelik genel adımlar yer almaktadır. Kendi açık anahtar altyapınızı (PKI) da kullanabileceğinizi ve bunu IAM Roles Anywhere ile kaydedebileceğinizi unutmayın.

Modülü başlatmak ve bir sertifika oluşturmak için

  1. YubiKey PIV arayüzünün etkin olduğunu doğrulayın, çünkü bazı kuruluşlar kullanılmayan arayüzleri devre dışı bırakabilir. Bunu gerçekleştirmek için YubiKey Manager CLI’yi aşağıdaki gibi çalıştırın:
    ykman info

    USB için PIV arayüzü etkinleştirildiğinde çıktı aşağıdaki gibi görünmelidir.

    Figure 2:YubiKey Manager CLI showing that the PIV interface is enabled

    Şekil 2: PIV arayüzünün etkinleştirildiğini gösteren YubiKey Manager CLI

  2. 9a slotundaki güvenlik modülünde yeni bir RSA2048 gizli anahtarı oluşturmak ve ilişkili açık anahtarı bir dosyada saklamak için YubiKey Manager CLI kullanın. YubiKey’de farklı slotlar mevcuttur ve burada PIV kimlik doğrulama amacıyla 9a slotunu kullanacağız. Asimetrik anahtar çifti oluşturmak için aşağıdaki komutu kullanın. Gizli anahtar YubiKey üzerinde oluşturulur ve oluşturulan açık anahtar bir dosya olarak kaydedilir. Devam etmek için YubiKey yönetim anahtarını girin:
    ykman ‐‐device 123456 piv keys generate 9a pub-yubi.key
  3. Açık anahtara bağlı olarak bir sertifika isteği (CSR) oluşturun ve sunucunuzu tanımlayacak özneyi belirtin. İstendiğinde kullanıcı PIN kodunu girin.
    ykman --device 123456 piv certificates request 9a --subject 'CN=server1-demo,O=Example,L=Boston,ST=MA,C=US' pub-yubi.key csr.pem
  4. CA tarafından imzalanmış sertifikayı almak için sertifika isteğini AWS Private CA’ya gönderin.
    aws acm-pca issue-certificate \
    --certificate-authority-arn arn:aws:acm-pca:<region>:<accountID>:certificate-authority/<ca-id> \
    --csr fileb://csr.pem \
    --signing-algorithm "SHA256WITHRSA" \
    --validity Value=365,Type="DAYS"
  5. Panoya aşağıdaki gibi görünmesi gereken sertifika Amazon Resource Number’ı (ARN) kopyalayın:
    {
    "CertificateArn": "arn:aws:acm-pca:<region>:<accountID>:certificate-authority/<ca-id>/certificate/<certificate-id>"
    }
  6. Yeni sertifikayı AWS Private CA’dan bir certificate.pem dosyasına aktarın.
    aws acm-pca get-certificate \
    --certificate-arn arn:aws:acm-pca:<region>:<accountID>:certificate-authority/<ca-id>/certificate/<certificate-id> \
    --certificate-authority-arn arn:aws:acm-pca: <region>:<accountID>:certificate-authority/<ca-id> \
    --query Certificate \
    --output text > certificate.pem
  7. YubiKey Manager CLI veya YubiKey Manager UI aracılığıyla modüle sertifika dosyasını aktarın. Devam etmek için YubiKey yönetim anahtarını girin.
    ykman --device 123456 piv certificates import 9a certificate.pem

Güvenlik modülü artık başlatılmış durumdadır ve sunucuya takılabilir.

Programatik erişim için güvenlik modülünü kullanmak üzere yapılandırma

Aşağıdaki adımlarda, YubiKey veya PKCS #11 uyumlu cihazda saklanan gizli anahtarı kullanarak AWS CLI ve AWS SDK’ları ile etkileşim kurmak için sunucunun nasıl yapılandırılacağı gösterilecektir.

YubiKey modülünü kimlik bilgisi yardımcısı ile kullanmak için

  1. İşletim sisteminize göre IAM Roles Anywhere için kimlik bilgisi yardımcı aracını indirin.
  2. p11-kit paketini yükleyin. Çoğu sağlayıcı (opensc dahil) kendilerini keşfedilebilir kılan bir p11-kit “modül” dosyası ile birlikte gelir. Kullanıcıların kimlik bilgisi yardımcısını kullanırken PKCS #11 “sağlayıcı” kütüphanesini belirtmelerine gerek yoktur, çünkü varsayılan olarak p11-kit kullanırız.Cihaz kütüphaneniz p11-kit tarafından desteklenmiyorsa, bu kütüphaneyi ayrıca yükleyebilirsiniz.
  3. Aşağıdaki komutu kullanarak YubiKey’in içeriğini doğrulayın:
    ykman --device 123456 piv info
    Çıktı aşağıdaki gibi görünmelidir.

    Figure 3: YubiKey Manager CLI output for the PIV information

    Şekil 3: PIV bilgileri için YubiKey Manager CLI çıktısı

    Bu komut, PIV uygulamasının genel durumunu ve yüklü sertifikalar gibi farklı slotlardaki içeriği gösterir.

  4. Güvenlik modülüyle birlikte kimlik bilgisi yardımcısı komutunu kullanın. Komut en az şunları gerektirecektir:
    • Güven bağlantısının ARN değeri
    • Üstlenilecek hedef rolün ARN değeri
    • Politikaların çekileceği profilin ARN değeri
    • PKCS #11 URI formundaki sertifika ve/veya anahtar tanımlayıcıları

Güvenlik modülündeki hangi slotun kullanıcı sertifikasıyla ilişkili gizli anahtarı içerdiğini aramak için certificate işaretini kullanabilirsiniz.

Kriptografik modülde depolanan bir nesneyi belirtmek için RFC7512‘de tanımlanan PKCS #11 URI’yi kullanmalısınız. Tanımlayıcı dizesindeki öznitelikler, bir dizi nesneyi filtrelemek için kullanılan bir dizi arama ölçütüdür. PKCS #11’de nesneleri bulmak için önerilen bir yönteme bakın.

Aşağıdaki örnekte, 1 numaralı slotta, nesne label değeri “Certificate for Digital Signature” olan certificate türünde bir nesne aranmaktadır. pin-value özniteliği, kriptografik cihazda oturum açmak için doğrudan pini kullanmanızı sağlar.

pkcs11:type=cert;object=Certificate%20for%20Digital%20Signature;id=%01?pin-value=123456

Kimlik bilgisi yardımcı aracını yüklediğiniz klasörde aşağıdaki komutu çalıştırın. Cihazda yalnızca bir sertifikamız olduğundan, filtreyi PKCS #11 URI’mizdeki sertifika türüyle sınırlayabiliriz.

./aws_signing_helper credential-process
--profile-arn arn:aws:rolesanywhere:<region>:<accountID>:profile/<profileID>
--role-arn arn:aws:iam::<accountID>:role/<assumedRole> 
--trust-anchor-arn arn:aws:rolesanywhere:<region>:<accountID>:trust-anchor/<trustanchorID>
--certificate pkcs11:type=cert?pin-value=<PIN>

Her şey doğru yapılandırılmışsa, kimlik bilgisi yardımcı aracı aşağıdaki gibi kimlik bilgilerini içeren bir JSON döndürecektir. Komutta belirtmediyseniz PIN kodu istenecektir.

Please enter your user PIN:
  			{
                    "Version":1,
                    "AccessKeyId": <String>,
                    "SecretAccessKey": <String>,
                    "SessionToken": <String>,
                    "Expiration": <Timestamp>
                 }

AWS SDK’ları ve AWS CLI ile geçici güvenlik kimlik bilgilerini kullanmak için kimlik bilgisi yardımcı aracını bir kimlik bilgisi prosesi olarak yapılandırabilirsiniz. Daha fazla bilgi için harici bir proses ile kaynak kimlik bilgileri edinin linkine bakın. Aşağıdaki örnekte, yardımcı aracı kimlik bilgisi prosesi olarak ayarlayan bir yapılandırma dosyası (genellikle ~/.aws/config içinde) gösterilmektedir.

[profile server1-demo]
credential_process = ./aws_signing_helper credential-process --profile-arn <arn-for-iam-roles-anywhere-profile> --role-arn <arn-for-iam-role-to-assume> --trust-anchor-arn <arn-for-roles-anywhere-trust-anchor> --certificate pkcs11:type=cert?pin-value=<PIN> 

PIN kodunu kimlik bilgisi komutunun bir parçası olarak pin-value=<PIN> seçeneğiyle sağlayabilirsiniz, böylece kullanıcı girişi gerekmez.

PIN kodunuzu yapılandırma dosyasında saklamamayı tercih ederseniz pin-value özniteliğini kaldırabilirsiniz. Bu durumda, her CLI komutu için PIN kodunu girmeniz istenecektir.

PIN kodunu kimlik bilgisi komutunun bir parçası olarak pin-value=<PIN> seçeneğiyle sağlayabilirsiniz, böylece kullanıcı girişi gerekmez.

PIN kodunuzu yapılandırma dosyasında saklamamayı tercih ederseniz pin-value özniteliğini kaldırabilirsiniz. Bu durumda, her CLI komutu için PIN kodunu girmeniz istenecektir.

Gözetimsiz iş yükleri için kimlik bilgisi rotasyonunu yönetmek amacıyla çözüme genel bakış bölümünde bahsedilen kimlik bilgisi yardımcısının serve ve update komutlarını kullanabilirsiniz. PIN’in başarılı bir şekilde kullanılmasından sonra, kimlik bilgisi yardımcısı PIN’i işlem süresince bellekte saklayacak ve bir daha istemeyecektir.

Denetlenebilirlik ve ayrıntılı erişim

IAM Roles Anywhere, serviste bir kullanıcı, rol veya bir AWS hizmeti tarafından gerçekleştirilen eylemlerin kaydını sağlayan bir hizmet olan AWS CloudTrail ile entegre edilmiştir.

CloudTrail’de IAM Roles Anywhere etkinliğini görüntülemek için

  1. AWS CloudTrail konsolunda, sol gezinti menüsünde Event history‘i seçin.
  2. Lookup attributes için, Event source‘u seçin ve metin kutusuna rolesanywhere.amazonaws.com değerini girin. AWS kaynaklarına erişmek için IAM Roles Anywhere ile kimliği doğrulanan iş yükleri için geçici güvenlik kimlik bilgilerini döndüren CreateSession API çağrısı da dahil olmak üzere IAM Roles Anywhere ile ilgili tüm API çağrılarını bulacaksınız.

    Figure 4: CloudTrail Events filtered on the “IAM Roles Anywhere” event source

    Şekil 4: “IAM Roles Anywhere” olay kaynağıyla filtrelenen CloudTrail Events

  3. CreateSession olay kaydı ayrıntılarını incelediğinizde, varsayılan rol kimliğini aşağıdaki örnekte olduğu gibi <PrincipalID>:<serverCertificateSerial>, şeklinde bulabilirsiniz:

    Figure 5: Details of the CreateSession event in the CloudTrail console showing which role is being assumed

    Şekil 5: CloudTrail konsolundaki CreateSession event’inde hangi rolün üstlenildiğini gösteren ayrıntılar

    Bir sunucu tarafından yapılan API çağrılarını tanımlamak istiyorsanız, Lookup attributes için User name seçin ve bir önceki adımda yer alan serverCertificateSerial değerini metin kutusuna girin.

    Figure 6: CloudTrail console events filtered by the username associated to our certificate on the security module

    Şekil 6: Güvenlik modülündeki sertifikamızla ilişkili kullanıcı adına göre filtrelenen CloudTrail konsol event’leri

    IAM Roles Anywhere aracılığıyla edinilen geçici kimlik bilgileriyle AWS hizmetlerine yapılan API çağrıları, SourceIdentity alanında çağrıyı yapan sunucunun kimliğini içerecektir. Örneğin, EC2 DescribeInstances API çağrısı aşağıdaki ayrıntıları sağlar:

    Figure 7: The event record in the CloudTrail console for the EC2 describe instances call, with details on the assumed role and certificate CN.

    Şekil 7: CloudTrail konsolunda EC2 describe instances çağrısı için olay kaydı, üstlenilen rol ve sertifika CN ile ilgili ayrıntılar.

Ayrıca, IAM rolü için kimlik ilkesine koşullar ekleyerek ayrıntılı erişim denetimi uygulayabilirsiniz. Bu, sunucu grubundaki hangi sunucunun eylemi gerçekleştirebileceğini belirtmek için ayrıntılı bir erişim denetimi filtresi uygulamanıza olanak tanır.

Aynı IAM Roles Anywhere profili içinde sunucu bazlı erişim denetimi uygulamak için

  1. IAM Roles Anywhere konsolunda, sunucu grubu tarafından kullanılan profili seçin ve ardından üstlenilen rollerden birini seçin.
  2. aws:SourceIdentity koşulunu kullanarak yalnızca CN=server1-demo olan sunucunun tüm klasörleri listelemesine izin verecek olan aşağıdaki politikayı uygulayın.
    {
      "Version":"2012-10-17",
      "Statement":[
        {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "s3:ListBuckets",
                "Resource": "*",
                "Condition": {
                    "StringEquals": {
                        "aws:SourceIdentity": "CN=server1-demo"
                    }
                }
            }
      ]
    }

Sonuç

Bu blog makalesinde, IAM Roles Anywhere ile kullanılan X.509 sertifikalarının gizli anahtarlarını güvenli bir şekilde saklamak için YubiKey 5 Serisini (veya herhangi bir PKCS #11 kriptografik modülü) nasıl kullanabileceğinizi gösterdim. Sunucular tarafından üstlenilen roller tarafından gerçekleştirilen API eylemlerini denetlemek için AWS CloudTrail’i nasıl kullanabileceğinizi de vurguladım.

IAM Roles Anywhere hakkında daha fazla bilgi edinmek için IAM Roles Anywhere ve Kimlik Bilgisi Yardımcısı aracı dokümanlarına bakın. Thales IDPrime akıllı kart ile yapılandırma için, IAM Roles Anywhere için kimlik bilgisi yardımcısı GitHub sayfasını inceleyin.

Bu gönderi hakkında geri bildiriminiz varsa, aşağıdaki Comments bölümünde yorumlarınızı gönderin. Bu gönderi hakkında sorularınız varsa AWS Identity and Access Management re:Post‘ta yeni bir konu başlatın veya AWS Destek ile iletişime geçin.

Daha fazla AWS Security haberi mi istiyorsunuz? Bizi Twitter‘da takip edin.