処理の実行
ポリシープロパティの宣言
CFnリソースファイルにポリシープロパティの宣言を追加します。
変数の確認:
cat << END
# FILE_TEMPLATE_CFN_RESOURCE:"${HOME}/environment/conf-handson-cli-cfn-iam-User/resources/User0.txt"
FILE_TEMPLATE_CFN_RESOURCE="${FILE_TEMPLATE_CFN_RESOURCE}"
END
コマンド:
if [ ! $( grep 'Properties:' ${FILE_TEMPLATE_CFN_RESOURCE}) ];then
cat << EOF >> ${FILE_TEMPLATE_CFN_RESOURCE}
Properties:
EOF
fi
if [ ! $( grep 'Policies:' ${FILE_TEMPLATE_CFN_RESOURCE}) ];then
cat << EOF >> ${FILE_TEMPLATE_CFN_RESOURCE}
Policies:
EOF
fi
ポリシーの記述
CFnリソースファイルにポリシーの宣言を追加します。
変数の確認:
cat << END
# TEMPLATE_CFN_RESOURCE_NAME_IAM_USER_POLICY:"InlinePolicy"
TEMPLATE_CFN_RESOURCE_NAME_IAM_USER_POLICY="${TEMPLATE_CFN_RESOURCE_NAME_IAM_USER_POLICY}"
END
コマンド:
cat << EOF >> ${FILE_TEMPLATE_CFN_RESOURCE}
- PolicyName: ${TEMPLATE_CFN_RESOURCE_NAME_IAM_USER_POLICY}
PolicyDocument:
EOF
ポリシードキュメント部分を追記します。
変数の確認:
cat << END
# FILE_IAM_POLICY_DOC:"${HOME}/environment/conf-handson-cli-cfn-iam-User/handson-cli-cfn-iam-User-policy.json"
FILE_IAM_POLICY_DOC="${FILE_IAM_POLICY_DOC}"
END
コマンド:
cat ${FILE_IAM_POLICY_DOC} \
| python -c \
"import yaml; import json; import sys; \
print(yaml.dump(json.load(sys.stdin)))\
" \
| sed '/^$/d' \
| sed "s/^/ /" \
>> ${FILE_TEMPLATE_CFN_RESOURCE}
cat ${FILE_TEMPLATE_CFN_RESOURCE}
結果(例):
User0:
Type: AWS::IAM::User
Properties:
LoginProfile:
Password: "#userPass123"
ManagedPolicyArns:
- !Ref ManagedPolicy0
- arn:aws:iam::aws:policy/ReadOnlyAccess
- arn:aws:iam::aws:policy/AWSCloudFormationFullAccess
- arn:aws:iam::216399753842:policy/handson-cloud9/handson-Cloud9EnvironmentOwner-policy
Policies:
- PolicyName: InlinePolicy
PolicyDocument:
Statement:
- Action:
- iam:ListUsers
Effect: Allow
Resource: '*'
Sid: Stmt1627433278189
Version: '2012-10-17'
完了確認
「リソースファイル"${HOME}/environment/conf-handson-cli-cfn-iam-User/resources/User0.txt"に'Policies'プロパティが存在する。」ことを確認します。
コマンド:
count=$( \
expr $( \
cat ${FILE_IAM_POLICY_DOC} \
| python -c \
"import yaml; import json; import sys; \
print(yaml.dump(json.load(sys.stdin)))\
" \
| wc -l \
) + 2 \
)
cat ${FILE_TEMPLATE_CFN_RESOURCE} \
| grep -v ' arn:aws:iam::' \
| grep 'Policies:' -A ${count}
結果(例):
Policies:
- PolicyName: InlinePolicy
PolicyDocument:
Statement:
- Action:
- iam:ListUsers
Effect: Allow
Resource: '*'
Sid: Stmt1627433278189
Version: '2012-10-17'