経緯
以前にSSOを利用してADのユーザーでAWSコンソールにログインしたのですが、今回はCLIでも試してみました。
端末はwin10を使用しました。
設定
CLIの設定
実際の設定方法は下記のリンクを参照ください。
AWS Single Sign-On を使用するための AWS CLI の設定
確認
設定が完了すると、SSOにサインインしている状態ですので、下記コマンドを実行して一旦ログアウトします。
aws sso logout
ログインします。
aws sso login --profile profile_A
接続完了したら、下記のコマンドを実行してバケットを取得できました。(SSOサービスでユーザーにアクセスセットの割り当て済みであることを前提とします。)
aws s3 ls --profile profile_A
複数アカウントの時はどうする?
複数アカウントある時はどのような感じになるのでしょうか?
試してみました。
ユーザーディレクトリにあるconfigファイル(.aws\config)を確認すると、下記が設定されておりました。
[profile profile_A]
region = ap-northeast-1
output = json
sso_start_url = https://xxxxx.awsapps.com/start
sso_region = ap-northeast-1
sso_account_id = AAAAA
sso_role_name = AdministratorAccess
上記部分をコピーしてアカウントBのprofileを追加します。
(SSOサービスでユーザーにアクセスセットの割り当て済みであることを前提とします。)
[profile profile_B]
region = ap-northeast-1
output = json
sso_start_url = https://xxxxx.awsapps.com/start
sso_region = ap-northeast-1
sso_account_id = BBBBB
sso_role_name = AdministratorAccess
コマンドプロンプトを起動しなおして、SSOログインします。
ここでは、AWS_PROFILE,AWS_DEFAULT_PROFILEを指定していないので、profile_Aでログインしてもprofile_Bでログインしても結果は同じです。
今回あえて指定しない理由は最後に記述します。
aws sso login --profile profile_A
profile_A
接続後、aws configure listコマンドでprofile_Aの接続情報を取得します。
aws configure list --profile profile_A
Name Value Type Location
---- ----- ---- --------
profile profile_A env ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE']
access_key ****************6S6J sso
secret_key ****************TEkP sso
region ap-northeast-1 config-file ~/.aws/config
引き受けているロールの情報を取得します。
aws sts get-caller-identity --profile profile_A
{
"UserId": "xxxxx:user@hoge.com",
"Account": "AAAAA",
"Arn": "arn:aws:sts::AAAAA:assumed-role/AWSReservedSSO_AdministratorAccess_xxxxx/user@hoge.com"
}
profile_B
続いて、aws configure listおコマンドでprofile_Bの接続情報と取得します。
aws configure list --profile profile_B
Name Value Type Location
---- ----- ---- --------
profile profile_B manual --profile
access_key ****************WQ7Q sso
secret_key ****************T/Bl sso
region ap-northeast-1 config-file ~/.aws/config
引き受けているロールの情報を取得します。
aws sts get-caller-identity --profile profile_B
{
"UserId": "xxxxx:user@hoge.com",
"Account": "BBBBB",
"Arn": "arn:aws:sts::BBBBB:assumed-role/AWSReservedSSO_AdministratorAccess_xxxxx/user@hoge.com"
}
各アカウントのS3バケット名の取得
profile_AのS3バケット名を取得します。
aws s3 ls --profile profile_A
profile_BのS3バケット名を取得します。
aws s3 ls --profile profile_B
ちなみにprofileオプションを指定しなかった時はエラーとなります。
aws s3 ls
Unable to locate credentials. You can configure credentials by running "aws configure".
このようにprofileオプションを付けることによりアカウント毎にコマンドを実行する事ができます。
今回は、運用でコマンドを実行する際にミスを防ぐ為に、明示的にprofileオプションを指定したかったのでAWS_PROFILE,AWS_DEFAULT_PROFILEの環境変数はセットしませんでしたが、常にどちらかしか使わないようであれば下記のコマンドでAWS_PROFILE,AWS_DEFAULT_PROFILEの環境変数をセットしてもいいかと思います。
setx AWS_DEFAULT_PROFILE "profile_A"
setx AWS_PROFILE "profile_A"
“AWS CLIをSSOでログインして使用する” への1件のコメント
読ませていただきました
aws,あんまり資料なくて
よかったです