処理の実行
「IAMポリシー名配列のポリシーが存在する。」ことを確認します。
コマンド:
for i in $(echo "${ARRAY_IAM_POLICY_NAMES}");do
aws iam list-policies \
--max-items 1000 \
--query "Policies[?PolicyName==\`${i}\`].PolicyName" \
--output text
done
結果(例):
IAMポリシーのARNを取得します。
変数の設定:
ARRAY_IAM_POLICY_ARNS=$(
echo $( \
for i in $(echo "${ARRAY_IAM_POLICY_NAMES}");do
aws iam list-policies \
--max-items 1000 \
--query "Policies[?PolicyName==\`${i}\`].Arn" \
--output text
done \
) \
) \
&& echo "${ARRAY_IAM_POLICY_ARNS}"
結果(例)
arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
CFnリソースファイルを更新します。
コマンド:
if [ ! $( grep 'ManagedPolicyArns:' ${FILE_TEMPLATE_CFN_RESOURCE}) ];then
cat << EOF >> ${FILE_TEMPLATE_CFN_RESOURCE}
ManagedPolicyArns:
EOF
fi
変数の確認:
cat << END
# ARRAY_IAM_POLICY_ARNS:"arn:aws:iam::aws:policy/CloudWatchLogsFullAccess"
ARRAY_IAM_POLICY_ARNS="${ARRAY_IAM_POLICY_ARNS}"
END
コマンド:
for i in $(echo ${ARRAY_IAM_POLICY_ARNS});do
echo " - ${i}" >> ${FILE_TEMPLATE_CFN_RESOURCE}
done
cat ${FILE_TEMPLATE_CFN_RESOURCE}
結果(例):
Role0:
Type: AWS::IAM::Role
Properties:
Path: /handson-cli/
RoleName: !Join
- ''
- - !Ref AWS::StackName
- '-role'
AssumeRolePolicyDocument:
Version: 2012-10-17
Statement:
- Effect: Allow
Principal:
Service:
- lambda.amazonaws.com
Action:
- sts:AssumeRole
ManagedPolicyArns:
- arn:aws:iam::aws:policy/CloudWatchLogsFullAccess
完了確認
「リソースファイル"${HOME}/environment/conf-handson-cli-cfn-lambda-Function/resources/Role0.txt"にIAMポリシーARNの記述が存在する。」ことを確認します。
コマンド:
count=$( echo ${ARRAY_IAM_POLICY_NAMES} | wc -w )
cat ${FILE_TEMPLATE_CFN_RESOURCE} \
| grep -v ' !Ref ' \
| grep 'ManagedPolicyArns:' -A ${count} \
| while read i; do
for j in $(echo "${ARRAY_IAM_POLICY_ARNS}");do
echo ${i} | grep " ${j}"$
done
done
結果(例):
- arn:aws:iam::aws:policy/CloudWatchLogsFullAccess