サポートsupport - SSO
OneLogin - OneLoginを用いてAWS Credentialsを取得する
概要
ローカルPCにAWSCLIがインストールされており、また、AWS Credentialsが取得できていればAWSのGUIでの操作をすべてローカルPCのコマンド上で行うことが可能です。このページではAWS Credentialsの取得する方法についてご説明します。
OneLoginからAWSにSMAL2.0を利用してシングルサインオンするための設定につきましては公式のこちらのページをご覧ください。
方法
3通りの方法があります。
Pythonがインストールされている場合は、Pythonでも簡単に操作を行うことができます。Dockerを用いる方法がバージョン違いによるエラー等が発生する確率が最も低いです。 使用しているマシンにDocker、Pythonどちらもインストールされていない場合は、Javaを使用する方法が簡単だと思います。 ご自身にあった方法で実行してください。
手順
概要
- 事前準備(初回のみ必要)
- パラメータの設定(パラメータの値を変更するたびに必要)
- AWS Credentials取得プログラムを実行(AWS CLIを利用するたび必要)
Python
事前準備
こちらの操作は、初回のみ必要となります。
- こちらのページを参考にしてAWS CLIをインストールしてください。
-
モジュールをインストール
ここでは正常に操作のできるバージョンを指定しています。お使いのマシンによって変更してください。$ pip install awscli==1.18.208 $ pip install onelogin-aws-assume-role==1.8.1
これで事前準備は完了です。
パラメータの設定
こちらの操作はパラメータの値を変更するたびに行う必要があります。カレントディレクトリにてonelogin.sdk.json
を作成し、以下を記述します。こちらのファイルは作成必須です。
{
"client_id": "abcdefg",
"client_secret": "ABCDEFG",
"region": "us",
"ip": ""
}
client_id
,client_secret
:Authentication Only
以上のスコープのOnelogin API Credentialsip
: OneLoginにログイン時にIPアドレス制限をかけている場合は入力が必要、IPアドレス制限をかけていない場合は空欄
OneLoginユーザー名やAWSリージョンが毎回同じである場合は、定義ファイルを用意することで入力を省略することが可能です。onelogin.sdk.json
と同じディレクトリにonelogin.aws.json
を作成し、以下を入力します。
( onelogin.aws.json
は作成必須ではありません。 )
{
"app_id": "",
"subdomain": "",
"username": "",
"duration": ,
"aws_region": "",
"aws_account_id": "",
"aws_role_name": ""
}
app_id
: OneLoginにおけるAWSコネクターのAPP IDsubdomain
: OneLoginのサブドメインusername
: OneLoginのユーザー名duration
: AWS Credentialsの有効期限 ( デフォルトでは3600 )aws_region
: アクセスしたいリソースがあるAWSリージョンaws_account_id
: AWSアカウントIDaws_role_name
: AWSのロール名
Docker
事前準備
こちらの操作は、初回のみ必要となります。
- こちらのページを参考にしてAWS CLIをインストールしてください。
-
リポジトリをクローン
$ git clone https://github.com/onelogin/onelogin-python-aws-assume-role.git $ cd onelogin-python-aws-assume-role
これで事前準備は完了です。
パラメータの設定
こちらの操作はパラメータの値を変更するたびに行う必要があります。カレントディレクトリにてonelogin.sdk.json
を作成し、以下を記述します。こちらのファイルは作成必須です。
{
"client_id": "abcdefg",
"client_secret": "ABCDEFG",
"region": "us",
"ip": ""
}
client_id
,client_secret
:Authentication Only
以上のスコープのOnelogin API Credentialsip
: OneLoginにログイン時にIPアドレス制限をかけている場合は入力が必要、IPアドレス制限をかけていない場合は空欄
OneLoginユーザー名やAWSリージョンが毎回同じである場合は、定義ファイルを用意することで入力を省略することが可能です。onelogin.sdk.json
と同じディレクトリにonelogin.aws.json
を作成し、以下を入力します。
( onelogin.aws.json
は作成必須ではありません。 )
{
"app_id": "",
"subdomain": "",
"username": "",
"duration": ,
"aws_region": "",
"aws_account_id": "",
"aws_role_name": ""
}
app_id
: OneLoginにおけるAWSコネクターのAPP IDsubdomain
: OneLoginのサブドメインusername
: OneLoginのユーザー名duration
: AWS Credentialsの有効期限 ( デフォルトでは3600 )aws_region
: アクセスしたいリソースがあるAWSリージョンaws_account_id
: AWSアカウントIDaws_role_name
: AWSのロール名
Java
事前準備
こちらの操作は、初回のみ必要となります。
- こちらのページを参考にしてAWS CLIをインストールしてください。
-
バイナリファイルをダウンロード
$ mkdir onelogin-aws-assume-role $ cd onelogin-aws-assume-role $ curl -OL https://github.com/onelogin/onelogin-aws-cli-assume-role/raw/master/onelogin-aws-assume-role-cli/dist/onelogin-aws-cli.jar
これで事前準備は完了です。
パラメータの設定
こちらの操作は、パラメータの値を変更するたびに実行する必要があります。先程作成したonelogin-aws-assume-role
へ移動し、カレントディレクトリにてonelogin.sdk.properties
を作成し、以下を記述します。こちらのファイルは作成必須です。
onelogin.sdk.client_id=abcdef
onelogin.sdk.client_secret=ABCDEF
onelogin.sdk.region=
onelogin.sdk.ip=
onelogin.sdk.client_id
,onelogin.sdk.client_secret
:Authentication Only
以上のスコープのOnelogin API Credentialsonelogin.sdk.client.region
: Oneloginインスタンスのリージョンを示します。入力可能な値は'us'か'eu'ip
: OneLoginにログイン時にIPアドレス制限をかけている場合は入力が必要、IPアドレス制限をかけていない場合は空欄
実行
Python, Docker, Javaのそれぞれの実行するためのコマンドは以下のようになります。
-
Pythonでの実行コマンド(
onelogin.sdk.json
,onelogin.aws.json
があるディレクトリで実行します)$ onelogin-aws-assume-role --profile default
-
Dockerでの実行コマンド(
onelogin.sdk.json
,onelogin.aws.json
があるディレクトリで実行します)$ docker build . -t awsaccess:latest $ docker run -it -v ~/.aws:/root/.aws awsaccess:latest onelogin-aws-assume-role --profile default
-
Javaでの実行コマンド(
onelogin-aws-cli.jar
,onelogin.sdk.properties
があるディレクトリで実行します)$ java -jar onelogin-aws-cli.jar --profile default
以下に例としてDockerで実行した際のコードを記載します。
| OneLogin AWS Assume Role Tool
OneLogin Password:
MFA Required
Authenticate using one of these devices:
-----------------------------------------------------------------------
0 | OneLogin Protect
1 | OneLogin Protect
2 | Yubico YubiKey
-----------------------------------------------------------------------
Select the desired MFA Device [0-2]:
2
Enter the OTP Token for Yubico YubiKey:
ccccccundileunfgtyujhgfdfghjkhbvghjkjhgfghyuj
Obtained SAMLResponse from OneLogin to be used at AWS
Available AWS Roles
-----------------------------------------------------------------------
0 | Administrator (Account 1234567890) **
1 | ssm_sumologic-demo (Account 1234567890) *
2 | Administrator (Account 0987654321) *
-----------------------------------------------------------------------
option 0 selected, AWS Role: arn:aws:iam::1234567890:role/Administrator,arn:aws:iam::1234567890:saml-provider/onelogin-pentio
Success!
Temporary AWS Credentials Granted via OneLogin
Updated AWS profile 'default' located at /root/.aws/credentials
Executed a total of 1 iterations
上記操作によりエラーが発生しなければ正常にAWS Credentialsの取得が完了しています。
上記のコマンドの実行後に、aws s3 ls
を実行します。
% aws s3 ls
2020-04-14 16:21:55 adcs-certificates-ca
2020-12-02 11:06:41 onelogin-meraki-api-scripts
2020-03-25 15:22:58 amazonlambda
2021-01-28 18:35:36 aws-sam-cli-managed-default-samclisourcebucket-fzibnfzxonxz
2020-03-25 15:23:24 awsverification
2020-08-26 17:04:18 pentio-acm-ca
2019-12-17 09:25:05 pentio-guardduty-save
2021-04-28 15:30:20 pentio-log
2020-04-13 11:59:08 pentio-serverless-application-repository
AWS Credentialsが取得できていることが確認できました。