1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Python(Django) x AWS 一人アドベントカレンダーAdvent Calendar 2024

Day 9

【AWS】ワイルドカードを活用して、ARN変更によってIAMロール更新が発生しないようにする

Posted at

概要

CloudWatchEventsがAWS Batchのジョブを発行するためにIAMロールを作成しました。
ただし、書き方によってはAWS Batchのジョブ定義を変更するたびにIAMロールも更新されてしまい面倒だったので、ワイルドカードを活用して影響範囲を限定する方法を紹介します。

IAMロールへの影響

以下Cloudformationが、(別で定義済みの)BatchJobDefinitionBatchJobQueueのジョブをサブミットする権限を与えるIAMロール。最初、私は以下で良いのだと思っていました。

  CloudWatchEventsRoleForBatch:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Version: '2012-10-17'
          Statement:
            - 
              Effect: Allow
              Principal:
                Service:
                  - events.amazonaws.com
              Action: 'sts:AssumeRole'
        Path: "/"
        RoleName: CloudWatchEventsRoleForBatch
        Policies:
          - PolicyName: DeleteBatchJobSubmitPolicy
            PolicyDocument:
              Version: '2012-10-17'
              Statement:
                - Effect: Allow
                  Action: 'batch:SubmitJob'
                  Resource: 
                    - !Sub ${BatchJobDefinition}
                    - !Sub ${BatchJobQueue}

  BatchJobDefinition:
    Type: 'AWS::Batch::JobDefinition'
    Properties:
    ## 省略 ##

  BatchJobQueue:
    Type: 'AWS::Batch::JobQueue'
    Properties:   
    ## 省略 ##

ただし、上記だとBatchJobDefinitionBatchJobQueueが変更されるたびにIAMロールにも影響がある書き方です。

例えば、BatchJobDefinitionの中身を少し変えるとバージョン番号が変わりますが、リソースのARNが変更されてしまうのでその時にIAMロールも更新されます。IAMユーザーの権限次第でIAMロールを更新できない、ということもありますので、依存関係にあるのを修正します。

ワイルドカードを利用する

修正内容は以下。

  CloudWatchEventsRoleForBatch:
      Type: AWS::IAM::Role
      Properties:
        AssumeRolePolicyDocument:
          Version: '2012-10-17'
          Statement:
            - 
              Effect: Allow
              Principal:
                Service:
                  - events.amazonaws.com
              Action: 'sts:AssumeRole'
        Path: "/"
        RoleName: CloudWatchEventsRoleForBatch
        Policies:
          - PolicyName: DeleteBatchJobSubmitPolicy
            PolicyDocument:
              Version: '2012-10-17'
              Statement:
                - Effect: Allow
                  Action: 'batch:SubmitJob'
                  Resource: 
                    - !Sub arn:aws:batch:${AWS::Region}:${AWS::AccountId}:job-definition/*
                    - !Sub arn:aws:batch:${AWS::Region}:${AWS::AccountId}:job-queue/*

上記のようにワイルドカードを活用します。
これにより、特定のパターンに一致するすべてのリソースに対してアクセス権限を付与することができ、かつ、ジョブ定義側の変更だけではIAMロールに影響を与えないようにできました。

1
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?