👏
[Bash]連想配列と配列で2次元配列のループ処理を作り、複数のIAMグループ(+複数ポリシー付与)作成する
複数のIAMグループを作るスクリプトを作りたい
IAMグループを複数作成するスクリプトを作成したので備忘録として残します。
検討
シェル作成にあたり検討したこと
- IAMグループは
AWS cli
のaws iam create-group
コマンドで作成 - IAMグループに付与する許可ポリシーは、
aws iam attach-group-policy
コマンドを使用 -
attach-group-policy
のドキュメントをみると1度の実行で付与できるポリシーは1つっぽい(←あってる?) - 複数のポリシーを付与できるように処理を工夫する必要あり
- 工夫どうするか→多次元の配列を作りループ処理すればできそう
- 多次元のループ処理は、連想配列と配列を組み合わせれば実装できそう
連想配列と配列を組み合わせたシェルスクリプトサンプル
まずは、連想配列と配列を組み合わせ疑似的に2次元配列のループを行うスクリプトのサンプルを作成しました。
シェルスクリプトサンプル
zigen.bash
#!/bin/bash
set -eu
declare -A rt00=(
["rt00-1"]="
hoge-01
hoge-02
hoge-03
"
["rt00-2"]="
fuga-11
fuga-12
fuga-13
fuga-14
"
["rt00-3"]="
piyo-21
piyo-22
piyo-23
piyo-24
"
)
for rt in "${!rt00[@]}"; do
echo "${rt}"
nxt=(`echo ${rt00[${rt}]}`)
for v in "${nxt[@]}"; do
echo $'\t'${v}
done
done
実行結果
実行結果
[cloudshell-user@ip-10-10-178-186 ~]$ bash zigen.bash
rt00-1
hoge-01
hoge-02
hoge-03
rt00-3
piyo-21
piyo-22
piyo-23
piyo-24
rt00-2
fuga-11
fuga-12
fuga-13
fuga-14
[cloudshell-user@ip-10-10-178-186 ~]$
シェルスクリプトでIAMグループを複数作成する
さきほど紹介した"連想配列と配列を組み合わせたシェルスクリプトサンプル"を元に、IAMグループとIAMグループに許可ポリシー
を付与するシェルスクリプトを作成します。
シェルスクリプト
#!/bin/bash
set -eu
AWSID=123456789012
declare -A iam_groups=(
["MyIamGroup001"]="
arn:aws:iam::${AWSID}:policy/service-role/AWSQuickSightIAMPolicy
arn:aws:iam::${AWSID}:policy/ExecPolicy
arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess
"
["MyIamGroup002"]="
arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
arn:aws:iam::aws:policy/job-function/Billing
arn:aws:iam::aws:policy/service-role/AWS_ConfigRole
"
["MyIamGroup003"]="
arn:aws:iam::aws:policy/job-function/SupportUser
arn:aws:iam::${AWSID}:policy/service-role/AWSQuickSightRedshiftPolicy
"
)
for group_name in "${!iam_groups[@]}"; do
echo "IAMGroup-Name:${group_name}"
aws iam create-group --group-name ${group_name}
iam_policys=(`echo ${iam_groups[${group_name}]}`)
for iam_policy in "${iam_policys[@]}"; do
echo $'\t'attached policy ${iam_policy}
aws iam attach-group-policy --group-name ${group_name} --policy-arn ${iam_policy}
done
done
実行結果
[cloudshell-user@ip-10-10-178-186 ~]$ ./create-iamgroups.bash
IAMGroup-Name:MyIamGroup002
{
"Group": {
"Path": "/",
"GroupName": "MyIamGroup002",
"GroupId": "USOANAYYVS2BMXJWQGDXCMK",
"Arn": "arn:aws:iam::123456789012:group/MyIamGroup002",
"CreateDate": "2022-12-30T22:27:06+00:00"
}
}
attached policy arn:aws:iam::aws:policy/AmazonEKSClusterPolicy
attached policy arn:aws:iam::aws:policy/job-function/Billing
attached policy arn:aws:iam::aws:policy/service-role/AWS_ConfigRole
IAMGroup-Name:MyIamGroup003
{
"Group": {
"Path": "/",
"GroupName": "MyIamGroup003",
"GroupId": "USOANAYYVS2BMXKEHKEN3KX",
"Arn": "arn:aws:iam::123456789012:group/MyIamGroup003",
"CreateDate": "2022-12-30T22:27:11+00:00"
}
}
attached policy arn:aws:iam::aws:policy/job-function/SupportUser
attached policy arn:aws:iam::123456789012:policy/service-role/AWSQuickSightRedshiftPolicy
IAMGroup-Name:MyIamGroup001
{
"Group": {
"Path": "/",
"GroupName": "MyIamGroup001",
"GroupId": "USOANAYYVS2BMXKFNG5KV3X",
"Arn": "arn:aws:iam::123456789012:group/MyIamGroup001",
"CreateDate": "2022-12-30T22:27:15+00:00"
}
}
attached policy arn:aws:iam::123456789012:policy/service-role/AWSQuickSightIAMPolicy
attached policy arn:aws:iam::123456789012:policy/ExecPolicy
attached policy arn:aws:iam::aws:policy/AWSDirectConnectReadOnlyAccess
[cloudshell-user@ip-10-10-178-186 ~]$
実行後、IAMグループが作成されたかコンソールからも確認します
- IAMグループが作成されていました。
-
MyIamGroup1
の許可ポリシー
-
MyIamGroup2
の許可ポリシー
-
MyIamGroup3
の許可ポリシー
以上です。
連想配列と配列をもっと組み合わせると3次元以上の配列を作ったり、3次元以上の多層ループもできそうな気がします。気が向いたら挑戦しようと思います。
Discussion