AWS DevOps Agent スペースに AWS Organizations 配下のアカウントをセカンダリソースとして AWS CLI でまとめて追加してみた

AWS DevOps Agent スペースに AWS Organizations 配下のアカウントをセカンダリソースとして AWS CLI でまとめて追加してみた

AWS DevOps Agent のセカンダリソースに複数アカウントを一括登録する手間を削減する方法を紹介します。CloudFormation StackSets と AWS CLI を組み合わせることで、AWS Organizations 配下のアカウントをまとめて追加できます。
2026.07.23

AWS DevOps Agent には、調査対象を複数の AWS アカウントに広げるためのセカンダリソースという仕組みがあります。セカンダリソースはマネジメントコンソールからも追加できますが、1 アカウントずつの追加操作となります。その手間を削減するため、AWS CLI で AWS Organizations 配下のアカウントをまとめて追加してみました。

本ブログでは、AWS DevOps Agent スペースを作成済みの状態において、セカンダリソースとして追加する複数の AWS アカウントに対して CloudFormation StackSets で DevOps Agent 用 IAM ロールを展開し、その後に複数のアカウントをまとめて AWS CLI でセカンダリソースとして追加します。

DevOps Agent 用 IAM ロールをセカンダリソースのアカウントに展開

セカンダリソースとして AWS アカウントを追加するためには、事前に IAM ロールを作成しておく必要があります。AWS CloudFormation StackSets を利用することで複数アカウントでまとめて作成できます(下記イメージ図)。

aws-devops-agent-add-accounts-secondary-resource-1

今回の環境では下記ブログで紹介している方法で aws-devops-agent-role という名前の IAM ロールを展開している環境で、以降に記載のセカンダリソースの追加を試してみます。

https://dev.classmethod.jp/articles/aws-devops-agent-secondary-account-iam-role-stackset/

AWS DevOps Agent にセカンダリソースを追加

始めに、DevOps Agent スペースにセカンダリソースとして追加する AWS アカウントのリストを作成します。
AWS Organizations 管理アカウントまたは AWS Organizations に対する権限があるアカウントにおいて、次のコマンドでアカウント一覧のファイルを作成します。その際に、AGENT_PRIMARY_ACCOUNT_ID で指定した DevOps Agent のプライマリアカウントを除外するようにしています。

AGENT_PRIMARY_ACCOUNT_ID=999999999999
aws organizations list-accounts \
  --query "Accounts[?Status=='ACTIVE' && Id!='${AGENT_PRIMARY_ACCOUNT_ID}'].Id" \
  --output text | tr '\t' '\n' > accounts.txt

出力されるファイルの例です。

$ cat accounts.txt 
111111111111
222222222222
333333333333
444444444444
555555555555

別のパターンとして、AWS Organizations 管理アカウントも除外したい場合は、代わりに次のコマンドで出力できます。

MGMT_ACCOUNT_ID=$(aws organizations describe-organization --query "Organization.MasterAccountId" --output text)
AGENT_PRIMARY_ACCOUNT_ID=999999999999
aws organizations list-accounts \
  --query "Accounts[?Status=='ACTIVE' && Id!='${MGMT_ACCOUNT_ID}' && Id!='${AGENT_PRIMARY_ACCOUNT_ID}'].Id" \
  --output text | tr '\t' '\n' > accounts.txt

出力されるファイルの例です。

$ cat accounts.txt 
222222222222
333333333333
444444444444
555555555555

今回の環境では管理アカウントには IAM ロールを展開していないので、後者のパターンで進めます。

続いて、セカンダリソースを追加したい AWS DevOps Agent スペースがあるアカウントにおいて作業します。
次のコマンドを実行することで accounts.txt に記載されているアカウントをまとめてセカンダリソースに追加できます。

AGENT_SPACE_ID="f2050f98-39ce-471f-96d4-cdc8eexample"
AGENT_SPACE_REGION="ap-northeast-1"
SECONDARY_ROLE_NAME="aws-devops-agent-role"
INPUT_ACCOUNTS_FILE="accounts.txt"

while IFS= read -r SECONDARY_ACCOUNT_ID || [ -n "$SECONDARY_ACCOUNT_ID" ]; do
  echo "=== ${SECONDARY_ACCOUNT_ID} をセカンダリソースに追加 ==="
  aws devops-agent associate-service \
    --agent-space-id "${AGENT_SPACE_ID}" \
    --service-id aws \
    --configuration "{
      \"sourceAws\": {
        \"accountId\": \"${SECONDARY_ACCOUNT_ID}\",
        \"accountType\": \"source\",
        \"assumableRoleArn\": \"arn:aws:iam::${SECONDARY_ACCOUNT_ID}:role/${SECONDARY_ROLE_NAME}\"
      }
    }" \
    --region "${AGENT_SPACE_REGION}"
done < "${INPUT_ACCOUNTS_FILE}"

実行結果の例です。

=== 222222222222 をセカンダリソースに追加 ===
{
    "association": {
        "agentSpaceId": "f2050f98-39ce-471f-96d4-cdc8eexample",
        "createdAt": "2026-07-23T14:09:19.697000+00:00",
        "updatedAt": "2026-07-23T14:09:19.697000+00:00",
        "status": "valid",
        "associationId": "ebff1d39-0617-4930-9594-8867c320eef1",
        "serviceId": "aws",
        "configuration": {
            "sourceAws": {
                "accountId": "222222222222",
                "accountType": "source",
                "assumableRoleArn": "arn:aws:iam::222222222222:role/aws-devops-agent-role"
            }
        }
    }
}
=== 333333333333 をセカンダリソースに追加 ===
{
    "association": {
        "agentSpaceId": "f2050f98-39ce-471f-96d4-cdc8eexample",
        "createdAt": "2026-07-23T14:09:20.461000+00:00",
        "updatedAt": "2026-07-23T14:09:20.461000+00:00",
        "status": "valid",
        "associationId": "817fca94-17c1-426e-b736-164f8279a387",
        "serviceId": "aws",
        "configuration": {
            "sourceAws": {
                "accountId": "333333333333",
                "accountType": "source",
                "assumableRoleArn": "arn:aws:iam::333333333333:role/aws-devops-agent-role"
            }
        }
    }
}
=== 444444444444 をセカンダリソースに追加 ===
{
    "association": {
        "agentSpaceId": "f2050f98-39ce-471f-96d4-cdc8eexample",
        "createdAt": "2026-07-23T14:09:21.207000+00:00",
        "updatedAt": "2026-07-23T14:09:21.207000+00:00",
        "status": "valid",
        "associationId": "b5cbc4bb-9b3e-4151-9147-f6ad9cfde3bd",
        "serviceId": "aws",
        "configuration": {
            "sourceAws": {
                "accountId": "444444444444",
                "accountType": "source",
                "assumableRoleArn": "arn:aws:iam::444444444444:role/aws-devops-agent-role"
            }
        }
    }
}
=== 555555555555 をセカンダリソースに追加 ===
{
    "association": {
        "agentSpaceId": "f2050f98-39ce-471f-96d4-cdc8eexample",
        "createdAt": "2026-07-23T14:09:21.931000+00:00",
        "updatedAt": "2026-07-23T14:09:21.931000+00:00",
        "status": "valid",
        "associationId": "33293189-3c51-4bfc-af29-beb2fbbbe00c",
        "serviceId": "aws",
        "configuration": {
            "sourceAws": {
                "accountId": "555555555555",
                "accountType": "source",
                "assumableRoleArn": "arn:aws:iam::555555555555:role/aws-devops-agent-role"
            }
        }
    }
}

実行後にマネジメントコンソールから DevOps Agent スペースのセカンダリソースを確認したところ、意図したとおり 4 アカウント分が追加されていました。

aws-devops-agent-add-accounts-secondary-resource-2

なお、セカンダリソースを追加する AWS CLI のコマンドは下記のユーザーガイドページで詳しく説明されており、参考になりました。

セカンダリソース一覧を AWS CLI で確認したい場合は下記コマンドです。

AGENT_SPACE_ID="f2050f98-39ce-471f-96d4-cdc8eexample"
AGENT_SPACE_REGION="ap-northeast-1"

aws devops-agent list-associations \
  --agent-space-id "${AGENT_SPACE_ID}" \
  --region "${AGENT_SPACE_REGION}" \
  --query "associations[].configuration.sourceAws.accountId" \
  --output text | tr '\t' '\n'

出力結果例です。accounts.txt と同じ形式になるようにしています(アカウントの順番は変わるかもしれません)。

222222222222
333333333333
444444444444
555555555555

さいごに

最近、AWS DevOps Agent を触る機会が増えており、AWS Organizations 全体を対象としたスペースを作ったり、特定の複数アカウントを対象としたスペースを繰り返し作ったりすることがあったので、少しだけ楽をしたくて AWS CLI で設定してみました。
以上、このブログがどなたかのご参考になれば幸いです。


そのマルチアカウント運用、気合いで支えていませんか

Organizations や Control Tower で土台は作れても、アカウントもポリシーも増えるほど、運用は「詳しい一人」に寄りかかっていく。属人化が限界を迎える前に、組織として回す仕組み=CCoEへ。5,600社の支援から得た立ち上げの型を、無料資料にまとめました。

CCoE総合支援

組織で回す仕組みの資料をもらう

この記事をシェアする

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

関連記事