【AWS SSO】AWSへのアクセス方法(GUI/CLI)について

記事タイトルとURLをコピーする

こんにちは。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へのアクセス方法をブログに記載いたしました。

どなたかのお役に立てれば幸いです。

福島 和弥 (記事一覧)

SRE3課

2019/10 入社

AWS CLIが好きです。