Zephyrnet Logosu

AWS'de MLflow'un güvenliğini sağlama: AWS yerel hizmetleriyle ayrıntılı erişim denetimi

Tarih:

İle Amazon Adaçayı Yapıcı, tüm uçtan uca makine öğrenimi (ML) yaşam döngüsünü yönetebilirsiniz. Deney izleme ve model kayıt defteri aracılığıyla model yönetişimi gibi makine öğrenimi iş akışlarının özelliklerini yönetmeye yardımcı olacak birçok yerel yetenek sunar. Bu gönderi, ML iş akışlarını yönetmek için açık kaynaklı bir platform olan MLflow'u zaten kullanan müşterilere özel bir çözüm sunuyor.

İçinde önceki yazı, MLflow'u ve AWS'de nasıl çalışabileceğini ve SageMaker ile nasıl entegre edilebileceğini, özellikle de eğitim işlerini deney olarak izlerken ve MLflow'da kayıtlı bir modeli SageMaker tarafından yönetilen altyapıya dağıtırken tartıştık. Ancak açık kaynak versiyonu of MLflow, izleme sunucusundaki birden çok kiracı için yerel kullanıcı erişim denetimi mekanizmaları sağlamaz. Bu, sunucuya erişimi olan herhangi bir kullanıcının yönetici haklarına sahip olduğu ve deneyleri, model sürümlerini ve aşamaları değiştirebileceği anlamına gelir. Bu, denetim amaçları için güçlü bir yönetişim modeli sürdürmesi gereken, düzenlemeye tabi sektörlerdeki kuruluşlar için bir zorluk olabilir.

Bu gönderide, erişim kontrolünü MLflow sunucusunun dışında uygulayarak ve kimlik doğrulama ve yetkilendirme görevlerini Amazon API Ağ Geçidikullanarak kaynak düzeyinde ayrıntılı erişim kontrol mekanizmalarını uyguladığımız Kimlik ve Erişim Yönetimi (BEN). Bunu yaparak, MLflow sunucusuna hem SageMaker tarafından yönetilen altyapıdan hem de Amazon SageMaker Stüdyosu, kimlik bilgileri ve kimlik bilgisi yönetiminin arkasındaki tüm karmaşıklık hakkında endişelenmenize gerek kalmadan. Bu mimaride önerilen modüler tasarım, MLflow sunucusunun kendisini etkilemeden erişim kontrol mantığını değiştirmeyi kolaylaştırır. Son olarak, SageMaker Studio genişletilebilirliği sayesinde, aşağıdaki ekran görüntüsünde gösterildiği gibi MLflow'u Studio içinde erişilebilir hale getirerek veri bilimcisi deneyimini daha da iyileştiriyoruz.

Studio'da MLflow

MLflow, etkinleştiren özelliği entegre etti AWS kimlik bilgilerini kullanarak imzalama isteği Python SDK'sı için yukarı akış deposuna aktararak SageMaker ile entegrasyonu geliştirir. MLflow Python SDK'daki değişiklikler, MLflow sürüm 1.30.0'dan bu yana herkes tarafından kullanılabilir.

Yüksek düzeyde, bu gönderi aşağıdakileri gösterir:

  • Doğrudan dışarıdan erişilemeyen özel bir alt ağda çalışan sunucusuz bir mimaride bir MLflow sunucusu nasıl dağıtılır. Bu görev için, aşağıdaki GitHub deposunu en üstte oluşturuyoruz: Makine öğrenimi yaşam döngünüzü MLflow ve Amazon SageMaker ile yönetin.
  • MLflow sunucusunu özel entegrasyonlar aracılığıyla bir API Ağ Geçidine maruz bırakma ve SDK aracılığıyla programatik erişim ve MLflow kullanıcı arabirimi aracılığıyla tarayıcı erişimi için güvenli bir erişim denetimi uygulama.
  • İsteklerin kimliğini doğrulamak ve yetkilendirmek için ilişkili SageMaker yürütme rollerini kullanarak deneyleri ve çalıştırmaları günlüğe kaydetme ve modelleri SageMaker'dan bir MLflow sunucusuna kaydetme ve Amazon Cognito'su MLflow kullanıcı arabirimine. Sağlanan belgelerde, sırasıyla SageMaker eğitim işlerinden ve Studio'dan MLflow ile deney izlemeyi ve model kaydını kullanmayı gösteren örnekler sunuyoruz. defter.
  • MLflow'u çoklu hesap kurulumunda merkezi depo olarak kullanma.
  • Studio içinde MLflow oluşturarak kullanıcı deneyimini geliştirmek için Studio nasıl genişletilir. Bu görev için, bir JupyterLab uzantısı kurarak Studio genişletilebilirliğinden nasıl yararlanılacağını gösteriyoruz.

Şimdi daha derin ayrıntılara inelim.

Çözüme genel bakış

MLflow'u yan yana çalışan üç farklı temel bileşen olarak düşünebilirsiniz:

  • Arka uç MLflow izleme sunucusu için bir REST API'si
  • Model eğitim kodunuzdan MLflow izleme sunucusu API'leri ile programatik olarak etkileşim kurmanız için SDK'lar
  • Deneylerinizi, çalıştırmalarınızı ve yapıtlarınızı görselleştirmek için MLflow kullanıcı arabirimine yönelik bir React ön ucu

Yüksek düzeyde, öngördüğümüz ve uyguladığımız mimari aşağıdaki şekilde gösterilmektedir.

mimari

Önkoşullar

Çözümü dağıtmadan önce yönetici izinlerine sahip bir AWS hesabına erişiminiz olduğundan emin olun.

Çözüm altyapısını devreye alın

Bu yayında açıklanan çözümü dağıtmak için aşağıdaki ayrıntılı talimatları izleyin. GitHub deposu BENİ OKU. Altyapı dağıtımını otomatikleştirmek için AWS Bulut Geliştirme Kiti (AWS CDK'sı). AWS CDK, oluşturmak için açık kaynaklı bir yazılım geliştirme çerçevesidir. AWS CloudFormation yığınlar otomatik olarak CloudFormation şablonu nesil. Yığın, program aracılığıyla güncellenebilen, taşınabilen veya silinebilen bir AWS kaynakları koleksiyonudur. AWS CDK'sı yapılar bulut mimarilerini tanımlama planını temsil eden AWS CDK uygulamalarının yapı taşlarıdır.

Dört yığını birleştiriyoruz:

  • The MLFlowVPCS yığını yığın aşağıdaki eylemleri gerçekleştirir:
  • The RestApiGateway Yığını yığın aşağıdaki eylemleri gerçekleştirir:
    • AWS PrivateLink aracılığıyla MLflow sunucusunu bir REST API Ağ Geçidine maruz bırakır.
    • Kullanıcı arabirimine erişen kullanıcıları yönetmek için bir Amazon Cognito kullanıcı havuzu dağıtır (dağıtımdan sonra hala boştur).
    • dağıtır AWS Lambda JWT belirtecini Amazon Cognito kullanıcı havuzu kimliği anahtarlarıyla doğrulama yetkisi verir ve bir isteğe izin vermek veya reddetmek için IAM politikaları döndürür. Bu yetkilendirme stratejisi aşağıdakilere uygulanır: <MLFlow-Tracking-Server-URI>/*.
    • Bir IAM yetkilendiricisi ekler. Bu, <MLFlow-Tracking-Server-URI>/api/*, bir öncekinden öncelikli olacaktır.
  • The AmplifyMLFlowStack yığın aşağıdaki eylemi gerçekleştirir:
    • Şuradaki yamalı MLflow deposuna bağlı bir uygulama oluşturur: AWS CodeCommit MLflow kullanıcı arabirimini oluşturmak ve dağıtmak için.
  • The SageMakerStudioUserStack yığın aşağıdaki eylemleri gerçekleştirir:
    • Bir Studio etki alanı dağıtır (henüz yoksa).
    • Her biri farklı bir erişim düzeyi uygulayan farklı SageMaker yürütme rolüne sahip üç kullanıcı ekler:
      • mlflow-yönetici – Herhangi bir MLflow kaynağına yönetici benzeri izne sahiptir.
      • mlflow-okuyucu – Herhangi bir MLflow kaynağına yönelik salt okunur yönetici izinlerine sahiptir.
      • mlflow-model-onaylayıcı – mlflow-reader ile aynı izinlere sahiptir, ayrıca MLflow'daki mevcut çalışmalardan yeni modeller kaydedebilir ve mevcut kayıtlı modelleri yeni aşamalara yükseltebilir.

MLflow izleme sunucusunu sunucusuz bir mimaride dağıtın

Amacımız, MLflow izleme sunucusunun güvenilir, yüksek düzeyde kullanılabilir, uygun maliyetli ve güvenli bir şekilde devreye alınmasını sağlamaktır. Sunucusuz teknolojiler, minimum işletim yükü ile tüm bu gereksinimleri karşılamak için mükemmel adaydır. Bunu başarmak için, MLflow deneme izleme sunucusu için bir Docker kapsayıcı görüntüsü oluşturuyoruz ve bunu özel bir alt ağ üzerinde çalışan özel VPC'sinde Amazon ECS'de AWS Fargate üzerinde çalıştırıyoruz. MLflow iki depolama bileşenine dayanır: arka uç deposu ve yapı deposu için. Arka uç mağazası için Aurora Serverless kullanıyoruz ve yapı deposu için Amazon S3 kullanıyoruz. Üst düzey mimari için, bkz. Senaryo 4: Uzak İzleme Sunucusu, arka uç ve yapı depoları ile MLflow. Bu görevin nasıl yapılacağına ilişkin kapsamlı ayrıntılar aşağıdaki GitHub deposunda bulunabilir: Makine öğrenimi yaşam döngünüzü MLflow ve Amazon SageMaker ile yönetin.

API Ağ Geçidi aracılığıyla güvenli MLflow

Bu noktada, hala yerinde bir erişim kontrol mekanizmamız yok. İlk adım olarak, bizim durumumuzda API Ağ Geçidi olan VPC ile diğer AWS hizmetleri arasında özel bir bağlantı kuran AWS PrivateLink'i kullanarak MLflow'u dış dünyaya açıklıyoruz. MLflow'a gelen istekler daha sonra bir REST API Ağ Geçidi, bize gelen istekleri yetkilendirmek için çeşitli mekanizmalar uygulama imkanı veriyor. Amaçlarımız için sadece ikisine odaklanıyoruz:

  • IAM yetkilendiricilerini kullanma - İle IAM yetkilendiricileri, istek sahibinin API Ağ Geçidi kaynaklarına erişmek için atanmış doğru IAM politikasına sahip olması gerekir. Her istek, HTTP aracılığıyla gönderilen isteklere kimlik doğrulama bilgileri eklemelidir. AWS İmzası Sürüm 4.
  • Lambda yetkilendiricilerini kullanma – Bu, bir talebin nasıl yetkilendirilebileceği üzerinde tam kontrol bıraktığı için en büyük esnekliği sunar. Sonunda, Lambda yetkilendiricisi API Gateway tarafından isteğe izin verilip verilmeyeceğine göre değerlendirilecek olan bir IAM politikası döndürmelidir.

API Gateway'de desteklenen kimlik doğrulama ve yetkilendirme mekanizmalarının tam listesi için bkz. API Gateway'de bir REST API'ye erişimi kontrol etme ve yönetme.

MLflow Python SDK kimlik doğrulaması (IAM yetkilendirici)

MLflow deneme izleme sunucusu, bir REST API kaynaklar ve yapılar ile programatik bir şekilde etkileşim kurmak için. MLflow Python SDK, metrikleri, çalıştırmaları ve yapıtları günlüğe kaydetmenin uygun bir yolunu sağlar ve ad alanı altında barındırılan API kaynaklarıyla arabirim oluşturur. <MLflow-Tracking-Server-URI>/api/. API Gateway'i, bu ad alanında kaynak erişim denetimi için IAM yetkilendiricisini kullanacak şekilde yapılandırıyoruz ve bu nedenle her isteğin AWS Signature Sürüm 4 ile imzalanmasını gerektiriyor.

İstek imzalama sürecini kolaylaştırmak için, MLflow 1.30.0'dan başlayarak bu yetenek sorunsuz bir şekilde etkinleştirilebilir. emin olun requests_auth_aws_sigv4 kütüphane sisteme kurulur ve MLFLOW_TRACKING_AWS_SIGV4 ortam değişkeni True. Daha fazla bilgi şu adreste bulunabilir: resmi MLflow belgeleri.

Bu noktada, MLflow SDK'nın yalnızca AWS kimlik bilgilerine ihtiyacı vardır. Çünkü request_auth_aws_sigv4 kullanım Boto3 kimlik bilgilerini almak için, yapabileceğini biliyoruz örnek meta verilerinden kimlik bilgilerini yükle bir IAM rolü bir ile ilişkilendirildiğinde Amazon Elastik Bilgi İşlem Bulutu (Amazon EC2) bulut sunucusu (Boto3'e kimlik bilgileri sağlamanın diğer yolları için bkz. Tanıtım). Bu, bu gönderide daha sonra tartışıldığı gibi, ilişkili yürütme rolünden bir SageMaker yönetilen örneğinden çalıştırırken AWS kimlik bilgilerini de yükleyebileceği anlamına gelir.

API Ağ Geçidi aracılığıyla MLflow API'lerine erişmek için IAM politikalarını yapılandırın

API Gateway'de kimlerin kaynakları çağırabileceğini kontrol etmek için IAM rollerini ve politikalarını kullanabilirsiniz. Daha fazla ayrıntı ve IAM politikası referans beyanları için bkz. Bir API'yi çağırmak için erişimi kontrol edin.

Aşağıdaki kod, çağırana MLflow'u koruyan API Gateway'deki tüm kaynaklardaki tüm yöntemlere izin veren ve pratik olarak MLflow sunucusuna yönetici erişimi sağlayan örnek bir IAM politikasını gösterir:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "execute-api:Invoke",
      "Resource": "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/*/*",
      "Effect": "Allow"
    }
  ]
}

Bir kullanıcının tüm kaynaklara salt okunur erişimine izin veren bir politika istiyorsak, IAM politikası aşağıdaki kod gibi görünür:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": "execute-api:Invoke",
      "Resource": [
        "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/GET/*",
        "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/runs/search/",
        "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/experiments/search",
       ],
       "Effect": "Allow"
     }
  ]
}

Başka bir örnek, belirli kullanıcılara modelleri model kaydına kaydetme ve bunları daha sonra belirli aşamalara (hazırlama, üretim vb.) yükseltme izinleri veren bir politika olabilir:

{ "Version": "2012-10-17", "Statement": [ { "Action": "execute-api:Invoke", "Resource": [ "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/GET/*", "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/runs/search/", "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/experiments/search", "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/model-versions/*", "arn:aws:execute-api:<REGION>:<ACCOUNT_ID>:<MLFLOW_API_ID>/<STAGE>/POST/api/2.0/mlflow/registered-models/*" ], "Effect": "Allow" } ]
}

MLflow UI kimlik doğrulaması (Lambda yetkilendirici)

MLflow sunucusuna tarayıcı erişimi, React ile uygulanan MLflow UI tarafından gerçekleştirilir. MLflow kullanıcı arabirimi, kimliği doğrulanmış kullanıcıları desteklemek için tasarlanmamıştır. Sağlam bir oturum açma akışı uygulamak göz korkutucu bir görev gibi görünebilir, ancak neyse ki şuna güvenebiliriz: UI React bileşenlerini güçlendirin kimlik deposu için Amazon Cognito kullanarak bir React uygulamasında oturum açma akışı oluşturma çabasını büyük ölçüde azaltan kimlik doğrulama için.

Amazon Cognito, kendi kullanıcı tabanımızı yönetmemize ve ayrıca üçüncü taraf kimlik federasyonunu destekleyin, örneğin ADFS federasyonu oluşturmayı mümkün kılar (bkz. Amazon Cognito Kullanıcı Havuzlarını Kullanarak Web Uygulamanız için ADFS Federasyonu Oluşturma daha fazla ayrıntı için). Amazon Cognito tarafından verilen belirteçler, API Gateway'de doğrulanmalıdır. Ayrıntılı erişim denetimi için belirteci basitçe doğrulamak yeterli değildir, bu nedenle Lambda yetkilendiricisi bize ihtiyacımız olan mantığı uygulama esnekliği sağlar. Ardından, JWT belirtecini doğrulamak ve API Ağ Geçidinin isteği reddetmesine veya izin vermesine izin vermek için IAM politikalarını oluşturmak üzere kendi Lambda yetkilendiricimizi oluşturabiliriz. Aşağıdaki diyagram, MLflow oturum açma akışını göstermektedir.

MLflow kullanıcı arabirimi kimlik doğrulama adımları

Gerçek kod değişiklikleri hakkında daha fazla bilgi için yama dosyasına bakın. cognito.patch, MLflow sürüm 2.3.1 için geçerlidir.

Bu yama iki yetenek sunar:

  • Amplify UI bileşenlerini ekleyin ve oturum açma akışını uygulayan ortam değişkenleri aracılığıyla Amazon Cognito ayrıntılarını yapılandırın
  • JWT'yi oturumdan çıkarın ve JWT'nin nereye gönderileceğini gösteren bir taşıyıcı belirteci olan bir Yetkilendirme başlığı oluşturun

Yukarı akıştan farklı kod tutmak, her zaman yukarı akışa güvenmekten daha fazla karmaşıklık eklese de, Amplify React UI bileşenlerine güvendiğimiz için değişikliklerin minimum düzeyde olduğunu belirtmekte fayda var.

Yeni oturum açma akışı hazır olduğunda, güncellenmiş MLflow kullanıcı arabirimimiz için üretim derlemesini oluşturalım. AWS Amplify Barındırma CI/CD ve web uygulamalarının barındırılması için git tabanlı bir iş akışı sağlayan bir AWS hizmetidir. Ardışık düzendeki derleme adımı şu şekilde tanımlanır: buildspec.yamlkimlik doğrulama akışını yapılandırmak için Amplify UI React bileşeni tarafından ihtiyaç duyulan Amazon Cognito kullanıcı havuzu kimliği, Amazon Cognito kimlik havuzu kimliği ve kullanıcı havuzu istemci kimliği hakkındaki ayrıntıları ortam değişkenleri olarak ekleyebileceğimiz yer. Aşağıdaki kod bir örnektir buildspec.yaml Dosya:

version: "1.0"
applications: - frontend: phases: preBuild: commands: - fallocate -l 4G /swapfile - chmod 600 /swapfile - mkswap /swapfile - swapon /swapfile - swapon -s - yarn install build: commands: - echo "REACT_APP_REGION=$REACT_APP_REGION" >> .env - echo "REACT_APP_COGNITO_USER_POOL_ID=$REACT_APP_COGNITO_USER_POOL_ID" >> .env - echo "REACT_APP_COGNITO_IDENTITY_POOL_ID=$REACT_APP_COGNITO_IDENTITY_POOL_ID" >> .env - echo "REACT_APP_COGNITO_USER_POOL_CLIENT_ID=$REACT_APP_COGNITO_USER_POOL_CLIENT_ID" >> .env - yarn run build artifacts: baseDirectory: build files: - "**/*"

SageMaker yürütme rolünü kullanarak deneyleri ve çalıştırmaları güvenli bir şekilde günlüğe kaydedin

Burada tartışılan çözümün en önemli yönlerinden biri, SageMaker ile güvenli entegrasyondur. SageMaker yönetilen bir hizmettir ve bu nedenle işlemleri sizin adınıza gerçekleştirir. SageMaker'ın ne yapmasına izin verildiği, bir SageMaker eğitim işiyle veya Studio'dan çalışan bir kullanıcı profiliyle ilişkilendirdiğiniz yürütme rolüne eklenen IAM politikaları tarafından tanımlanır. SageMaker yürütme rolü hakkında daha fazla bilgi için bkz. Adaçayı Yapıcı Rolleri.

IAM kimlik doğrulamasını kullanmak için API Ağ Geçidini yapılandırarak <MLFlow-Tracking-Server-URI>/api/* kaynaklar, SageMaker yürütme rolünde, SageMaker'ın belirtilen erişim düzeyine göre MLflow ile etkileşime girmesine izin verecek bir dizi IAM politikası tanımlayabiliriz.

ayarlarken MLFLOW_TRACKING_AWS_SIGV4 ortam değişkeni True Studio'da veya bir SageMaker eğitim işinde çalışırken, MLflow Python SDK, API Ağ Geçidi tarafından doğrulanacak olan tüm istekleri otomatik olarak imzalayacaktır:

os.environ['MLFLOW_TRACKING_AWS_SIGV4'] = "True"
mlflow.set_tracking_uri(tracking_uri)
mlflow.set_experiment(experiment_name)

SageMaker yürütme rolünü MLflow SDK ile test edin

Oluşturulan Studio etki alanına erişirseniz üç kullanıcı bulacaksınız:

  • mlflow-yönetici – Amazon Cognito grubu yöneticilerindeki kullanıcıyla benzer izinlere sahip bir yürütme rolüyle ilişkilendirilmiştir
  • mlflow-okuyucu – Amazon Cognito grup okuyucularındaki kullanıcıyla benzer izinlere sahip bir yürütme rolüyle ilişkilendirilmiştir.
  • mlflow-model-onaylayıcı – Amazon Cognito grup model onaylayıcılarındaki kullanıcıyla benzer izinlere sahip bir yürütme rolüyle ilişkilendirilmiştir

Üç farklı rolü test etmek için bkz. laboratuvarlar her kullanıcı profilinde bu örneğin bir parçası olarak sağlanmıştır.

Aşağıdaki diyagram, Studio kullanıcı profilleri ve MLflow ile SageMaker iş kimlik doğrulaması için iş akışını göstermektedir.

SageMaker MLflow'da oturum açıyor

Benzer şekilde, SageMaker işlerini SageMaker tarafından yönetilen altyapı üzerinde çalıştırırken ortam değişkenini ayarlarsanız MLFLOW_TRACKING_AWS_SIGV4 için Trueve işlere aktarılan SageMaker yürütme rolü, API Ağ Geçidine erişim için doğru IAM politikasına sahipse, kimlik bilgilerini kendiniz yönetmenize gerek kalmadan MLflow izleme sunucunuzla güvenli bir şekilde etkileşim kurabilirsiniz. SageMaker eğitim işlerini çalıştırırken ve bir tahmin edici sınıfı başlatırken, SageMaker'ın enjekte edeceği ortam değişkenlerini iletebilir ve aşağıdaki kodda gösterildiği gibi eğitim komut dosyasında kullanılabilir hale getirebilirsiniz:

environment={ "AWS_DEFAULT_REGION": region, "MLFLOW_EXPERIMENT_NAME": experiment_name, "MLFLOW_TRACKING_URI": tracking_uri, "MLFLOW_AMPLIFY_UI_URI": mlflow_amplify_ui, "MLFLOW_TRACKING_AWS_SIGV4": "true", "MLFLOW_USER": user
} estimator = SKLearn( entry_point='train.py', source_dir='source_dir', role=role, metric_definitions=metric_definitions, hyperparameters=hyperparameters, instance_count=1, instance_type='ml.m5.large', framework_version='1.0-1', base_job_name='mlflow', environment=environment
)

MLflow kullanıcı arabiriminden çalıştırmaları ve deneyleri görselleştirin

İlk dağıtım tamamlandıktan sonra, uyguladığımız izinleri test etmek için Amazon Cognito kullanıcı havuzunu her biri farklı bir gruba ait üç kullanıcıyla dolduralım. Bu scripti kullanabilirsiniz add_users_and_groups.py kullanıcı havuzunu tohumlamak için. Betiği çalıştırdıktan sonra, Amazon Cognito konsolundaki Amazon Cognito kullanıcı havuzunu kontrol ederseniz, oluşturulan üç kullanıcıyı görmelisiniz.

Cognito kullanıcıları

REST API Ağ Geçidi tarafında, Lambda yetkilendiricisi önce Amazon Cognito kullanıcı havuzu anahtarını kullanarak belirtecin imzasını doğrulayacak ve talepleri doğrulayacaktır. Ancak bundan sonra kullanıcının ait olduğu Amazon Cognito grubunu JWT belirtecindeki talepten çıkaracaktır (cognito:groups) ve programladığımız gruba bağlı olarak farklı izinler uygulayın.

Özel durumumuz için üç grubumuz var:

  • yöneticiler – Her şeyi görebilir ve düzenleyebilir
  • okuyucular – Sadece her şeyi görebilir
  • model onaylayanlar – Okuyucularla aynı, ayrıca modelleri kaydedebilir, sürümler oluşturabilir ve model sürümlerini bir sonraki aşamaya yükseltebilir

Gruba bağlı olarak, Lambda yetkilendiricisi farklı IAM politikaları üretecektir. Bu, yetkilendirmenin nasıl sağlanabileceğine dair sadece bir örnektir; bir Lambda yetkilendirici ile ihtiyacınız olan herhangi bir mantığı uygulayabilirsiniz. IAM politikasını çalışma zamanında Lambda işlevinin kendisinde oluşturmayı seçtik; ancak uygun IAM politikalarını önceden oluşturabilir, bunları Amazon DinamoDBve bunları çalışma zamanında kendi iş mantığınıza göre alın. Ancak, eylemlerin yalnızca bir alt kümesini kısıtlamak istiyorsanız, MLflow REST API tanımı.

Lambda yetkilendiricisinin kodunu şu adreste keşfedebilirsiniz: GitHub repo.

Çoklu hesapla ilgili hususlar

Veri bilimi iş akışları, deneyden üretime ilerlerken birden fazla aşamadan geçmelidir. Yaygın bir yaklaşım, AI/ML iş akışının farklı aşamalarına (deney, geliştirme ve üretim) ayrılmış ayrı hesapları içerir. Bununla birlikte, bazen modeller için merkezi bir havuz görevi gören özel bir hesaba sahip olmak istenebilir. Mimarimiz ve örneğimiz tek bir hesaba atıfta bulunsa da, bu son senaryoyu uygulamak için kolayca genişletilebilir. Rolleri değiştirmek için IAM yeteneği hesaplar arasında bile.

Aşağıdaki diyagram, yalıtılmış bir AWS hesabında merkezi depo olarak MLflow kullanan bir mimariyi göstermektedir.

MLflow sagemaker çoklu hesabı

Bu kullanım durumu için iki hesabımız var: biri MLflow sunucusu için, diğeri ise veri bilimi ekibi tarafından erişilebilen deneyler için. Veri bilimi hesabında çalışan bir SageMaker eğitim işinden hesaplar arası erişimi etkinleştirmek için aşağıdaki öğelere ihtiyacımız var:

  • MLflow hesabında farklı bir rol üstlenmeye izin veren bir IAM politikası eklenmiş veri bilimi AWS hesabında bir SageMaker yürütme rolü:
{ "Version": "2012-10-17", "Statement": { "Effect": "Allow", "Action": "sts:AssumeRole", "Resource": "<ARN-ROLE-IN-MLFLOW-ACCOUNT>" }
}
  • MLflow izleme sunucusuna erişim sağlayan ve veri bilimi hesabındaki SageMaker yürütme rolünün bunu üstlenmesini sağlayan, doğru IAM politikası eklenmiş olan MLflow hesabındaki bir IAM rolü:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "<ARN-SAGEMAKER-EXECUTION-ROLE-IN-DATASCIENCE-ACCOUNT>" }, "Action": "sts:AssumeRole" } ]
}

Veri bilimi hesabında çalışan eğitim betiği içinde, MLflow istemcisini başlatmadan önce bu örneği kullanabilirsiniz. MLflow hesabındaki rolü üstlenmeniz ve geçici kimlik bilgilerini ortam değişkenleri olarak saklamanız gerekir çünkü bu yeni kimlik bilgileri seti, MLflow istemcisinde başlatılan yeni bir Boto3 oturumu tarafından alınacaktır.

import boto3 # Session using the SageMaker Execution Role in the Data Science Account
session = boto3.Session()
sts = session.client("sts") response = sts.assume_role( RoleArn="<ARN-ROLE-IN-MLFLOW-ACCOUNT>", RoleSessionName="AssumedMLflowAdmin"
) credentials = response['Credentials']
os.environ['AWS_ACCESS_KEY_ID'] = credentials['AccessKeyId']
os.environ['AWS_SECRET_ACCESS_KEY'] = credentials['SecretAccessKey']
os.environ['AWS_SESSION_TOKEN'] = credentials['SessionToken'] # set remote mlflow server and initialize a new boto3 session in the context
# of the assumed role
mlflow.set_tracking_uri(tracking_uri)
experiment = mlflow.set_experiment(experiment_name)

Bu örnekte, RoleArn üstlenmek istediğiniz rolün ARN'sidir ve RoleSessionName varsayılan oturum için seçtiğiniz addır. bu sts.assume_role yöntemi, MLflow istemcisinin varsayılan rol için yeni bir istemci oluşturmak üzere kullanacağı geçici güvenlik kimlik bilgilerini döndürür. MLflow istemcisi daha sonra, varsayılan rol bağlamında API Gateway'e imzalı istekler gönderir.

MLflow'u SageMaker Studio'da işleyin

SageMaker Studio, JupyterLab tabanlıdır ve tıpkı JupyterLab'da olduğu gibi üretkenliğinizi artırmak için uzantılar yükleyebilirsiniz. Bu esneklik sayesinde, MLflow ve SageMaker ile çalışan veri bilimcileri, Studio ortamından MLflow kullanıcı arayüzüne erişerek ve kaydedilen deneyleri ve çalıştırmaları anında görselleştirerek entegrasyonlarını daha da geliştirebilirler. Aşağıdaki ekran görüntüsü, Studio'da işlenen bir MLflow örneğini göstermektedir.

Studio'da MLflow Iframe

JupyterLab uzantılarını Studio'ya yükleme hakkında bilgi için bkz. Amazon SageMaker Studio ve SageMaker Notebook Instance, geliştirici üretkenliğini artırmak için artık JupyterLab 3 dizüstü bilgisayarlarla birlikte geliyor. Yaşam döngüsü yapılandırmaları yoluyla otomasyon eklemeyle ilgili ayrıntılar için, bkz. Amazon SageMaker Studio'yu Yaşam Döngüsü Yapılandırmalarını kullanarak özelleştirin.

Bu gönderiyi destekleyen örnek depoda, talimatlar nasıl kurulacağı hakkında jupyterlab-iframe eklenti. Uzantı yüklendikten sonra, Amazon Cognito kullanıcı havuzunda sakladığınız aynı kimlik bilgilerini kullanarak Studio'dan ayrılmadan MLflow kullanıcı arayüzüne erişebilirsiniz.

Sonraki adımlar

Bu çalışmayı genişletmek için birkaç seçenek var. Fikirlerden biri, hem SageMaker Studio hem de MLflow kullanıcı arayüzü için kimlik deposunu birleştirmek. Başka bir seçenek de, Amazon Cognito ile bir üçüncü taraf kimlik birleştirme hizmeti kullanmak ve ardından AWS IAM Kimlik Merkezi (AWS Single Sign-On'un halefi) aynı üçüncü taraf kimliğini kullanarak Studio'ya erişim izni vermek için. Bir diğeri, kullanarak tam otomasyonu tanıtmaktır. Amazon SageMaker Ardışık Düzenleri model oluşturmanın CI/CD kısmı için ve MLflow'u merkezi bir deney izleme sunucusu ve güçlü yönetişim yeteneklerine sahip model kaydı olarak kullanmanın yanı sıra onaylanmış modelleri bir SageMaker barındırma uç noktasına otomatik olarak dağıtmak için otomasyon.

Sonuç

Bu gönderinin amacı, MLflow için kurumsal düzeyde erişim denetimi sağlamaktı. Bunu sağlamak için kimlik doğrulama ve yetkilendirme süreçlerini MLflow sunucusundan ayırdık ve API Gateway'e aktardık. Hem MLflow Python SDK hem de MLflow kullanıcı arabiriminin gereksinimlerini karşılamak için API Gateway, IAM yetkilendiricileri ve Lambda yetkilendiricileri tarafından sunulan iki yetkilendirme yöntemini kullandık. Kullanıcıların MLflow'un dışında olduğunu anlamak önemlidir, bu nedenle tutarlı bir yönetişim, özellikle çok ayrıntılı izinler söz konusu olduğunda IAM politikalarının sürdürülmesini gerektirir. Son olarak, basit uzantılar aracılığıyla MLflow'u Studio'ya entegre ederek veri bilimcilerin deneyimini nasıl geliştirebileceğimizi gösterdik.

adresine erişerek çözümü kendi başınıza deneyin. GitHub repo ve yorumlarda herhangi bir sorunuz varsa bize bildirin!

Ek kaynaklar

SageMaker ve MLflow hakkında daha fazla bilgi için aşağıdakilere bakın:


Yazarlar Hakkında

Paolo Di Francesco Amazon Web Services'ta (AWS) Kıdemli Çözüm Mimarıdır. Telekomünikasyon Mühendisliği alanında doktora derecesine sahiptir ve yazılım mühendisliği deneyimine sahiptir. Makine öğrenimi konusunda tutkulu ve şu anda deneyimlerini müşterilerin AWS'deki hedeflerine, özellikle de MLOps hakkındaki tartışmalara ulaşmalarına yardımcı olmak için kullanmaya odaklanıyor. İş dışında futbol oynamaktan ve kitap okumaktan hoşlanıyor.

Chris Fregly San Francisco, California merkezli Amazon Web Services'te (AWS) yapay zeka ve makine öğrenimi için Baş Uzman Çözüm Mimarıdır. O'Reilly Kitabı, “AWS'de Veri Bilimi”nin ortak yazarıdır. Chris aynı zamanda Apache Spark, TensorFlow, Ray ve KubeFlow'a odaklanan birçok küresel buluşmanın da kurucusudur. O'Reilly AI, Açık Veri Bilimi Konferansı ve Büyük Veri İspanya dahil olmak üzere dünyanın dört bir yanındaki yapay zeka ve makine öğrenimi konferanslarında düzenli olarak konuşuyor.

İrşad Buchh Amazon Web Services'ta (AWS) Baş Çözüm Mimarıdır. Irshad, büyük AWS Global ISV ve SI iş ortaklarıyla çalışır ve bulut stratejilerini oluşturmalarına ve Amazon'un bulut bilgi işlem platformunu geniş çapta benimsemelerine yardımcı olur. Irshad, CIO'lar, CTO'lar ve Mimarları ile etkileşime girer ve onların ve son müşterilerinin bulut vizyonlarını uygulamalarına yardımcı olur. Irshad, belirli uygulama projeleri etrafında stratejik ve teknik taahhütlerin ve nihai başarının sahibidir ve Amazon Web Hizmetleri teknolojilerinde derin bir uzmanlığın yanı sıra uygulamaların ve hizmetlerin Amazon Web Hizmetleri platformu kullanılarak nasıl yapılandırıldığına dair geniş bilgi birikimi geliştirir.

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?