Table des matières
AWS
AWS est le service cloud d'Amazon.
CLI
Pour configurer un compte avec un access key et secret:
$ aws configure
Variables d'environnement
$ export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE $ export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY $ export AWS_DEFAULT_REGION=us-west-2
Dans le cas d'utilisation d'un session token, on peut ajouter:
AWS_SESSION_TOKEN
Utiliser un rôle qui requiert un MFA
Dans le fichier ~/.aws/credentials
, ajouter par exemple les credentials nécessaires:
[aws_account_name_or_username] aws_access_key_id = AKIAQ75CXLP2PEXAMPLE aws_secret_access_key = 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
Après dans le fichier ~/.aws/config
ajouter un profil:
[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
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:
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: 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 documentation le suggère.
Plutôt faire avec un export:
$ export AWS_PAGER=
IAM
Créer un rôle IAM:
aws iam create-role --role-name SomeRoleName --assume-role-policy-document file://./subdir/some-file.json
Attach to policy:
aws iam attach-role-policy --role-name SomeRoleName --policy-arn arn:aws:iam::aws:policy/GameLiftGameServerGroupPolicy
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:
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}}" }
Si la réponse retourne un challenge NEW_PASSWORD_REQUIRED
, il faut envoyer une requête RespondToAuthChallenge
:
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}}" }
La réponse au challenge retourne le id token si ça a bien fonctionné.
Obtenir un id token avec un refresh token:
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}}" }
Ressources
- Amazon Cognito Identity SDK for JavaScript (package npm)
- amazon-archives/amazon-cognito-identity-js (repo GitHub archivé)
GameLift
Référence générale du AWS CLI pour GameLift.
Accéder par SSH sur une instance Linux:
aws gamelift describe-instances --fleet-id fleet-c938a965-0d10-4bd5-bba6-912f5578aa45
Exemple de réponse reçu:
{ "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" } ] }
Ensuite avec l'instance Id on peut récupérer la clé privée.
aws gamelift get-instance-access --fleet-id fleet-c938a965-0d10-4bd5-bba6-000000000000 --instance i-06bc89c264c000000 --query "InstanceAccess.Credentials.Secret" --output text > instancekey.pem
Il est possible que le port SSH ne soit pas ouvert sur l'instance:
# 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"
Donner des permission plus restreintes sur la clé privée
chmod 400 instancekey.pem
ou bien utiliser sudo
pour le ssh:
sudo ssh -i instancekey.pem gl-user-remote@35.153.207.14
Upload Build
Exemple de commande qui peut être utilisée pour téléverser un build vers AWS:
aws gamelift upload-build --operating-system WINDOWS_2012 --build-root ~/path-to/BuildDirectory --name "MyBuild" --build-version "0.0.1" --region us-east-1
Fleet Configuration
On peut avoir besoin de l'identifiant de l'instance sur lequel le fleet se retrouve:
aws gamelift describe-runtime-configuration --fleet-id fleet-00000000-0000-0000-0000-000000000000
On aura des informations intéressantes tel que l'IP, le port et l'instanceId:
{ "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" } ] }
Runtime Configuration
Exemple de modification de Runtime Configuration pour changer le LaunchPath, ou même le ConcurrentExecutions
:
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"