
AWS DevOps Agent スペースに AWS Organizations 配下のアカウントをセカンダリソースとして AWS CLI でまとめて追加してみた
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-role という名前の IAM ロールを展開している環境で、以降に記載のセカンダリソースの追加を試してみます。
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 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 で設定してみました。
以上、このブログがどなたかのご参考になれば幸いです。










