今回はIAMグループをCFnで作成することがあったので備忘までに残しておきます。
作成物は以下に置いています。
github.com
実施作業
yamlファイル作成
公式ドキュメントを参考にyamlファイルを作成します。
AWS::IAM::Group - AWS CloudFormation
ファイル内容は以下です。
今回はAdministratorAccessの管理ポリシーをグループにアタッチします。
AWSTemplateFormatVersion: "2010-09-09"
Resources:
IAMGroup:
Type: AWS::IAM::Group
Properties:
GroupName: TestIAMGroup
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
デプロイバッチ作成
毎回コマンドを打つの手間なので、デプロイ用のバッチを作成しておきます。
Param(
[parameter(mandatory=$true)][String]$cmd_type, # コマンド種別(create,update,delete)
[parameter(mandatory=$true)][String]$account_id, # アカウントID
[parameter(mandatory=$true)][String]$file_name, # ファイル名(拡張子無し)
[parameter(mandatory=$true)][String]$profile_name # プロファイル名
)
# yamlファイル存在確認
$yml_file = $file_name + ".yaml"
if(-not (Test-Path $yml_file)){
print("yamlファイルが存在しません")
exit 1
}
# awsアカウントID設定
$aws_account_id = $account_id
# Cloudformatino実行ロール設定
$role_name = "CloudformationExecuteRole"
# 実行コマンド設定
$exe_cmd = $cmd_type + "-stack"
# Stack名設定
$stack_name = $file_name
# role設定
$role_arn = "arn:aws:iam::" + $aws_account_id + ":role/" + $role_name
# コマンド作成
if(($cmd_type -eq "create") -Or ($cmd_type -eq "update")){
$cmd = "aws cloudformation " + $exe_cmd + " --template-body file://" + $yml_file + " --role-arn " + $role_arn + " --capabilities CAPABILITY_NAMED_IAM " + " --profile " + $profile_name + " --stack-name " + $stack_name
}
if($cmd_type -eq "delete"){
$cmd = "aws cloudformation " + $exe_cmd + " --profile " + $profile_name + " --stack-name " + $stack_name
}
if($cmd_type -eq ""){
print("コマンド種別が間違っています")
exit 1
}
# 実行コマンド出力
Write-Output($cmd)
# コマンド実行
Invoke-Expression $cmd
# 実行結果値出力
Write-Output($?)
デプロイ実行
作成したデプロイバッチを実行します。
yamlファイルはバッチを同階層に格納しています。
$ .\deplay_cfn.ps1 create XXXXXXXXXXXX iam-cfn default
aws cloudformation create-stack --template-body file://iam-cfn.yaml --role-arn arn:aws:iam::XXXXXXXXXXXX:role/CloudformationExecuteRole --capabilities CAPABILITY_NAMED_IAM --profile default --stack-name iam-cfn
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXX:stack/iam-cfn/3ec67e00-4fdb-11eb-9447-0a4c2e79e972"
}
True
実行結果確認
スタックのリストコマンドを実行して正常終了したことを確認します。
$ aws cloudformation list-stacks
{
"StackSummaries": [
{
"StackId": "arn:aws:cloudformation:ap-northeast-1:XXXXXXXXXXXX:stack/iam-cfn/3ec67e00-4fdb-11eb-9447-0a4c2e79e972",
"StackName": "iam-cfn",
"CreationTime": "2021-01-06T04:54:23.558000+00:00",
"StackStatus": "CREATE_COMPLETE",
"DriftInformation": {
"StackDriftStatus": "NOT_CHECKED"
}
},
IAMグループ作成確認
以下のコマンドでIAMグループが作成されていることを確認します。
$ aws iam get-group --group-name TestIAMGroup
{
"Users": [],
"Group": {
"Path": "/",
"GroupName": "TestIAMGroup",
"GroupId": "AGPA5WU3AW5J2CVZOLUZE",
"Arn": "arn:aws:iam::XXXXXXXXXXXX:group/TestIAMGroup",
"CreateDate": "2021-01-06T04:54:28+00:00"
}
}IAMグループにはAdministratorAccessポリシーがアタッチされています。
$ aws iam list-attached-group-policies --group-name TestIAMGroup
{
"AttachedPolicies": [
{
"PolicyName": "AdministratorAccess",
"PolicyArn": "arn:aws:iam::aws:policy/AdministratorAccess"
}
]
}
感想及び所感
いつもはコンソールを使用することが多いですが、今回は敢えてコマンドベースで操作してみました。
AWSのマネジメントコンソールはUIが変わりすぎてキャプチャしても意味なくなるので、基本コマンドで残したくなります。
※コマンド多いので覚えるのも大変ですが。。