こんにちは。AWS CLIが好きな福島です。
はじめに
今回は、AWS SSO経由でAWSへGUIまたはCLIを使いアクセスする方法をブログに記載いたします。
GUIによるアクセス方法
①ユーザーポータルURLへのアクセス
AWS SSOの設定を行うと、ユーザーポータルURLが払い出されるため、そのURLへアクセスします。
基本的に以下のようなURLが払い出されます。
https://d-XXXXXXXXX.awsapps.com/start
②ユーザー名の入力
以下の画面は、アイデンティティソースがAWS SSOの場合のため、アイデンティティソースが外部IDプロバイダーの場合、画面が異なります。
また、既に認証されている場合は、②,③,④を飛ばし、⑤をご確認ください。
③パスワードの入力
④MFAの入力
⑤AWSアカウントへのアクセス
ログインしたいアカウントおよび権限の右記に記載の「Management console」を押下します。
⑥ログイン確認
ログイン後、右上からログインしたアカウントIDおよびアクセスに利用したIAMロールが確認できます。
CLIによるアクセス方法
①AWS CLIの導入
以下を参考に、AWSCLIを導入します。
AWS CLI の最新バージョンをインストールまたは更新します。 - AWS Command Line Interface
②SSOの設定
~/.aws/configに以下の設定を行います。
[profile 【任意の名前】] sso_start_url = 【ユーザーポータルURL】 sso_region = ap-northeast-1 sso_account_id = 【操作したいアカウントID】 sso_role_name = 【IAMロール】 region = ap-northeast-1 output = json
※複数存在する場合、複数設定可能ですが、profileの名前は重複しないよう注意が必要です。
- 設定例
[profile dev-account-ro] sso_start_url = https://d-XXXXXXXXX.awsapps.com/start sso_region = ap-northeast-1 sso_account_id = 123456789011 sso_role_name = ReadOnly region = ap-northeast-1 output = json [profile dev-account-admin] sso_start_url = https://d-XXXXXXXXX.awsapps.com/start sso_region = ap-northeast-1 sso_account_id = 123456789011 sso_role_name = Administrator region = ap-northeast-1 output = json
③SSOへのログイン
以下のコマンドを実行します。
# aws sso login --profile [プロファイル名]
- 実行例
# aws sso login --profile dev-account-ro 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://device.sso.us-west-2.amazonaws.com/ Then enter the code: XXXX-XXXX
ブラウザが開き、以下の画面が開くため、Allowを押下します。 以下の画面ではなく認証画面が出てきた場合、認証情報を入力します。(参考: GUIによるアクセス方法の②~④)
④コマンドの実行
正常にログイン出来たら、コマンドが実行できるかと存じます。
# aws sts get-caller-identity --profile dev-account-ro { "UserId": "AROAZXTTGY3YRWGO2F72K:fukushima", "Account": "123456789012", "Arn": "arn:aws:sts::123456789012:assumed-role/AWSReservedSSO_ReadOnlyAccess_8b8b53132b3ea1a0/fukushima" } #
また、プログラミング言語(以下はPythonの例)を実行する方法はいくつかありますが、今回はAWS_PROFILEの環境変数にプロファイル名を設定する方法を記載いたします。
PS1(Linux)や$profile(Windows)の設定は必須ではありませんが、変更しておくことでプロンプトに現在設定されているAWS_PROFILEが表示されるため、便利です。
- コードのサンプル(test.py)
import boto3 client = boto3.client('sts') response = client.get_caller_identity() print ('Account: ' + response['Account']) print ('Arn: ' + response['Arn'])
- Linuxの場合
# PS1="\${AWS_PROFILE}# " # # export AWS_PROFILE=dev-account-ro dev-account-ro# dev-account-ro# python3 test.py Account: 1233456789012 Arn: arn:aws:sts::1233456789012:assumed-role/AWSReservedSSO_ReadOnlyAccess_8b8b53132b3ea1a0/fukushima dev-account-ro#
作業や検証が終わった場合は、AWSへの誤った操作を回避するため、以下のコマンドでAWS_PROFILEの変数を初期化することをお勧めいたします。
unset AWS_PROFILE
- Windows(Powershell)の場合
$profileに設定されているファイルを作成します。
notepad $profile
作成したファイルに以下を設定します。
function prompt () { (echo "$Env:AWS_PROFILE> ") }
> $Env:AWS_PROFILE=dev-account-ro dev-account-ro> python3 test.py Account: 1233456789012 Arn: arn:aws:sts::1233456789012:assumed-role/AWSReservedSSO_ReadOnlyAccess_8b8b53132b3ea1a0/fukushima dev-account-ro>
作業や検証が終わった場合は、AWSへの誤った操作を回避するため、以下のコマンドでAWS_PROFILEの変数を初期化することをお勧めいたします。
$Env:AWS_PROFILE=$null
補足
ユーザーポータルの画面からアクセスキーを取得しCLIによるアクセスを行う方法もありますが、このアクセスキーが漏洩した場合、 AWSへアクセスすることが可能になるため、CLIによるアクセスは上記に記載した方法でアクセスするのが良いかと存じます。
※アクセスキーは永続的に使えるわけではなく、一時的に使えるもののため、永続的に利用できるアクセスキーに比べればセキュリティリスクは低いです。
終わりに
今回は、AWS SSOでGUI/CLIによるAWSへのアクセス方法をブログに記載いたしました。
どなたかのお役に立てれば幸いです。