Почему принятие ролей должно выполняться внутри лямбды?
Вот почему сервис AWS Lambda был разработан таким образом.
Согласно документации о том, как настроить функцию Lambda для принятия роли из другой учетной записи AWS?, чтобы получить доступ к ресурсу из другой учетной записи, функция Lambda должна вызватьassume_role
метод для получения временных учетных данных. У меня вопрос, почему это нельзя сделать вне лямбды. Например, мы могли бы просто привязать RoleB из AccountB к RoleA (роль выполнения лямбда-функции).
Преимущество переноса логики за пределы очевидно - лямбда более портативна.
import boto3
def lambda_handler(context, event):
sts_connection = boto3.client('sts')
acct_b = sts_connection.assume_role(
RoleArn="arn:aws:iam::222222222222:role/role-on-source-account",
RoleSessionName="cross_acct_lambda"
)
ACCESS_KEY = acct_b['Credentials']['AccessKeyId']
SECRET_KEY = acct_b['Credentials']['SecretAccessKey']
SESSION_TOKEN = acct_b['Credentials']['SessionToken']
# create service client using the assumed role credentials, e.g. S3
client = boto3.client(
's3',
aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY,
aws_session_token=SESSION_TOKEN,
)
return "Hello from Lambda"
После удаления логики приведенный выше код можно упростить следующим образом:
import boto3
def lambda_handler(context, event):
# create service client e.g. S3
client = boto3.client(
's3'
)
return "Hello from Lambda"