LoginSignup
2
0

AWS CloudFormation で関連付けの無いIAMポリシーを作成したい

Last updated at Posted at 2024-02-06

概要

AWS CloudFormation でIAM Role等に関連付けないIAMポリシーを作成しようとした際、
エラーになったため、その原因と解決策を備忘として残します。

やろうとしたこと

以下CloudFormationを実行しようとしたところ

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  RoleName:
    Type: String
    Default: "hoge-role"
Resources:
  AssumerolePolicy:
    Type: AWS::IAM::Policy
    Properties:
      PolicyName: "hoge-policy"
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - "sts:AssumeRole"
            Resource:
              - !Sub "arn:aws:iam::${AWS::AccountId}:role/${RoleName}"

こんなエラー

そもそも cfn-lint でエラー

[cfn-lint] E2522: At least one of [Roles, Groups, Users] should be specified for Resources/AssumerolePolicy/Properties

Roles, Groups, Users を指定しろとのエラー
→ あれ、でもマネコンからだと関連付け無しのIAMポリシー作れるよね・・・?

実際に変更セットを流してみてもやはりエラー

At least one of [Group, Roles, Users] must be non-empty.

原因

そもそも AWS::IAM::Policyインラインポリシー を作成するものなので、
関連付け無しのポリシーは作成不可
※ インラインポリシー: マネコン的に言うと各IAM Roleとかの中で直接書いているポリシー

マネコンの ポリシーの作成 で作っているものは
これ (AWS::IAM::Policy)
ではなく
こっち (AWS::IAM::ManagedPolicy)

解決策

AWS::IAM::ManagedPolicy を使おう。

AWSTemplateFormatVersion: '2010-09-09'
Parameters:
  RoleName:
    Type: String
    Default: "hoge-role"
Resources:
  AssumerolePolicy:
    Type: AWS::IAM::ManagedPolicy  # こっち!!
    Properties:
      ManagedPolicyName: "hoge-policy"  # PolicyName から ManagedPolicyName に昇格?しました
      PolicyDocument:
        Version: "2012-10-17"
        Statement:
          - Effect: Allow
            Action:
              - "sts:AssumeRole"
            Resource:
              - !Sub "arn:${AWS::Partition}:iam::${AWS::AccountId}:role/${RoleName}"
              # ちなみに ↓ だと cfn-lint に怒られる
              # !Sub "arn:aws:iam::${AWS::AccountId}:role/${RoleName}"
              # 
              # [cfn-lint] I3042: ARN in Resource AssumerolePolicy contains hardcoded Partition in ARN or incorrectly placed Pseudo Parameters
              # 意訳: べた書きしとるけど "aws" 以外も存在するんじゃおら!!

まとめ

AWS::IAM::Policy ではなく AWS::IAM::ManagedPolicy でしたー m9(^Д^)プギャー

AWS::IAM::Policy この名前だけでインラインポリシーだとは思わないですよね奥さん。
ManagedPolicy なんて言うぐらいなので天下のAWSさんが管理なされているポリシーだと思うじゃないですか。
わたくしめが ManagedPolicy なんて恐れ多いものを作ってしまってもよろしいのでしょうか。(バンバン作っちゃってますが)

結論

まぎらわしい

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0