今回は、ローカル端末から IAM Identity Center を介して AWS CLI を利用する環境について紹介していきます。

AWS CLI を実行するローカル端末を事前に容易します。今回は、almalinux をローカル端末として利用します。

AWS CLI のインストール

AWS CLI パッケージのダウンロード先ディレクトリを必要に応じて作成して、そのディレクトリへ移動しておきます。

[user@almalinux ~]$ sudo mkdir /tmp/aws
[sudo] password for user: 
[user@almalinux ~]$ 
[user@almalinux ~]$ cd /tmp/aws/
[user@almalinux aws]$ 

AWS CLI バージョン2のパッケージをインターネット上からダウンロードしてきます。バージョン1 のパッケージもありますが、IAM Identity Center を介して AWS CLI を利用するにはバージョン2のパッケージである必要があります。

[user@almalinux aws]$ sudo curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 55.6M  100 55.6M    0     0  7848k      0  0:00:07  0:00:07 --:--:-- 9206k
[user@almalinux aws]$ 

ダウンロードしたパッケージファイルをunzip で解凍します。unzip がローカル端末にインストールされていない場合には、下記のようなエラーとなります。

[user@almalinux aws]$ sudo unzip awscliv2.zip 
sudo: unzip: command not found
[user@almalinux aws]$ 

解凍ソフト(unzip)と圧縮ソフト(zip)をインストールします。

[user@almalinux aws]$ sudo yum install zip unzip
Last metadata expiration check: 1:39:36 ago on Mon Aug  7 01:24:51 2023.
Dependencies resolved.
================================================================================
 Package         Architecture     Version                Repository        Size
================================================================================
Installing:
 unzip           x86_64           6.0-56.el9             baseos           180 k
 zip             x86_64           3.0-35.el9             baseos           263 k

Transaction Summary
================================================================================
Install  2 Packages

Total download size: 443 k
Installed size: 1.1 M
Is this ok [y/N]: y

ーー(省略)ーー
Running transaction
  Preparing        :                                                        1/1 
  Installing       : unzip-6.0-56.el9.x86_64                                1/2 
  Installing       : zip-3.0-35.el9.x86_64                                  2/2 
  Running scriptlet: zip-3.0-35.el9.x86_64                                  2/2 
  Verifying        : unzip-6.0-56.el9.x86_64                                1/2 
  Verifying        : zip-3.0-35.el9.x86_64                                  2/2 

Installed:
  unzip-6.0-56.el9.x86_64                 zip-3.0-35.el9.x86_64                

Complete!
[user@almalinux aws]$ 

unzip をインストールしたら、先程ダウンロードしたパッケージファイルを解凍します。

[user@almalinux aws]$ sudo unzip awscliv2.zip 
ーー(省略)ーー
  inflating: aws/dist/docutils/writers/latex2e/default.tex  
  inflating: aws/dist/docutils/writers/latex2e/xelatex.tex  
  inflating: aws/dist/docutils/writers/latex2e/titlingpage.tex  
  inflating: aws/dist/docutils/writers/latex2e/titlepage.tex  
  inflating: aws/dist/docutils/writers/latex2e/docutils.sty  
  inflating: aws/dist/docutils/writers/odf_odt/styles.odt  
  inflating: aws/dist/docutils/writers/pep_html/pep.css  
  inflating: aws/dist/docutils/writers/pep_html/template.txt  
[user@almalinux aws]$ 

インストールプログラムを実行します。実行すると、デフォルトですべてのファイルが /user/local/aws-cli にインストールされ、シンボリックリンクが /user/local/bin に作成されます。

[user@almalinux aws]$ sudo ./aws/install
You can now run: /usr/local/bin/aws --version
[user@almalinux aws]$ 

以下のコマンドを使用して、インストールを確認します。

[user@almalinux aws]$ sudo /usr/local/bin/aws --version
aws-cli/2.13.7 Python/3.11.4 Linux/5.14.0-284.18.1.el9_2.x86_64 exe/x86_64.almalinux.9 prompt/off
[user@almalinux aws]$ 

インストールが正常であれば、aws コマンドが実行できるようになります。

[user@almalinux aws]$ aws ls

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help

aws: error: argument command: Invalid choice, valid choices are:

accessanalyzer                           | account                                 
acm                                      | acm-pca                                 
alexaforbusiness                         | amp                                     
amplify                                  | amplifybackend                          
ーー(省略)ーー
s3                                       | ddb                                     
configure                                | deploy                                  
configservice                            | opsworks-cm                             
history                                  | cli-dev                                 
help                                    

[user@almalinux aws]$ 

自動認証更新によるトークンプロバイダーの設定

SSO トークンプロバイダー設定を使用して AWS IAM Identity Center でユーザーを認証するように AWS CLI を設定する方法について説明していきます。AWS SDK またはツールは、更新された認証トークンを自動的に取得できます。

ここでの設定を行わないと、AWS リソースへのアクセスはできません。


[user@almalinux aws]$ aws s3 ls

Unable to locate credentials. You can configure credentials by running "aws configure".
[user@almalinux aws]$ 

aws configure sso コマンドで SSO トークンプロバイダー設定を行っていきます。

SSO session name : 任意の名前
SSO strat URL: ログイン後に取得できる情報と一致させて下さい
SSO region:ログイン後に取得できる情報と一致させて下さい
SSO registration scopes:デフォルト(sso:account:access)

[user@almalinux aws]$ aws configure sso
SSO session name (Recommended): 任意の文字列
SSO start URL [None]: https://●●●●.awsapps.com/start#
SSO region [None]: ■■■■
SSO registration scopes [sso:account:access]:

上記設定を行った後に、Enterを押すと下記のように処理が進みます。

Attempting to automatically open the SSO authorization page in your default browser.
If the browser does not open or you wish to use a different device to authorize this request, open the following URL:

https://△△△△.amazonaws.com/

Then enter the code:

PJWH-SCFN

上記にあるURLにアクセスします。認証を要求されるので、上記発行されたコードを入力し [ Next ] ボタンを押します。

アクセスを許可するか確認を求めてくるため、[ Allow ] ボタンを押しアクセスを許可します。

どちらのAWSアカウントを適用するか確認してくるため、適用するAWS アカウントを選択し、Enter で実行します。

There are 2 AWS accounts available to you.
> ××××, test@test.com (753937710942)   
  ○○○○, sample@test.com (958249634120)   

次に AWS CLI のデフォルト値(リージョン、出力形式、プロファイル名)を確認してくるので、それぞれ入力し実行していきます。

・client Regein:クライアントのリージョンを指定(特に指定なければ SSO トークンプロバイダー設定で指定したリージョンと同じ)
・output format:json とします
・profile name:任意(デフォルトのままで良い)

Using the account ID 753937710942
The only role available to you is: *****
Using the role name "*****"
CLI default client Region [None]: ■■■■
CLI default output format [None]: json
CLI profile name [*****-753937710942]:

To use this profile, specify the profile name using --profile, as shown:

aws s3 ls --profile *****-753937710942
[user@almalinux aws]$ 

正常に行けば、AWS CLI での AWS リソースへのアクセスが可能となります。

[user@almalinux aws]$ aws s3 ls --profile Admin-Full-753937710942
[user@almalinux aws]$ 

ここまで設定してきた内容は、~/.aws/config に保存されます。

[user@almalinux aws]$ cat ~/.aws/config 
[profile *****-753937710942]
sso_session = 任意の文字列
sso_account_id = 753937710942
sso_role_name = *****
region = ■■■■
output = json
[sso-session 任意の文字列]
sso_start_url = https://●●●●.awsapps.com/start#
sso_region = ■■■■
sso_registration_scopes = sso:account:access
[user@almalinux aws]$