簡體   English   中英

從 lambda 函數中訪問 AWS API?

[英]Accessing AWS APIs from within a lambda function?

我正在編寫我的第一個 lambda 函數(在 Python 中),我對憑據在 lambda 環境中應該如何工作感到有些困惑。 我正在嘗試從 aws secrets api 中檢索一個秘密(用於 Aurora 數據庫訪問),使用他們的示例代碼,看起來像這樣(為了簡潔,我已經刪除了所有錯誤處理):

def get_secret():
    secret_name = 'dbtest-postgres-secret'
    region_name = 'us-east-2'

    session = boto3.session.Session()                                                                                                                                                          
    client = session.client(                                                                                                                                                                   
        service_name='secretsmanager',                                                                                                                                                         
        region_name=region_name                                                                                                                                                                
    )                                                                                                                                                                                          

    get_secret_value_response = client.get_secret_value(                                                                                                                                   
        SecretId=secret_name                                                                                                                                                               
    )                                                                                                                                                                                      

    secret = get_secret_value_response['SecretString']

    return secret

這在我擁有普通 AWS 憑證的環境中在本地運行良好,但在作為 lambda 函數的一部分運行時返回 None 而不會引發任何錯誤。 我是這樣使用它的:

def handler(event, context):
    secret = get_secret()
    assert secret is not None

它在該assert聲明中失敗了:

{
  "errorType": "AssertionError",
  "stackTrace": [
    "  File \"/var/task/dbtest.py\", line nn, in handler\n    assert secret is not None\n"
  ]
}

我假設通過將角色分配給具有適當權限( AmazonRDSDataFullAccess ,包括訪問機密管理器的權限)的 lambda 函數,所有內容都將被設置。 我是否需要向 lambda 函數提供顯式憑據(例如,訪問密鑰和機密)?

您不需要提供明確的憑據,lambda 將從您分配給它的角色中獲取憑據。 您要求的秘密是什么,因為AmazonRDSDataFullAccess只能訪問rds-db-credentials/*秘密。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM