本記事は「Opt Technologies Advent Calendar 2019」4日目の記事である。
1. 概要および制限事項
本記事ではAWSに対してOneLoginで認証する手順
については記載しない。
OneLoginを利用してあるAWSアカウントにログインしたユーザがSwitch Roleで別のAWSアカウントに切り替えられる設定
およびOneLoginの認証情報をもとにSwitchRole可能なアカウントを制限する設定について記載する。
またAWSコンソールの利用のみ対象
とし、IAMロールに紐づく一時アクセスキーの取得は対象外とする。
今回の手順では一部にAWS CLIを使用する。
$ aws --version
aws-cli/1.16.195 Python/2.7.16 Darwin/19.0.0 botocore/1.12.185
2. 手順内容
手順はおおよそ以下となる。
- マスターアカウントにSAMLとIAMロールを設定
- OneLoginにAWS用のコネクタを作成
- メンバーアカウントにSwitchRoleのためのIAMロールを作成
- ユーザにURLを共有
2-1. 構成
上図のようにユーザはOneLoginでマスターアカウントにログインする。
各プロダクトが稼働するメンバーアカウントはSwitchRoleして利用することを考えた。
2-2. OneLoginでマスターアカウントにログインする
参考資料をもとに設定をおこなう。
参考資料に加えて必要な手順として、今回の構成においてユーザにはメンバーアカウントへのSwitchRoleをさせるため
マスターアカウントに作成するIAMロールにはその権限を付与する。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "sts:AssumeRole",
"Resource": "*"
}
]
}
2-3. メンバーアカウントにSwitch Role用のIAMロールを作成
メンバーアカウントにてIAMロール作成する。以下はCloudFormationで作成するさいのサンプル。
AWSTemplateFormatVersion: 2010-09-09
Parameters:
MasterAccountId:
Type: String
Resources:
IAMRole:
Type: 'AWS::IAM::Role'
Properties:
RoleName: 'PowerUserRole'
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action: 'sts:AssumeRole'
Effect: 'Allow'
Principal:
AWS: !Sub 'arn:aws:iam::${MasterAccountId}:root'
Sid: ''
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/PowerUserAccess'
AssumeRolePolicyDocumentにarn:aws:iam::(マスターアカウントのID):root
を設定することで、マスターアカウントからのSwitchRoleだけ許可する。
AWS CLIでは以下のようにデプロイする。
注意:メンバーアカウントに対してデプロイするよう注意すること
masterAccountId=hoge
productAccountProfile=huga
aws cloudformation deploy \
--template-file sample.yaml \
--stack-name switchrole-from-onelogin \
--parameter-overrides MasterAccountId=${masterAccountId} \
--capabilities CAPABILITY_NAMED_IAM \
--profile ${productAccountProfile}
2-4. 限られたユーザのSwitchRole
上記のIAMロールの設定ではマスターアカウントにログインしたユーザは全員SwitchRole可能となっている。
Administratorなど限られたユーザにのみSwitchRoleを許可したい場合、以下のように設定する。
AWSTemplateFormatVersion: 2010-09-09
Parameters:
MasterAccountId:
Type: String
MasterAccountRoleName:
Type: String
Resources:
IAMRole:
Type: 'AWS::IAM::Role'
Properties:
RoleName: 'PowerUserRole'
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Action: 'sts:AssumeRole'
Effect: Allow
Principal:
AWS:
- !Sub 'arn:aws:sts::${MasterAccountId}:assumed-role/${MasterAccountRoleName}/erai@example.com'
- !Sub 'arn:aws:sts::${MasterAccountId}:assumed-role/${MasterAccountRoleName}/kanrisha@example.com'
Sid: ''
ManagedPolicyArns:
- 'arn:aws:iam::aws:policy/PowerUserAccess'
OneLogin経由でマスターアカウントにログインした状態では<IAMロール名>/<メールアドレス>
で認証されているため
AssumeRolePolicyDocumentにarn:aws:sts::(マスターアカウントID):assumed-role/(IAMロール)/(メールアドレス)
となる。
デプロイは手順2-3と共通。
2-5. SwitchRole用のURLを共有
作成したIAMロールをAWSコンソールから確認すると、赤枠のコンソールでロールを切り替えることができるユーザーに、このリンクを知らせます
が表示される。
このURLをユーザに共有する。
ユーザがOneLogin経由でマスターアカウントにログインしている状態で上記リンクを踏むと以下の画面に遷移する。
上記項目を設定するとSwitchRole設定が完了する。
3. 参考
OneLoginを利用してAWSにSAMLでログインする: Serverworks ENGINEER BLOG
http://blog.serverworks.co.jp/tech/2018/06/22/onelogin-aws-saml/