クマ松です。
10個以上のAWSアカウントを持っていて、それぞれにログインするIAMユーザがいる。
AWS起因の障害発生時にEC2の確認をするのにいちいちログインとログアウトを繰り返す。
これでは仕事が嫌になってしまいます。
今回はそんなイライラを解消するべく、管理用アカウントから子アカウントへ簡単にログインできるスイッチロールの設定を行います。
概要
スイッチロールが出来るようになるためには2つのことが必要です。
- IAMユーザがスイッチロールを使う権限を持っている
- スイッチロール側がIAMユーザを信頼している
これを実現する為に、2か所設定変更をします。
№ | 作業場所 | 作業対象 | 作業内容 |
---|---|---|---|
1 | 管理用アカウント | IAMユーザ | Actionsts:AssumeRoleを加える |
2 | 子アカウント | IAMロール | スイッチ用IAMロール作成 |
今回はスイッチ先のAWSアカウントにAdmin権限のロールとReadOnly権限のロールを作ります。
障害対応等でログやメトリクスの状態を確認したい際はReadOnly権限ロールを使い、実作業を行う際はAdmin権限ロールを使う等、用途毎にIAMロールを分けることでオペミスを減らすことが出来ると思います。
作業手順
№ | 作業アカウント | 作業手順 |
---|---|---|
1 | 管理用アカウント | IAMユーザ側にカスタムポリシーをアタッチ |
2 | 子アカウント | IAMロール構築用CFnスタックの作成・実行 |
実作業
管理用アカウントの作業
※ご利用しているIAMユーザに既にAdministratorAccess等の強い権限をアタッチしている場合は、この作業は不要です。
スイッチロールをしたいIAMユーザにsts:AssumeRole権限を付与します。
Resourceには、後工程で作成する予定のIAMロールの名前を設定します。
{
"Version": "2012-10-17",
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Resource": [
"arn:aws:iam::{子アカウントID}:role/kumayuki-prod-Administrator-role",
"arn:aws:iam::{子アカウントID}:role/kumayuki-prod-ReadOnly-role"
]
}
]
}
子アカウントの作業
まずは子アカウントにログインしてIAMロールを作成します。
今回はCloudFormationを使って構築します。
CloudFormation:Parametereセクションの解説
パラメータ名 | 用途 |
---|---|
ProjectName | 作成するIAMロールの名前にProjectNameを入れるために設定 |
CentralAWSAccount | 管理用アカウントID |
AWSTemplateFormatVersion: "2010-09-09"
Description:
IAM Role which will be used by CentralAWSAccount IAM Users
Parameters:
ProjectName:
Description: project name
Type: String
CentralAWSACcount:
Description: Central Management and STG AWS Account ID
Type: String
MaxLength: 12
MinLength: 12
Type: String
CloudFormation:Resourcesセクションの解説
作成するIAMロールは2つですが、それぞれのIAMロールの違いは2か所だけです。
1つ目はManagedPolicyArnsです。
Admin権限を持つIAMロールにはAWS管理ポリシーAdministratorAccessを使います。
ReadOnly権限を持つ方にはReadOnlyAccessを設定します。
2つ目はRoleNameです。
Admin権限かReadOnly権限なのか判別がしやすいような名前にしましょう。
Resources:
# ------------------------------------------------------------#
# IAM Role
# ------------------------------------------------------------#
AdministratorRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub ${ProjectName}-Administrator-role
Path: /
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
AWS:
- !Sub arn:aws:iam::${CentralAWSACcount}:user/#スイッチロールを許可したいIAMユーザ
- !Sub arn:aws:iam::${CentralAWSACcount}:user/#スイッチロールを許可したいIAMユーザ
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
ReadOnlyAccessIAMRole:
Type: AWS::IAM::Role
Properties:
RoleName: !Sub ${ProjectName}-ReadOnly-role
Path: /
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Action: sts:AssumeRole
Principal:
AWS:
- !Sub arn:aws:iam::${CentralAWSACcount}:user/#スイッチロールを許可したいIAMユーザ
- !Sub arn:aws:iam::${CentralAWSACcount}:user/#スイッチロールを許可したいIAMユーザ
ManagedPolicyArns:
- arn:aws:iam::aws:policy/ReadOnlyAccess
作成されたIAMロールの「信頼されたエンティティ」を見てみます。
スイッチロールを許可したい管理用アカウントのIAMユーザが表示されていることがわかります。
動作確認
ではスイッチしてみます。
AWSのコンソール画面の右上のヘッダー部分にある「IAMユーザ@AWSアカウントID▼」をクリックし、「ロールの切り替え」を選択します。
スイッチ先のAWSアカウントIDとロール名を入力します。
表示名の入力は任意ですので、空白でも構いません。
ReadOnly権限にスイッチしましたので、AWSリソースの削除はできません。
ぜひご活用下さい。