AWSアカウント発行時にまずやるべきことはIAM周りの設定になると思います。
特にAWSアカウントを複数所持している場合、アカウント毎にIAMユーザ/ロール作ったりするのは面倒くさいですよね。
そんな貴方にオススメしたいのがCloudFormation化です。
CFnテンプレート化することで、面倒な手作業を一切無くし、コード管理することができます。
また、コード化することにより、そのテンプレートがパラメータシート代わりにもなるので、管理コストも軽減できます。
本記事では、個人利用者向けの一般的なIAM設定を行うCFnテンプレートを公開します。
記事の概要
目的
- AWSアカウント発行時のIAM周りの設定を行うCFnテンプレートを作成する
- 作成リソース
- IAMグループ
- IAMユーザ
- 作成リソース
前提条件
- IaC化にあたり、CloudFormationテンプレートを利用する
- ターゲットはAWSの個人利用者向けとする
- パラメータ等は環境に応じて適時変更すること
- 本記事を記載するにあたって、基礎的なAWSの知識・知見は持ち合わせているものとする
CloudFormationテンプレート
IAM設計
- 設計方針
- 利用用途に応じた権限を持つIAMグループ/ユーザを作成する
- AWSアカウント発行時のIAMの初回セットアップを想定した構成とする
CFnテンプレート
AWSTemplateFormatVersion: "2010-09-09"
Description: "Create a CFn Template IAM Settings By chibiharu"
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Metadate
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Metadata:
AWS::CloudFormation::Interface:
ParameterGroups:
- Parameters:
- AdminUserGroupName
- PowerUserGroupName
- ReadOnlyUserGroupName
- AdminUserName
- PowerUserName
- ReadOnlyUserName
- InitPasswd
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Input Parameters
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Parameters:
### IAM Group ###
AdminUserGroupName:
Type: String
Default: CFn-Sample-AdminUserGroup
Description: IAM-Group To AdminUserGroup
PowerUserGroupName:
Type: String
Default: CFn-Sample-PowerUserGroup
Description: IAM-Group To PowerUserGroup
ReadOnlyUserGroupName:
Type: String
Default: CFn-Sample-ReadOnlyUserGroup
Description: IAM-Group To ReadOnlyUserGroup
### IAM User ###
AdminUserName:
Type: String
Default: CFn-Sample-AdminUser
Description: IAM-User To AdminUser
PowerUserName:
Type: String
Default: CFn-Sample-PowerUser
Description: IAM-User To PowerUser
ReadOnlyUserName:
Type: String
Default: CFn-Sample-ReadOnlyUser
Description: IAM-User To ReadOnlyUser
### Other ###
InitPasswd:
Type: String
Description: Init Password
NoEcho: True
## パスワードは、最低でも次の要件を満たす必要があります
# ・1つ以上の「大文字アルファベット (A–Z)」「小文字アルファベット (a–z)」「数字」「記号」
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Resources
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Resources:
# ------------------------------------------------------------
# IAM Group
# ------------------------------------------------------------
AdminUserGroup:
Type: AWS::IAM::Group
Properties:
GroupName: !Ref AdminUserGroupName
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
PowerUserGroup:
Type: AWS::IAM::Group
Properties:
GroupName: !Ref PowerUserGroupName
ManagedPolicyArns:
- arn:aws:iam::aws:policy/PowerUserAccess
ReadOnlyUserGroup:
Type: AWS::IAM::Group
Properties:
GroupName: !Ref ReadOnlyUserGroupName
ManagedPolicyArns:
- arn:aws:iam::aws:policy/ReadOnlyAccess
# ------------------------------------------------------------
# IAM User
# ------------------------------------------------------------
AdminUser:
Type: AWS::IAM::User
Properties:
UserName: !Ref AdminUserName
Groups:
- !Ref AdminUserGroupName
LoginProfile:
Password: !Ref InitPasswd
PasswordResetRequired: true
PowerUser:
Type: AWS::IAM::User
Properties:
UserName: !Ref PowerUserName
Groups:
- !Ref PowerUserGroupName
LoginProfile:
Password: !Ref InitPasswd
PasswordResetRequired: true
ReadOnlyUser:
Type: AWS::IAM::User
Properties:
UserName: !Ref ReadOnlyUserName
Groups:
- !Ref ReadOnlyUserGroupName
LoginProfile:
Password: !Ref InitPasswd
PasswordResetRequired: true
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
# Output Parameter
# ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Outputs:
AdominUserOutput:
Description: IAM-User To AdminUser
Value: !Ref AdminUserName
PowerUserGroupOutput:
Description: IAM-User To PowerUser
Value: !Ref PowerUserName
ReadOnlyUserOutput:
Description: IAM-User To ReadOnlyUser
Value: !Ref ReadOnlyUserName
LoginURL:
Description: AWSLoginURL
Value: !Join ["", ["https://", !Ref AWS::AccountId, ".signin.aws.amazon.com/console"]]
参考記事
- はじめてのAWS CloudFormation -IAMユーザー作成編-
https://qiita.com/Mouflon_127000/items/97e1e4b10a18871d8609 - CloudformationでIAM Roleを作成する際のDescriptionにはpattern制約がある
https://zenn.dev/kenpi/articles/d6d64d547e5146
コメント