Στον σημερινό οδηγό της σειράς άρθρων Amazon Web Services θα δούμε τους τρόπους με τους οποίους μπορούμε να επικοινωνήσουμε με τις υπηρεσίες του AWS.

Υπάρχουν διάφοροι τρόποι για να επικοινωνήσουμε με τις υπηρεσίες του AWS :

  1. Ο πρώτος τρόπος είναι προφανώς μέσα από τον browser, πηγαίνοντας στο AWS Management Console που χρησιμοποιούμε εδώ και αρκετή ώρα. Κάνετε login με το password και το MFA code και όλα μια χαρά. Κλικ-εδώ, κλικ-εκεί, κλικ-παρακεί, κλπ.
  2. Ο δεύτερος τρόπος είναι μέσω του τερματικού (CLI – Command Line Interface). Εκεί μας δίνει η Amazon ένα δικό της binary που πρέπει να κατεβάσουμε και να εγκατασήσουμε στο PC μας. Παίζει σε όλα τα λειτουργικά και υπάρχουν οδηγίες για αυτό. Εκεί, αντί για τους κωδικούς που είχαμε στον browser, θα πρέπει να φτιάξουμε κάποια κλειδιά, που λέγονται protected access keys.
  3. Ο τρίτος τρόπος είναι μεσω SDK (Software Development Kit). Εκεί χρησιμοποιούμε μία γλώσσα προγραμματισμού, Java, Python, Go, κλπ, και μέσω του API μπορούμε να κάνουμε διάφορα calls. Για να μπορέσουν να περάσουν τα calls αυτά και να πάρουμε μία μία authenticated απάντηση από τον AWS APIServer θα πρέπει να χρησιμοποιήσουμε πάλι protected access keys, αυτά που χρειάζεται η μέθοδος του τερματικού.

Αν δεν έχετε διαβάσει το πρώτο μέρος της νέας σειράς είναι τότε θα το βρείτε στο:  Amazon Web Services |0| Εισαγωγή στο cloud computing με AWS

Όλοι η σειρά άρθρων Amazon Web Services είναι διαθέσιμη στον παρακάτω σύνδεσμο (tag : aws-intro)

https://cerebrux.net/tag/aws-intro

Advertisements

Απόκτηση των Access Keys για AWS

Για να πάρουμε ένα access key θα πάμε στην AWS Console. Ο κάθε user διαχειρίζεται τα δικά του κλειδιά. Προφανώς τα κλειδιά αυτά είναι εξίσου σημαντικά σαν το password και το MFA. Μην τυχόν και τα μοιράζετε από δω και από κει στο Internet.

Στην ουσία ένα access key αποτελείται από:

  • Access Key ID = το οποίο είναι ένα username
  • Secret Access Key = το οποίο είναι σαν ένα password

Οπότε κάνω login σαν drpaneas και όχι σαν root! Προσοχή, τo root account στην ουσία δεν θα το χρησιμοποιούμε σχεδόν καθόλου, είναι μόνο για το αρχικό setup. Οπότε ο κάθε user πρέπει να κάνει generate τα δικά του κλειδιά. Μπαίνω λοιπόν σαν drpaneas @ drpaneas-cpp (που έφτιαξα νωρίτερα). Πάω λοιπόν:

IAM > Users > drpaneas > Security Credentials tab > Create Access Key

 ο κάθε user πρέπει να κάνει generate τα δικά του κλειδιά

Στην συνέχεια, σας δείχνει το Access Key, και είναι η μόνη φορά που θα το δείτε. Οπότε αποθηκεύστε το κάπου και μην το χάσετε. Εννοείται ότι αυτό που σας δείχνω το έχω ήδη διαγράψει, οπότε αν δοκιμάσετε να συνδεθείτε με το account μου θα αποτύχετε. Μπορείτε να διαγράψετε και να προσθέσετε πολλά access keys.

Εγκατάσταση του AWS Command Line Interface

Πάτε εδώ: https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2-linux.html και ακολουθήστε τις οδηγίες για εγκατάσταση στο PC σας.

Σε ένα terminal δώστε:

aws --version

Θα πρέπει να σας επιστρέψει την έκδοση. πχ εμενα αυτη τη στιγμη που γραφω το αρθρο που εβγαλε aws-cli/2.0.42. Αυτο σημαίνει ότι το aws cli εγκαταστάθηκε κανονικά χωρίς πρόβλημα.

Ρύθμιση του aws cli

Πατήστε aws configure στο τερματικό και δώστε τo access key του IAM user (όχι του root, είπαμε δεν θελουμε να χρησιμοποιούμε τον root).

aws configure
AWS Access Key ID [None]: βάλε το δικό σου
AWS Secret Access Key [None]: βάλε το δικό σου
Default region name [None]: eu-central-1 (βάλε όποια είναι πιο κοντά σε εσένα)
Default output format [None]: (τίποτα, απλά πάντα Enter)

Τώρα, ας δοκιμάσουμε να δούμε αν δουλεύει:

aws iam list-users

Και επιστρέφει:

{
    "Users": [
        {
            "Path": "/",
            "UserName": "drpaneas",
            "UserId": "AIDASGYP3OJMQ3MYF5AGV",
            "Arn": "arn:aws:iam::151967724121:user/drpaneas",
            "CreateDate": "2020-08-24T01:57:54+00:00",
            "PasswordLastUsed": "2020-08-24T13:47:07+00:00"
        }
    ]
}

Οι πληροφορίες που βλέπετε είναι οι ΙΔΙΕΣ με αυτές που βλέπετε και στον browser με το AWS Console.

Αν αφαιρέσω permissions από αυτόν τον user (δεν το θα το κάνω τώρα, άπλα σας λέω το τι θα γίνει) τότε δεν θα μπορέσει να κάνει list-users.

Ετσι λοιπόν μπορούμε να επικοινωνήσουμε με το AWS μέσω του τερματικού

Επικοινωνία με AWS μέσω API

Όταν γράφουμε ένα πρόγραμμα, πχ κάποιον controller ή κάποιο service που θέλει να επικοινωνήσει με το AWS, τότε μην καθίσει κανένας πίθηκος και γράψει BASH το οποίο αποτελείται από aws cli εντολές.

Χρησιμοποιείστε μία γλώσσα προγραμματισμού για να έχετε maintainable κώδικα, σωστό error checking, και logging. Το bash είναι για να κανένα prototyping. Για αυτή την δουλειά θα πάτε εδώ: https://aws.amazon.com/tools/ όπου έχει οδηγίες πώς να γράψετε έναν δικό σας client σε διάφορες γλώσσες, όπως C++, Go, Java, Javascript, .NET, Node.js, PHP, Python και Ruby.

Εγώ θα επιλέξω την Go, και θα γράψω γρήγορα ένα πρόχειρο script που μου κάνει list τους IAM users – ότι κάναμε δηλαδή και πριν με το aws cli πριν.

Ο κώδικας:

package main

import (
	"fmt"

	"github.com/aws/aws-sdk-go/aws"
	"github.com/aws/aws-sdk-go/aws/session"
	"github.com/aws/aws-sdk-go/service/iam"
)

func main() {
	sess, err := session.NewSession(&aws.Config{
		Region: aws.String("eu-central-1")},
	)

	// Create a IAM service client.
	svc := iam.New(sess)

	// List IAM users
	result, err := svc.ListUsers(&iam.ListUsersInput{
		MaxItems: aws.Int64(10),
	})

	if err != nil {
		fmt.Println("Error", err)
		return
	}

	for i, user := range result.Users {
		if user == nil {
			continue
		}
		fmt.Printf("%d UserName %s\n UserId: %s\n Arn: %s\n CreateDate: %v\n PasswordLastUsed: %v \n", i, *user.UserName, *user.UserId, *user.Arn, user.CreateDate, user.PasswordLastUsed)
	}
}

To script θα τραβήξει τα access keys από κει που τα αποθήκευσε νωρίτερα το aws configure. Μπορείτε να το επαληθεύσετε κάνοντας: cat ~/.aws/credentials.

Τρέχουμε το Go script:

$ ./awsclient
0 UserName drpaneas
 UserId: AIDASGYP3OJMQ3MYF5AGV
 Arn: arn:aws:iam::151967724121:user/drpaneas
 CreateDate: 2020-08-24 01:57:54 +0000 UTC
 PasswordLastUsed: 2020-08-24 13:47:07 +0000 UTC

Με αυτό τον τρόπο λοιπόν μπορούμε να γράψουμε έναν δικό μας client και να μιλήσουμε με το AWS. Υπάρχει απίστευτο documentation και παραδείγματα για να κάνετε ό,τι θέλετε. Χρόνο και όρεξη να έχετε ;)