AWS DevOps Agent スペースのセカンダリソースの追加に必要な IAM ロールを CloudFormation StackSets で作成してみた

AWS DevOps Agent スペースのセカンダリソースの追加に必要な IAM ロールを CloudFormation StackSets で作成してみた

AWS DevOps Agent でセカンダリアカウントを追加するために必要な IAM ロールを CloudFormation StackSets を使って AWS Organizations 配下に展開する方法を試してみました。
2026.07.23

AWS DevOps Agent で AWS Organizations 配下のアカウントを調査したく、セカンダリソースのアカウントとして組織配下のアカウントを追加するために必要な IAM ロールを CloudFormation StackSets で展開してみました。

aws-devops-agent-secondary-account-iam-role-stackset-1

CloudFormation StackSets で IAM ロールを作成してみた

DevOps Agent スペースを作成した後に、セカンダリソースのアカウントを追加しようとする際に出力される IAM ロールの情報を参考に CloudFormation テンプレートを作成します。現時点では設定しませんが、下記のセカンダリソース追加画面よりロール名に任意の名前を指定できることも分かります。そのため、後述するテンプレートではロール名をパラメータ化して任意の名前を付与できるようにしています。

aws-devops-agent-secondary-account-iam-role-stackset-2

上記の情報を参考にして作成した StackSets で展開する CloudFormation テンプレートの一例です。

AWSTemplateFormatVersion: '2010-09-09'
Description: AWS DevOps Agent IAM Role

Metadata:
  AWS::CloudFormation::Interface:
    ParameterGroups:
      - Label:
          default: DevOpsAgent
        Parameters:
          - AgentSpaceArn
          - PrimaryAccountId
      - Label:
          default: Role
        Parameters:
          - RoleName

Parameters:
  AgentSpaceArn:
    Type: String
    Description: Agent space ARN

  PrimaryAccountId:
    Type: String
    Description: Primary AWS account id
    AllowedPattern: '^\d{12}$'

  RoleName:
    Type: String
    Description: IAM role name

Resources:
  DevOpsAgentSecondaryAccountRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: !Ref RoleName
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: aidevops.amazonaws.com
            Action: sts:AssumeRole
            Condition:
              StringEquals:
                aws:SourceAccount: !Ref PrimaryAccountId
                aws:SourceArn: !Ref AgentSpaceArn
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AIDevOpsAgentAccessPolicy
      Policies:
        - PolicyName: AllowCreateServiceLinkedRoles
          PolicyDocument:
            Version: '2012-10-17'
            Statement:
              - Sid: AllowCreateServiceLinkedRoles
                Effect: Allow
                Action:
                  - iam:CreateServiceLinkedRole
                Resource:
                  - !Sub 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/resource-explorer-2.amazonaws.com/AWSServiceRoleForResourceExplorer'

パラメータとして下記を指定します。

パラメータ名 説明 設定例
AgentSpaceArn DevOps Agent スペースの ARN arn:aws:aidevops:ap-northeast-1:111122223333:agentspace/f1cc5a85-9974-4099-b788-147f6example
PrimaryAccountId DevOps Agent スペースのプライマリソースのアカウント ID 111122223333
RoleName DevOps Agent がクロスアカウントアクセスするために利用する IAM ロールの名前 aws-devops-agent-role

管理アカウントまたは CloudFormation StackSets の委任先アカウントにおいて、[CloudFormation] > [StackSets] > [スタックセットを作成] から StackSets を作成します。
ステップ 2 のパラメータは下記のイメージで指定します。

aws-devops-agent-secondary-account-iam-role-stackset-3

ステップ 4 において、今回は組織全体を対象にデプロイします。また、リージョンの指定は IAM ロールがグローバルリソースであることから、どこか 1 つのリージョンの指定でよいため、東京リージョンを指定します。

aws-devops-agent-secondary-account-iam-role-stackset-4

そのまま進めて StackSets 展開完了後に改めて DevOps Agent スペースを作成したアカウントに戻り、セカンダリソースのアカウントを追加してみます。セカンダリソースとして追加するのは、上記の StackSets で IAM ロールを展開しているアカウントです。

aws-devops-agent-secondary-account-iam-role-stackset-5

ステップ 1 はそのまま「次へ」で進んでも問題ないです。

aws-devops-agent-secondary-account-iam-role-stackset-6

ステップ 2 において、アカウント ID は追加したいセカンダリのアカウント ID を指定します。ロール名は StackSets のパラメータで指定したロール名を入力します。なお、ステップ 1 で先にロール名を修正している場合は、ステップ 2 では自動的にステップ 1 で変更したロール名が入力されていました。

aws-devops-agent-secondary-account-iam-role-stackset-7

追加を実行すると、問題なく追加できました。

aws-devops-agent-secondary-account-iam-role-stackset-8

後は同じ要領で必要なセカンダリアカウントを追加していきます。

さいごに

AWS Organizations 全体のアカウントを対象とした AWS DevOps Agent スペースを検証環境で作成したく、セカンダリソースのアカウントにおいて必要な IAM ロールの作成を CloudFormation で作成してみました。AWS CDK でさらに効率的に環境を構築する方法も下記ブログで紹介されています。

https://dev.classmethod.jp/articles/aws-devops-agent-secondary-account-cdk/

以上、このブログがどなたかのご参考になれば幸いです。

この記事をシェアする

AWSのお困り事はクラスメソッドへ

関連記事