AWS CLI ja profiilit: Näin hallitset useita AWS-tunnuksia vaivattomasti

Tässä kirjoituksessa perehdytään ensin lyhyesti AWS:n käyttäjätiliin sekä AWS:n tärkeimpiin käyttäjätyppeihin, joiden kautta AWS:n palveluita voidaan käyttää.

Seuraavaksi esitellään lyhyesti AWS komentorivityökalun (AWS CLI) käyttäjäasetuksia sekä profiilien käyttöä komentorivityökalun kanssa.

Lopuksi otetaan käyttöön näppärä työkalu, jonka avulla useiden eri profiilien käyttäminen ja niiden välillä vaihtaminen onnistuu sujuvasti.

AWS-tilin luominen

AWS-pilviympäristön palveluja käytettäessä, AWS:n hallintaliittymään webissä luodaan ensimmäisenä AWS-käyttäjätili (AWS account), jonka kautta AWS:n palveluita voidaan hallinnoida. Tilille myös syötetään luottokorttitiedot laskutusta varten.

Tilille voidaan kirjautua eri tavoilla ja käydään seuraavaksi läpi eri kirjautumistapoja.

Kirjautumistavat: Root-käyttäjä vs. IAM-käyttäjä

AWS tilille kirjaudutaan AWS:n hallintaliittymän (AWS Management Console) kautta osoitteessa https://console.aws.amazon.com/console/home

AWS hallintaliittymään kirjautuminen

Kuten yllä olevasta kuvasta näkyy, AWS tarjoaa kaksi tapaa kirjautua AWS-tilille: Root-käyttäjä ja IAM-käyttäjä. Tutustutaan seuraavaksi niiden eroihin ja käyttötapoihin.

Root-käyttäjä

Tämä käyttäjä luodaan samalla kun AWS-tili perustetaan. Root-käyttäjällä on täydet oikeudet kaikkiin AWS-tilin resursseihin ja asetuksiin. Root-käyttäjää tulisi käyttää vain tilin hallinnointiin ja kriittisiin tehtäviin, koska vääriin käsiin joutuessa Root-tunnuksella voidaan saada aikaan suurtakin vahinkoa.

Root-käyttäjän kirjautuminen alkaa sähköpostiosoitteen syöttämisellä

Root-käyttäjällä on oletuksena käytössä MFA-tunnistautuminen (Multi-factor authentication) eli pelkällä tunnuksella ja salasanalla ei pääse kirjautumaan sisään vaan lisäksi vaaditaan esimerkiksi autentikointisovelluksesta (kuten Microsoft Authenticator) löytyvä vaihtuva koodi.

Tilin laskutustiedot näkyvät vain Root-käyttäjälle. On myös muutamia muita toimintoja, jotka vaativat Root-käyttäjän tunnusta.

IAM-käyttäjä

IAM (Identity and Access Management) -käyttäjä on tiliin yhdistetty käyttäjä, joka luodaan tilin Root-käyttäjän toimesta. IAM-käyttäjille voidaan määrittää tarkat käyttöoikeudet ja roolit, jotka rajoittavat pääsyä AWS-resursseihin.

Kutakin käyttötarkoitusta varten voidaan luoda uusi IAM-käyttäjä ja antaa sille vain tarvittavat oikeudet.

IAM-käyttäjät voivat kirjautua AWS hallintaliittymään käyttäen tilin tunnusta tai alias-nimeä, käyttäjänimeä ja salasanaa, mutta heille näytetään vain ne resurssit, joihin käyttöoikeuksien kautta on annettu oikeus. IAM-käyttäjät voivat myös käyttää monivaiheista tunnistautumista (MFA).

IAM-käyttäjän oikeuksien määrittäminen voidaan tehdä varsin monipuolisesti ja IAM:n voidaankin sanoa olevat yksi AWS:n monimutkaisimmista osuuksista. Tässä artikkelissa emme perehdy tarkemmin IAM:n käytäntöihin ja oikeuksiin, vaan perehdymme eri käyttäjätunnusten konkreettiseen käyttämiseen.

AWS CLI:n asennus ja konfigurointi

AWS CLI (Command Line Interface) on komentorivityökalu, jonka avulla voit hallita AWS-palveluita suoraan oman koneen komentoriviltä.

Sen avulla voit suorittaa erilaisia tehtäviä, kuten luoda ja hallita resursseja ja tarkastella resurssien tietoja ilman, että tarvitsee käyttää AWS:n hallintaliittymää.

AWS CLI:n kautta suoritetut komennot suoritetaan aina jonkin käyttäjätunnuksen kautta, joka määrittää oikeudet suoritettaville komennoille.

AWS CLI asennetaan omalle koneelle AWS:n virallisilta sivuilta.

Asennuksen onnistumisen voi varmistaa vaikkapa komennolla

aws --version

Asennuksen jälkeen tavallinen tapa configuroida AWS CLI on komento

aws configure

configure-komennon suorituksen yhteydessä kysytään AWS Access Key ID, AWS Secret Access Key, oletusalue (region) ja oletusformaatti (output format).

AWS Access Key ID ja AWS Secret Access Key ovat käyttäjäkohtaisia tunnisteita, joiden kautta voidaan käyttää AWS:n palveluja käyttäjän oikeuksilla. Nämä tiedot generoidaan AWS:n hallintaliittymässä ja Secret Access Key on nimensä mukaisesti tieto joka on syytä pitää tallessa huolellisesti.

AWS Access Key ID ja AWS Secret Access Key avaavat pääsyn AWS:n resursseihin kyseisen käyttäjätunuksen oikeuksilla.

Kun edellä mainitut tiedot on annettu configure -komennon suorituksen yhteydessä, aws-komennon kautta voidaan suorittaa komentoja käyttäjän oikeuksilla. Esimerkiksi listata S3 bucetit:

aws s3 ls

Profiilien konfigurointi ja käyttö AWS CLI:ssä

Edellisessä kappaleessa konfiguroitiin AWS CLI käyttämään tietyn käyttäjän käyttöoikeuksia. Mutta kuten edellä mainittiin, yleensä IAM-käyttäjiä luodaan useita eri käyttötarkoituksia varten. Tavallinen harrastelijakoodarikin haluaa varmasti luoda erillisen IAM-käyttäjän eri projektien käyttöön.

Miten hallita usean IAM-käyttäjän käyttö omalla koneella?

Yksi tapa on tietysti konfiguroida AWS CLI aina uudelleen, mutta se on melko kankea tapa. Ratkaisuksi on kehitetty AWS CLI:n sisäinen työkalu: profiilit. AWS CLI profiilien avulla voi käyttää useita AWS-tunnuksia omalta koneelta eri tarkoituksiin ilman että tarvitsee tehdä varsinaista konfigurointia käyttäjää vaihdettaessa.

Yksi profiili siis edustaa yhtä AWS käyttäjäoikeutta. Oletuskonfigurointi edustaa profiilia, jonka nimi on default.

Uusi profiili perustetaan komennolla

aws configure --profile omaProfiili

Yllä esitetty esimerkkikomento kysyy vastaavat tiedot kuin peruskomento aws configure ja tallentaa tiedot profiilille nimeltä omaProfiili.

Tallennettua profiilia voidaan nyt käyttää komentojen suoritukseen, antamalla profiilin nimi komennon yhteydessä. Esimerkki:

aws s3 ls --profile omaProfiili

Profiilien tiedot tallennetaan paikallisesti kahteen tiedostoon:  ~/.aws/credentials ja ~/.aws/config.

Ensimmäinen credentials-tiedosto sisältää profiilikohtaiset AWS Access Key ID ja AWS Secret Access Key -tiedot:

[default]
aws_access_key_id = [oletus profiilin access key id]aws_secret_access_key = [oletus profiilin secret access key]
[omaProfiili]
aws_access_key_id = [oman profiilin access key id]
aws_secret_access_key = [oman profiilin secret access key]

Toinen tiedosto config sisältää profiilin muut tiedot eli valitun alueen (region) ja oletusformaatin (output format)

[default]
region = us-west-2
output = json

[profile omaProfiili]
region = eu-central-1
output = text

Tiedostoja voi muokata itsekin jos tulee tarvetta.

Profiilin valinta komentorivillä

Profiilit auttavat siis huomattavasti paikallisten käyttäjätilien hallinnassa, mutta profiilin antaminen jokaisen komennon yhteydessä on kuitenkin varsin työlästä. Perehdytään seuraavaksi tapoihin, joilla voidaan hallita ja käyttää profiileja sekä vaihtaa oletusprofiilia.

Oletusprofiili ja profiili komennon yhteydessä

Kertauksena: jos AWS CLI komennon yhteydessä ei annettu profiilin nimeä, komento suoritetaan oletusprofiilin (default) kautta. Komennon yhteydessä voidaan kuitenkin antaa parametrina --profile [profiilinNimi] jolloin suoritus tapahtuu kyseisen profiilin oikeuksilla.

Profiilien hallinta ja käyttö AWS CLI kautta

AWS CLI sisältää erilaisia komentoja profiilien hallintaan. Tutustutaan niihin seuraavaksi.

Olemassa olevat profiilit voidaan listata komennolla

aws configure list-profile

Komento listaa kaikki käytettävissä olevien profiilien nimet, esim:

default
omaProfiili
serverlessTestProjectUser
bucketUser

Yksittäisen profiilin voi konfiguroida uudelleen komennolla

aws configure --profile [profiilin nimi]

Näytä nykyisen profiilin tiedot:

aws configure list

Mutta yllättävää kyllä, komennoissa käytettävää oletusprofiilia ei voi asettaa muutoin kuin muokkaamalla asetustiedostojen [default] kohtia tai asettamalla ympäristömuuttujan:

export AWS_PROFILE=omaProfiili

Perehdytään seuraavaksi näppärään pikku työkaluun, jolla voidaan sujuvoittaa oletusprofiilin valintaa.

Työkalu oletusprofiilin valintaan

Koska --profile -parametrin antaminen komentojen yhteydessä on varsin työlästä ja ympäristömuuttujan asettaminenkin vaatii oman vaivansa, perehdytään seuraavaksi työkaluun, jolla voidaan hallita ja vaihtaa profiileja paremmin kuin AWS CLI työkalun omilla keinoilla.

Osoitteesta https://github.com/aws-samples/awscli-profile-credential-helpers löytyy repository, jossa on erilaisia työkaluja juurikin AWS CLI profiilien hallintaan.

Kyseessä on kokoelma työkaluja, mutta otamme käyttöön vain yksinkertaisen työkalun aws-profile, jonka avulla profiilien valinta komentorivillä on miellyttävää.

Itse asiassa kyseessä on vain yksinkertainen Bash-funktio, jonka avulla voidaan helposti listata profiilit sekä asettaa nykyinen oletusprofiili:

function aws-profile() {
  if [[ -z "${1}" ]]; then
    profiles=$(grep '\[profile' ~/.aws/config | tr -d '[]' | awk '{print $2}')
    for profile in $profiles; do
      if [[ "${profile}" == "${AWS_PROFILE}" ]]; then
        echo "${profile} *"
      else
        echo "${profile}"
      fi
    done
  else
    export AWS_PROFILE="${1}"
  fi
}

Skripti asennetaan yksinkertaisesti siten, että kopioidaan repositoryn tiedosto aws-profile omalle koneelle tiedoston ~/.bashrc tai ~/.bash_profile sisälle. Asennuksen jälkeen komentoa voi testata ajamalla komennon:

aws-profile

Tämä komento listaa kaikki käytettävissä olevat profiilit ja korostaa käytössä olevan profiilin.

Oletusprofiilin voi valita ajamalla komennon

aws-profile [profiilin nimi]

Yllä oleva komento itse asiassa vain asettaa ympäristömuuttujan AWS_PROFILE. Sen sen jälkeen AWS CLI komennot käyttävä oletuksena ympäristömuuttujaan asetettua profiilia!

Nopea ja helposti muistettava profiilin vaihtaminen tehostaa ja helpottaa toimintaa, kun profiileja on useita ja niiden välillä joutuu vaihtelemaan.

Yhteenveto

Tässä artikkelissa käsiteltiin AWS:n käyttäjätilien ja käyttäjätyyppien perusteita, AWS CLI:n (komentorivityökalun) käyttöä sekä profiilien hallintaa.

AWS-tilin luominen ja hallinta on ensimmäinen askel AWS-palveluiden käytössä. Tilille voidaan kirjautua joko root-käyttäjänä tai IAM-käyttäjänä. Root-käyttäjällä on täydet oikeudet kaikkiin resursseihin, kun taas IAM-käyttäjille voidaan määrittää tarkat käyttöoikeudet.

AWS CLI:n avulla voidaan hallita AWS-palveluita suoraan komentoriviltä, ja sen konfigurointi tapahtuu aws configure -komennolla, jossa määritetään käyttäjän tunnistetiedot ja asetukset. Profiilien avulla voidaan hallita useita käyttäjätilejä ja vaihtaa niiden välillä helposti ilman, että tarvitsee jatkuvasti konfiguroida AWS CLI:tä uudelleen.

Artikkelin lopussa esiteltiin näppärä Bash-funktio aws-profile, joka helpottaa profiilien hallintaa ja vaihtamista. Tämä työkalu tekee profiilien käytöstä sujuvampaa ja tehokkaampaa, erityisesti silloin, kun käytössä on useita eri profiileja.