¿Cómo puede usarse AWS API Gateway para rotar rápidamente las credenciales de esta manera?

0

Leer a través de este artículo , llegué a un pequeño muro de entendimiento. El autor declara:

  

Esto se debe a que mi computadora portátil no tiene el arma secreta. Una vez que llegue   esto en funcionamiento en una instancia de EC2, estos de seguridad temporal   Las credenciales se recuperarán automáticamente de la instancia.   metadatos Si el concepto de credenciales temporales es nuevo para usted,   Aquí hay un extracto de la documentación (énfasis mío)

No entiendo lo que quiere decir con estas credenciales de seguridad temporales se recuperarán automáticamente de los metadatos de la instancia. El argumento es que se están enviando credenciales temporales para autenticar el acceso de la aplicación a un determinado secreto. Muestra un script de demostración que no envía ninguna credencial, por lo que no entiendo cómo la aplicación de demostración se autentica realmente en la puerta de enlace API en este modelo.

import re
import urlparse

# To install the required packages run: 
# pip install requests boto3 aws-requests-auth
import requests
from aws_requests_auth.aws_auth import AWSRequestsAuth
from aws_requests_auth import boto_utils


# We got this URL from our provisioned stack's output. This should be passed as a configuration variable, 
# but since there's no secrets in there, you could hard-code this
GITHUB_PROXY_URL = 'https://w974f1rs6e.execute-api.us-east-1.amazonaws.com/dev/repos/PokaInc/test-github-api/issues'


def get_aws_auth(url):
    # These next variables are needed for the signing process
    api_gateway_netloc = urlparse.urlparse(url).netloc
    api_gateway_region = re.match(
        r"[a-z0-9]+\.execute-api\.(.+)\.amazonaws\.com",
        api_gateway_netloc
    ).group(1)

    return AWSRequestsAuth(
        aws_host=api_gateway_netloc,
        aws_region=api_gateway_region,
        aws_service='execute-api',
        # This is how we query the temporary credentials of the EC2 instance, as simple as that
        **boto_utils.get_credentials()
    )


list_issues_response = requests.get(
    url=GITHUB_PROXY_URL,
    auth=get_aws_auth(GITHUB_PROXY_URL)
)

print list_issues_response.json()

Como se muestra en la secuencia de comandos, no hay otra autenticación que la secuencia de comandos que consulta una URL de proxy.

    
pregunta the_endian 09.10.2018 - 01:07
fuente

1 respuesta

0

boto_utils.get_credentials () está agregando aws_access_key , aws_secret_access_key y aws_token a AWSRequestsAuth() por el uso del operador estrella ** kwargs .

Por lo tanto, las credenciales se envían mediante la llamada a la biblioteca boto_utils, que las extrae automáticamente de la función de metadatos / IAM de la instancia.

    
respondido por el Jeff Ferland 11.10.2018 - 19:30
fuente

Lea otras preguntas en las etiquetas