カテゴリー
AWS SSO(Single Sign-On)

AWS CLIをSSOでログインして使用する

経緯

以前に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"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です