Zephyrnet-logo

Beveiligde door Amazon SageMaker Studio vooraf ondertekende URL's Deel 2: Private API met JWT-authenticatie

Datum:

In deel 1 van deze serie hebben we laten zien hoe u een Amazon SageMaker Studio vooraf ondertekende URL van een bedrijfsnetwerk met behulp van privé VPC-eindpunten van Amazon zonder het internet te doorkruisen. In dit bericht zullen we voortbouwen op de vorige oplossing om te demonstreren hoe u een privé-API-gateway kunt bouwen via Amazon API-gateway als een proxy-interface om te genereren en te openen Amazon Sage Maker vooraf ingestelde URL's. Bovendien voegen we een extra vangrail toe om ervoor te zorgen dat vooraf ondertekende URL's alleen worden gegenereerd en geopend voor de geverifieerde eindgebruiker binnen het bedrijfsnetwerk.

Overzicht oplossingen

Het volgende diagram illustreert de architectuur van de oplossing.

Het proces omvat de volgende stappen:

  1. In het Amazon Cognito gebruikerspool, stelt u eerst een gebruiker in met de naam die overeenkomt met hun Studio-gebruikersprofiel en registreert u Studio als de app-client in de gebruikerspool.
  2. De gebruiker federatief vanuit zijn huisstijlprovider (IdP) en authenticeert zich bij de Amazon Cognito-gebruikerspool voor toegang tot Studio.
  3. Amazon Cognito retourneert een token aan de gebruiker die de toegang tot de Studio-applicatie autoriseert.
  4. De gebruiker roept createStudioPresignedUrl API op API Gateway samen met een token in de header.
  5. API Gateway roept een custom AWS Lambda autorizer en valideert het token.
  6. Wanneer het token geldig is, retourneert Amazon Cognito een toegangsverleningsbeleid met studio-gebruikersprofiel-ID aan API Gateway.
  7. API Gateway roept de createStudioPresignedUrl Lambda-functie voor het maken van de door de studio voorgetekende url.
  8. De createStudioPresignedUrl functie maakt een vooraf ondertekende URL met behulp van het SageMaker API VPC-eindpunt en keert terug naar de beller.
  9. De gebruiker heeft toegang tot de vooraf ondertekende URL van zijn bedrijfsnetwerk die wordt omgezet via het Studio VPC-eindpunt.
  10. De functies AWS Identiteits- en toegangsbeheer (IAM)-beleid zorgt ervoor dat de vooraf ondertekende URL-creatie en toegang worden uitgevoerd via VPC-eindpunten.

De volgende secties leiden u door de implementatie, configuratie en validatie van de oplossing voor de API Gateway private API voor het maken en oplossen van een door Studio ondertekende URL van een bedrijfsnetwerk met behulp van VPC-eindpunten.

  1. Implementeer de oplossing
  2. Configureer de Amazon Cognito-gebruiker
  3. De privé-API voor de vooraf ondertekende URL verifiëren met behulp van een JSON-webtoken
  4. Configureer de zakelijke DNS-server voor toegang tot de privé-API
  5. Test de API Gateway private API voor een vooraf ondertekende URL van het bedrijfsnetwerk
  6. Vooraf ondertekende URL Lambda Auth-beleid
  7. Opruimen

Implementeer de oplossing

U kunt de oplossing implementeren via de: AWS-beheerconsole of de AWS serverloos toepassingsmodel (AWS-SAM).

Om de oplossing via de console te implementeren, start u het volgende: AWS CloudFormatie sjabloon in uw account door te kiezen voor Start Stack. Het duurt ongeveer 10 minuten voordat de CloudFormation-stack is voltooid.

Om de oplossing te implementeren met AWS SAM, kunt u de nieuwste code vinden in de aws-samples GitHub-repository, waar u ook kunt bijdragen aan de voorbeeldcode. De volgende opdrachten laten zien hoe u de oplossing implementeert met behulp van de AWS SAM CLI. Indien momenteel niet geïnstalleerd, installeer de AWS SAM CLI.

  1. Kloon de repository op https://github.com/aws-samples/secure-sagemaker-studio-presigned-url.
  2. Nadat u de repo hebt gekloond, navigeert u naar de bron en voert u de volgende code uit:
    sam deploy –guided

Configureer de Amazon Cognito-gebruiker

Voer de volgende stappen uit om uw Amazon Cognito-gebruiker te configureren:

  1. Maak een Amazon Cognito-gebruiker met dezelfde naam als een SageMaker-gebruikersprofiel:
    aws cognito-idp admin-create-user --user-pool-id <user_pool_id> --username <sagemaker_username>

  2. Stel het gebruikerswachtwoord in:
    aws cognito-idp admin-set-user-password --user-pool-id <user_pool_id> --username <sagemaker_username> --password <password> --permanent

  3. Een toegangstoken verkrijgen:
    aws cognito-idp initiate-auth --auth-flow USER_PASSWORD_AUTH --client-id <cognito_app_client_id> --auth-parameters USERNAME=<sagemaker_username>,PASSWORD=<password>

De privé-API voor de vooraf ondertekende URL verifiëren met behulp van een JSON-webtoken

Toen u een privé-API implementeerde voor het maken van een vooraf ondertekende URL van SageMaker, voegde u een vangrail toe om de toegang tot de vooraf ondertekende URL te beperken voor iedereen buiten het bedrijfsnetwerk en het VPC-eindpunt. Zonder een ander besturingselement voor de privé-API binnen het bedrijfsnetwerk te implementeren, zou elke interne gebruiker binnen het bedrijfsnetwerk echter niet-geverifieerde parameters voor het SageMaker-gebruikersprofiel kunnen doorgeven en toegang krijgen tot elke SageMaker-app.

Om dit probleem te verhelpen, stellen we voor om een ​​JSON Web Token (JWT) voor de geverifieerde aanroeper door te geven aan de API Gateway en dat token te valideren met een JWT-autorizer. Er zijn meerdere opties voor het implementeren van een autorizer voor de privé-API-gateway, met behulp van een aangepaste Lambda-autorisatie or Amazon Cognito.

Met een aangepaste Lambda-autorizer kunt u een SageMaker-gebruikersprofielnaam insluiten in het geretourneerde beleid. Dit voorkomt dat gebruikers binnen het bedrijfsnetwerk een SageMaker-gebruikersprofielnaam kunnen verzenden voor het maken van een vooraf ondertekende URL die ze niet mogen maken. We gebruiken Amazon Cognito om onze tokens te genereren en een aangepaste Lambda-autorizer om het juiste beleid te valideren en terug te sturen. Voor meer informatie, zie: Gedetailleerde autorisatie opbouwen met Amazon Cognito, API Gateway en IAM. De Lambda-autorizer gebruikt de Amazon Cognito-gebruikersnaam als de gebruikersprofielnaam.

Als u Amazon Cognito niet kunt gebruiken, kunt u een aangepaste toepassing ontwikkelen om tokens van eindgebruikers te verifiëren en door te geven aan de Lambda-autorizer. Voor meer informatie, zie: API Gateway Lambda-autorisatoren gebruiken.

Configureer de zakelijke DNS-server voor toegang tot de privé-API

Voer de volgende stappen uit om uw bedrijfs-DNS-server te configureren:

  1. Op de Amazon Elastic Compute-cloud (Amazon EC2) console, kies uw lokale DNSA EC2-instantie en maak verbinding via Systeembeheerder Sessiebeheerder.
  2. Voeg een zonerecord toe in de /etc/named.conf bestand voor het omzetten naar de DNS-naam van de API Gateway via uw Amazon Route 53 inkomende resolver, zoals weergegeven in de volgende code:
    zone "zxgua515ef.execute-api.<region>.amazonaws.com" {
      type forward;
      forward only;
      forwarders { 10.16.43.122; 10.16.102.163; };
    };

  3. Start de benoemde service opnieuw met de volgende opdracht:
    sudo service named restart

Valideren van het aanvragen van een vooraf ondertekende URL van de API Gateway private API voor geautoriseerde gebruikers

In een realistisch scenario zou u een front-end-interface implementeren die de juiste autorisatieheaders voor geverifieerde en geautoriseerde bronnen zou doorgeven met behulp van een aangepaste oplossing of hefboomwerking AWS versterken. Voor de beknoptheid van deze blogpost, maken de volgende stappen gebruik van Postman om de door ons geïmplementeerde oplossing snel te valideren en beperkt het aanvragen van de vooraf ondertekende URL voor een interne gebruiker, tenzij daartoe geautoriseerd.

Voer de volgende stappen uit om de oplossing met Postman te valideren:

  1. Installeer Postman op de WINAPP EC2-instantie. Zie instructies hier
  2. Open Postman en voeg het toegangstoken toe aan uw Authorization koptekst:
    Authorization: Bearer <access token>

  3. Wijzig de API Gateway-URL om deze te openen vanuit uw interne EC2-instantie:
    1. Voeg het VPC-eindpunt toe aan uw API Gateway-URL:
      https://<API-G-ID>-<VPCE-ID>.execute-api.<region>.amazonaws.com/dev/EMPLOYEE_ID

    2. Voeg de Host header met een waarde van uw API Gateway-URL:
      <API-G-ID>.execute-api.<region>.amazonaws.com

    3. Verander eerst de EMPLOYEE_ID naar uw Amazon Cognito-gebruiker en SageMaker-gebruikersprofielnaam. Zorg ervoor dat u een geautoriseerde, vooraf ondertekende URL ontvangt.
    4. Wijzig vervolgens de EMPLOYEE_ID aan een gebruiker die niet van u is en zorg ervoor dat u een toegangsfout krijgt.
  4. Kies op de Amazon EC2-console uw on-premises WINAPP-instantie en maak verbinding via uw RDP-client.
  5. Open een Chrome-browser en navigeer naar uw geautoriseerde vooraf ondertekende URL om Studio te starten.

Studio wordt gestart via een VPC-eindpunt met een extern adres als het Studio VPC-eindpunt-IP.

Als de vooraf ondertekende URL buiten het bedrijfsnetwerk wordt gebruikt, mislukt de oplossing omdat de IAM-beleidsvoorwaarde voor de vooraf ondertekende URL het maken en openen van een VPC-eindpunt afdwingt.

Vooraf ondertekende URL Lambda Auth-beleid

Bovenstaande oplossing creëerde het volgende authenticatiebeleid voor de Lambda die een vooraf ondertekende URL genereerde voor toegang tot SageMaker Studio.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Condition": {
                "IpAddress": {
                    "aws:VpcSourceIp": "10.16.0.0/16"
                }
            },
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/*/*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "IpAddress": {
                    "aws:SourceIp": "192.168.10.0/24"
                }
            },
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/*/*",
            "Effect": "Allow"
        },
        {
            "Condition": {
                "StringEquals": {
                    "aws:sourceVpce": [
                        "vpce-sm-api-xx",
                        "vpce-sm-api-yy"
                    ]
                }
            },
            "Action": "sagemaker:CreatePresignedDomainUrl",
            "Resource": "arn:aws:sagemaker:<region>:<account-id>:user-profile/*/*",
            "Effect": "Allow"
        }
    ]
}

Het bovenstaande beleid zorgt ervoor dat de vooraf ondertekende Studio-URL zowel wordt gegenereerd als toegankelijk via een van deze drie toegangspunten:

  1. aws:VpcSourceIp als uw AWS VPC CIDR
  2. aws:Bron als uw bedrijfsnetwerk CIDR
  3. aws:sourceVpce als uw SageMaker API VPC-eindpunten

Opruimen

Om lopende kosten te voorkomen, verwijder de CloudFormation-stacks jij hebt gemaakt. Als alternatief, als u de oplossing hebt geïmplementeerd met SAM, moet u zich verifiëren bij het AWS-account waarop de oplossing is geïmplementeerd en uitgevoerd sam verwijderen.

Conclusie

In dit bericht hebben we laten zien hoe u toegang krijgt tot Studio met behulp van een privé-API-gateway vanaf een bedrijfsnetwerk met behulp van privé-VPC-eindpunten van Amazon, waardoor toegang tot vooraf ondertekende URL's buiten het bedrijfsnetwerk wordt voorkomen en hoe de API-gateway wordt beveiligd met een JWT-autorizer met behulp van Amazon Cognito en aangepaste Lambda gemachtigden.

Probeer deze oplossing uit en experimenteer met de integratie ervan met uw corporate portal, en laat uw feedback achter in de comments!


Over de auteurs

Ram Vital is een machine learning-oplossingenarchitect bij AWS. Hij heeft meer dan 20 jaar ervaring met het ontwerpen en bouwen van gedistribueerde, hybride en cloudapplicaties. Hij heeft een passie voor het bouwen van veilige en schaalbare AI/ML- en Big Data-oplossingen om zakelijke klanten te helpen bij hun cloudadoptie en optimalisatietraject om hun bedrijfsresultaten te verbeteren. In zijn vrije tijd houdt hij van tennis, fotografie en actiefilms.

Jonathan Nguyen is een Shared Delivery Team Senior Security Consultant bij AWS. Zijn achtergrond is in AWS Security met een focus op Threat Detection en Incident Response. Tegenwoordig helpt hij zakelijke klanten bij het ontwikkelen van een uitgebreide AWS-beveiligingsstrategie, het op grote schaal implementeren van beveiligingsoplossingen en het trainen van klanten in best practices voor AWS-beveiliging.

Chris Childers is een Cloud Infrastructure Architect in Professional Services bij AWS. Hij werkt samen met AWS-klanten om hun cloudinfrastructuur te ontwerpen en te automatiseren en hun acceptatie van DevOps-cultuur en -processen te verbeteren.

spot_img

Laatste intelligentie

spot_img