Outils pour utilisateurs

Outils du site


cloud:aws:toc

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
cloud:aws:toc [2020/04/29 22:56] – créée sgariepycloud:aws:toc [2022/12/10 14:46] (Version actuelle) – [Ressources] sgariepy
Ligne 1: Ligne 1:
 ====== AWS ====== ====== AWS ======
  
-  * [[Cognito]]+AWS est le service cloud d'Amazon. 
 + 
 +====== CLI ====== 
 + 
 +Pour configurer un compte avec un access key et secret: 
 + 
 +  $ aws configure 
 + 
 +===== Variables d'environnement ===== 
 + 
 +<code> 
 +$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE 
 +$ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY 
 +$ export AWS_DEFAULT_REGION=us-west-2 
 +</code> 
 + 
 +Dans le cas d'utilisation d'un session token, on peut ajouter: 
 + 
 +<code> 
 +AWS_SESSION_TOKEN 
 +</code> 
 + 
 +===== Utiliser un rôle qui requiert un MFA ===== 
 + 
 + 
 +Dans le fichier ''~/.aws/credentials'', ajouter par exemple les credentials nécessaires: 
 + 
 +<code> 
 +[aws_account_name_or_username] 
 +aws_access_key_id = AKIAQ75CXLP2PEXAMPLE 
 +aws_secret_access_key = wxVqab73fiHctn3py4/C09tRGQQHq+DFalS3/K3y                                
 +</code> 
 + 
 +Après dans le fichier ''~/.aws/config'' ajouter un profil: 
 + 
 +<code> 
 +[profile nom_du_profil] 
 +output = json 
 +region = us-east-1 
 +role_arn = arn:aws:iam::976567865786:role/super_duper_power_users 
 +source_profile = aws_account_name 
 +mfa_serial=arn:aws:iam::987653456789:mfa/myusername 
 +</code> 
 +La valeur de ''source_profile'' fait référence au nom de la section dans le fichier ''credential'', dans l'exemple plus haut c'est ''aws_account_name_or_username'' (qui est lui-même un exemple bidon). 
 + 
 + 
 + 
 +Outils qui peuvent aider à gérer ça: 
 + 
 +  * [[https://github.com/rik2803/aws-sts-assumerole|assumerole]] 
 + 
 +Exemple: 
 + 
 +  $  aws sts assume-role --role-arn arn:aws:iam::XXXXXXXXXXXX:role/org-super_users --role-session-name "RoleSessionName1" --profile org-super_users --output json > assume-role-output.txt 
 + 
 +Source: [[https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-role.html|Using an IAM role in the AWS CLI]] 
 + 
 +===== Sortie au stdout ===== 
 + 
 +Les sorties de commandes peuvent se faire dans nano, ce qui n'est pas idéal pour copier les informations.  L'option ''cli_pager='' (avec aucune valeur) dans le ''~/.aws/config'' ''[default]'' ne semble pas fonctionner, comme la [[https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-output.html|documentation le suggère]]. 
 + 
 +Plutôt faire avec un export: 
 + 
 + 
 +  $ export AWS_PAGER= 
 + 
 + 
 + 
 + 
 +====== IAM ====== 
 + 
 +Créer un rôle IAM: 
 + 
 + 
 +<code> 
 +aws iam create-role --role-name SomeRoleName --assume-role-policy-document file://./subdir/some-file.json 
 +</code> 
 + 
 + 
 +Attach to policy: 
 + 
 +<code> 
 +aws iam attach-role-policy --role-name SomeRoleName --policy-arn arn:aws:iam::aws:policy/GameLiftGameServerGroupPolicy 
 +</code> 
 + 
 +====== Cognito ====== 
 + 
 +===== Login par requêtes directes ===== 
 + 
 +Les requêtes ci-dessous sont effectuées avec **REST Client**, extension de VS Code. 
 + 
 +Prérequis: 
 + 
 +  * L'application dans le User Pool n'a pas de Client Secret de configuré 
 +  * L'utilisateur existe dans le user pool.  Il peut y avoir un mot de passe initial avec le statut //Force change password//
 + 
 +Pour effectuer des tests, par exemple pour obtenir un JWT d'identification, il faut appeler le service IDP de Cognito avec un initAuth: 
 + 
 +<code> 
 +POST https://cognito-idp.us-east-1.amazonaws.com/ 
 +Content-Type: application/x-amz-json-1.1 
 +X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth 
 + 
 +
 +    "AuthParameters" : { 
 +        "USERNAME" : "test@domain", 
 +        "PASSWORD" : "initialPassword" 
 +    }, 
 +    "AuthFlow" : "USER_PASSWORD_AUTH", 
 +    "ClientId" : "{{cognitoClientId}}" 
 +
 +</code> 
 + 
 +Si la réponse retourne un challenge ''NEW_PASSWORD_REQUIRED'', il faut envoyer une requête ''RespondToAuthChallenge'': 
 + 
 +<code> 
 +POST https://cognito-idp.us-east-1.amazonaws.com/ 
 +Content-Type: application/x-amz-json-1.1 
 +X-Amz-Target: AWSCognitoIdentityProviderService.RespondToAuthChallenge 
 + 
 +
 +    "ChallengeName": "NEW_PASSWORD_REQUIRED", 
 +    "ChallengeResponses":
 +      "USERNAME" : "test@domain", 
 +      "NEW_PASSWORD" : "newPassword" 
 +    }, 
 +    "ClientId": "{{cognitoClientId}}", 
 +    "Session": "{{initAuth.response.body.Session}}" 
 +
 +</code> 
 + 
 +La réponse au challenge retourne le id token si ça a bien fonctionné. 
 + 
 + 
 +Obtenir un id token avec un refresh token: 
 + 
 +<code> 
 +POST https://cognito-idp.us-east-1.amazonaws.com/ 
 +Content-Type: application/x-amz-json-1.1 
 +X-Amz-Target: AWSCognitoIdentityProviderService.InitiateAuth 
 + 
 +
 +    "AuthParameters" : { 
 +        "REFRESH_TOKEN" : "{{normalAuth.response.body.AuthenticationResult.RefreshToken}}" 
 +    }, 
 +    "AuthFlow" : "REFRESH_TOKEN_AUTH", 
 +    "ClientId" : "{{cognitoClientId}}" 
 +
 +</code>  
 + 
 + 
 + 
 +===== Ressources ===== 
 + 
 + 
 +  * [[https://www.npmjs.com/package/amazon-cognito-identity-js|Amazon Cognito Identity SDK for JavaScript]] (package npm) 
 +  * [[https://docs.aws.amazon.com/cognito/latest/developerguide/amazon-cognito-user-pools-using-tokens-verifying-a-jwt.html|Verifying a JSON Web Token]] 
 +  * [[https://github.com/amazon-archives/amazon-cognito-identity-js|amazon-archives/amazon-cognito-identity-js]] (repo GitHub archivé) 
 +  * [[https://adayinthelifeof.nl/2020/05/20/aws.html|Description des services en une phrase]] 
 + 
 +====== GameLift ====== 
 + 
 +Référence générale du [[https://docs.aws.amazon.com/cli/latest/reference/gamelift/index.html|AWS CLI pour GameLift]]. 
 + 
 +Accéder par SSH sur une instance Linux: 
 + 
 +<code> 
 +aws gamelift describe-instances --fleet-id fleet-c938a965-0d10-4bd5-bba6-912f5578aa45 
 +</code> 
 + 
 +Exemple de réponse reçu: 
 + 
 + 
 +<code> 
 +
 +    "Instances":
 +        { 
 +            "Status": "Active",  
 +            "InstanceId": "i-06bc89c264c000000",  
 +            "Type": "c5.large",  
 +            "CreationTime": 1605559806.411,  
 +            "DnsName": "ec2-35-153-100-100.compute-1.amazonaws.com",  
 +            "FleetId": "fleet-c938a965-0d10-4bd5-bba6-000000000000",  
 +            "IpAddress": "35.153.100.100",  
 +            "OperatingSystem": "AMAZON_LINUX_2" 
 +        } 
 +    ] 
 +
 +</code> 
 + 
 +Ensuite avec l'instance Id on peut récupérer la clé privée. 
 + 
 +<code> 
 +aws gamelift get-instance-access --fleet-id fleet-c938a965-0d10-4bd5-bba6-000000000000 --instance i-06bc89c264c000000 --query "InstanceAccess.Credentials.Secret" --output text > instancekey.pem 
 +</code> 
 + 
 +Il est possible que le port SSH ne soit pas ouvert sur l'instance: 
 + 
 +<code> 
 +# Linux par ssh 
 +aws gamelift update-fleet-port-settings --fleet-id fleet-c938a965-0d10-4bd5-bba6-000000000000 --inbound-permission-authorizations "FromPort=22,ToPort=22,IpRange=###.###.###.###/32,Protocol=TCP" 
 + 
 +# Windows avec RemoteDesktop: 
 +aws gamelift update-fleet-port-settings --fleet-id fleet-c938a965-0d10-4bd5-bba6-000000000000 --inbound-permission-authorizations "FromPort=3389,ToPort=3389,IpRange=###.###.###.###/32,Protocol=TCP" 
 +</code> 
 + 
 +Donner des permission plus restreintes sur la clé privée 
 + 
 +<code> 
 +chmod 400 instancekey.pem 
 +</code> 
 + 
 +ou bien utiliser ''sudo'' pour le ssh: 
 + 
 +<code> 
 +sudo ssh -i instancekey.pem gl-user-remote@35.153.207.14 
 +</code> 
 + 
 +[[https://docs.aws.amazon.com/gamelift/latest/developerguide/fleets-remote-access.html|Source]] 
 + 
 +===== Upload Build ===== 
 + 
 + 
 +Exemple de commande qui peut être utilisée pour téléverser un build vers AWS: 
 + 
 + 
 +<code> 
 +aws gamelift upload-build --operating-system WINDOWS_2012 --build-root ~/path-to/BuildDirectory --name "MyBuild" --build-version "0.0.1" --region us-east-1 
 +</code> 
 + 
 + 
 + 
 + 
 + 
 +===== Fleet Configuration ===== 
 + 
 +On peut avoir besoin de l'identifiant de l'instance sur lequel le fleet se retrouve: 
 + 
 +<code> 
 +aws gamelift describe-runtime-configuration --fleet-id fleet-00000000-0000-0000-0000-000000000000 
 +</code> 
 + 
 +On aura des informations intéressantes tel que l'IP, le port et l'instanceId: 
 + 
 +<code> 
 +
 +    "Instances":
 +        { 
 +            "Status": "Active",  
 +            "InstanceId": "i-00000000000000000",  
 +            "Type": "c5.large",  
 +            "CreationTime": 1600000000.000,  
 +            "DnsName": "ec2-54-100-100-100.compute-1.amazonaws.com",  
 +            "FleetId": "fleet-00000000-0000-0000-0000-000000000000",  
 +            "IpAddress": "54.100.100.100",  
 +            "OperatingSystem": "WIN_2012" 
 +        } 
 +    ] 
 +
 +</code> 
 + 
 + 
 +==== Runtime Configuration ==== 
 + 
 +Exemple de modification de Runtime Configuration pour changer le LaunchPath, ou même le ''ConcurrentExecutions'': 
 + 
 +<code> 
 +aws gamelift update-runtime-configuration --fleet-id fleet-c938a965-0d10-4bd5-bba6-912f5578aa45 --runtime-configuration "ServerProcesses=[{LaunchPath=/local/game/RealtimeServerScript.js,ConcurrentExecutions=10}],MaxConcurrentGameSessionActivations=2147483647,GameSessionActivationTimeoutSeconds=3600" 
 +</code>
  
cloud/aws/toc.txt · Dernière modification : 2022/12/10 14:46 de sgariepy