2016-03-25 37 views
7

Ben ancak bağlanmak için kimlik bilgilerini gömmüştür Python ile yazılmış AWS lambda fonksiyonu bir (son derece basit ama mükemmel çalışıyor) var.AWS Lambda işlevinde harici kimlik bilgileri nasıl kullanılır (gerektiği gibi)? 1) harici bir web hizmeti 2) DynamoDB tablo:

İşlev oldukça basittir: bir hizmete karşı bir giriş (POST # 1 ile) ve sonra da yanıt durumunun bir bölümünü bir DynamoDB tablosuna kaydeder (AWS kimlik bilgileri # 2 ile).

Bunlar

fonksiyonunun ilgili kısımları şunlardır:

h = httplib2.Http() 
auth = base64.encodestring('myuser' + ':' + 'mysecretpassword') 
(response, content) = h.request('https://vca.vmware.com/api/iam/login', 'POST', headers = {'Authorization':'Basic ' + auth,'Accept':'application/xml;version=5.7'}) 

ve sonra

conn = boto.connect_dynamodb(aws_access_key_id='FAKEhhahahah',aws_secret_access_key='FAKEdhdhdudjjdjdjhdjjhdjdjjd') 

Eğer işlevi içinde bu kimlik bilgilerini içeren DEĞİL tarafından kod temizleme konuda nasıl gitmek?

Bilginize Bu işlev her 5 dakikada yayınlanmasının planlandığı (tetikleyen başka hiçbir dış olay yoktur).

cevap

8

: Ayrıca bir göz atın IAM Rolü oluşturun:

  • Yok AWS AWS ile
  • creds

    1. AWS creds basit şeyi creds , dinamitlere izin ver ve gitmene izin ver. olmayan AWS ile

      en güvenli yaklaşım olacağını creds:

      1. şifreleme kimlik bilgileri kms servisini kullanarak ayarlıyoruz. (kms.encrypt('foo'))
      2. Bilgilerinizin şifrelenmiş bir sürümünü girdikten sonra. İstediğiniz yerde depolamaktan çekinmeyin. Basit bir şekilde lambda zor bir kod olurdu.
      3. Adım 1'de kullandığınız km anahtarını kullanarak bilgilerin şifresini çözmek için lambda IAM Rolüne izin ekleyin.
      4. Daha sonra, her seferinde lambda çağrılır, bilgileri şifresini çözmek için kms'yi aramasına izin verilir.
    +0

    Teşekkürler. Bu gerçekten doğru yaklaşım gibi görünüyor.DynamoDB'ye erişmek için lambda işlevine uygun bir IAM rolü atamak düşündüğüm bir şeydi. Problemin "AWS kredisi yok" kısmı, anlayamadığım kısımdı. Teşekkürler. – mreferre

    4

    en temiz yolu LambdaExec role DynamoDB ayrıcalıkları vermektir.

    conn = boto.connect_dynamodb() 
    

    Veya kimin creds bağlanmak boto sağladığımız kullanıcıya bağlı IAM politikaları kontrol: Sizin boto bağlamak olur. Bu listeden ilkeleri seçin ve seçin ve bu ayrıcalıkları LambdaExec rolüne verin. Eğer 2 kimlik bilgileri türleri vardır sizin örnekte Easy Authorization of AWS Lambda Functions

    +0

    Bu dynamoDB erişim kimlik temizlemek için doğru cevaptır. Harici web hizmeti için bu kimlik bilgilerini S3 veya DynamoDB gibi bir yerde saklamanız gerekir. –

    +0

    Tüm AWS kimlik bilgileri için Lambda işlevinizle ilişkili IAM rollerini kesinlikle kullanın. Harici servisler için şifreler gibi çalışma zamanında gereken diğer sırlar için KMS'yi kullanmanızı tavsiye ederim. KMS'deki verileri modül düzeyinde deşifre edebilirsiniz, böylelikle sadece fiyatın başlangıç ​​aşamasında (veya fonksiyonunuz soğuktan - sıcak olduğunda) ödeme yaparsınız. – garnaat