Доступ к AWS API из лямбда-функции? - PullRequest
1 голос
/ 05 февраля 2020

Я пишу свою первую лямбда-функцию (в Python), и меня немного смущает, как учетные данные должны работать в лямбда-среде. Я пытаюсь получить секрет (для доступа к базе данных Aurora) из API aws секретов, используя их пример кода, который выглядит примерно так (для краткости я удалил всю обработку ошибок):

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 учетные данные, но возвращает 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, который включает разрешения на доступ к диспетчеру секретов), что все будет установлено. Нужно ли предоставлять явные учетные данные (например, ключ доступа и секрет) для лямбда-функции?

1 Ответ

3 голосов
/ 05 февраля 2020

Вам не нужно давать явные учетные данные, лямбда получит учетные данные из роли, которую вы ей присвоили. Какой секрет вы запрашиваете, потому что AmazonRDSDataFullAccess имеет доступ только к секретам на rds-db-credentials/*.

...