🐄

[CFn]ひっそり追加されていた3リソースタイプAWS::IAM::GroupPolicy/RolePolicy/UserPolicy

2023/08/18に公開

3リソースタイプが追加。

CloudFormationのUserGuideの「Release history」を眺めていた所、表題の3リソースタイプが2023年7月20日に「New Resouces」として発表されている事に気が付きました。

「前からなかったっけ?」と思わせるネーミングだった為、存在を正しく理解する為にドキュメントを流し見てみました。

改めてAWS::IAMのリソースタイプリファレンス一覧

今回新登場したという
・AWS::IAM::GroupPolicy
・AWS::IAM::RolePolicy
・AWS::IAM::UserPolicy

の他に馴染みのある
・AWS::IAM::Group
・AWS::IAM::Role
・AWS::IAM::User

も従来通り存在します。
新しく追加登場になった物という事は再確認出来ました。

それぞれドキュメントの説明を読んでみます


元ドキュメント



元ドキュメント



元ドキュメント

説明を見る限り Gloup、Role、Userそれぞれに対して追加出来る「インラインポリシー」を作成するもののようです。

今までインラインポリシーはCloudFormationで作成出来なかったっけ

例としてAWS::IAM::Groupのプロパティを眺めてみます。

上記のようにちゃんとインラインポリシーを作成しグループにアタッチする事は出来たようです。

確認の意味で再度手を動かしてみます。

従来からあったAWS::IAM::GroupのPolicies:プロパティを使ったテンプレ

中身はS3のフルアクセスと同じですがManagedpolicyをアタッチするのではなく、上記プロパティを利用してインラインポリシーとして作成してみます。

test_0.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
  TestGroup:
    Type: AWS::IAM::Group
    Properties: 
      GroupName: test-group
      Policies: 
        - PolicyDocument: 
            Version: '2012-10-17'
            Statement:
              - Effect: Allow
                Action:
                  - 's3:*'
                  - 's3-object-lambda:*'
                Resource: '*'
          PolicyName: test-policy


【結果】

きちんと「カスタマーインライン」として許可が追加されています。
ここまでは記憶している通りで、これが廃止になったり変更になったりした訳ではなさそうです。

新しく登場したAWS::IAM::GroupPolicyを利用したテンプレ

テスト1

まずはこれを試してみます。

test_1.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
  TestGroupPolicy:
    Type: AWS::IAM::GroupPolicy
    Properties: 
      GroupName: test-group-2
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action:
              - 's3:*'
              - 's3-object-lambda:*'
            Resource: '*'
      PolicyName: test-policy-2

失敗するような気がしています。
(これが成立するとManagedpolicyが設定出来ないだけのAWS::IAM::Groupの劣化版なので。)

【結果】

案の定失敗しました。
「"test-group-2"というグループはありません。」との事です。

このリソースタイプ単独でGroupを作成する能力はありませんでした。

テスト2

テスト1の結果を受けて、今度は以下のようにしてみます。

GroupだけAWS::IAM::Groupで作成し、インラインポリシーだけAWS::IAM::GroupPolicyで外出しして作成+参照させます。

test_2.yml
AWSTemplateFormatVersion: 2010-09-09
Resources:
  TestGroup2:
    Type: AWS::IAM::Group
    Properties: 
      GroupName: test-group-2

  TestGroupPolicy:
    Type: AWS::IAM::GroupPolicy
    Properties: 
      GroupName: !Ref TestGroup2
      PolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Action:
              - 's3:*'
              - 's3-object-lambda:*'
            Resource: '*'
      PolicyName: test-policy-2


【結果】

今度は先程と同じ状態を作る事が出来ました。

結果から得た理解

要は上記テスト2のような使い方をするメリット自体がある訳ではなく、従来通りAWS::IAM::Groupを使って作成するでも同じという事ですが、

今回の各リソースタイプが登場した事で、既存のグループ、ロール、ユーザーリソースがテンプレート外に存在する場合などでも「名前」を指定する事で「作成したインラインポリシーを追加+紐付けする」事を可能にした。

という理解で良さそうです。

ロールとユーザーについてあえて追加確認していませんがこちらも同様の意図と見て間違いないのではと思われます。

以上でした

ネーミングに深い意図が存在するかを掴めていないではありますが、

一度リリースされたリソースタイプ名が変更になる事は考えにくい為、
可能であれば一読しただけで用途が明確にわかる名付けになっている事を願っているのはユーザーの総意ではないかと思います。

AWSもリソースや項目が日増しに増えている為、将来を見越してイメージが重複する可能性を考慮をした名付けをしていただく事をユーザーとして期待しています。

お読みいただき有難うございました。

Discussion