例えばこんな感じにユーザ自身しかパスワード変更させないようにする場合を考えてみます。
Type: "AWS::IAM::ManagedPolicy"
Properties:
ManagedPolicyName: IAMChangePassword
Description: "パスワード変更"
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: Allow
Action:
- iam:ChangePassword
Resource: !Sub arn:aws:iam::${AWS::AccountId}:user/${aws:username}
このままCloudFormationで実行しようとすると、テンプレートの検証エラーが出てしまいます。
Template format error: Unresolved resource dependencies [aws:username] in the Resources block of the template
どうすればよいのかはStackOverFlowに書いてありました。
${!}
を使って、以下のようにやるとうまくいきました。
Type: "AWS::IAM::ManagedPolicy"
Properties:
ManagedPolicyName: IAMChangePassword
Description: "パスワード変更"
PolicyDocument:
Version: "2012-10-17"
Statement:
-
Effect: Allow
Action:
- iam:ChangePassword
Resource: !Sub arn:aws:iam::${AWS::AccountId}:user/${!aws:username}