получить все aws номера счетов и исключить те, которые были переданы во время выполнения скрипта - PullRequest
0 голосов
/ 06 апреля 2020

Я хочу применить определенные SCP (политики управления службами) ко всем AWS учетным записям в организации, кроме той, которая указана владельцами учетных записей.

для присоединения политики SCP к aws учетной записи, я использую terraform's ресурс ниже:

resource "aws_organizations_policy_attachment" "account" {
  for_each  = toset(var.aws_account_number_restrict_root_scp)
  policy_id = aws_organizations_policy.restrict_root.id
  target_id = each.key
}

#aws_account_number_restrict_root_scp should evaluates to something like this:
#["33333443453","333333333333","444444444444"]

Теперь я хочу сгенерировать переменную aws_account_number_restrict_root_scp на любом языке сценариев. это будут все AWS номера счетов в AWS организации, кроме номера, указанного владельцами счетов. переменная должна быть в указанном выше формате.

Я получаю все aws номера счетов в требуемом формате, используя приведенный ниже, но не могу удалить номер, предоставленный владельцами учетных записей.

#!/bin/bash
#echo $0
var=$(aws organizations list-accounts --query 'Accounts[*].Id')
echo $var

Как отфильтровать $var путем удаления номеров учетных записей, предоставленных владельцем учетной записи?

Проще говоря,

var=[
  {
    "Status": "ACTIVE",
    "Name": "XYZ",
    "JoinedMethod": "INVITED",
    "Id": "3234443322122"
  },
  {
    "Status": "ACTIVE",
    "Name": "ABC",
    "JoinedMethod": "CREATED",
    "Id": "12345678901"
  },
  {
    "Status": "ACTIVE",
    "Name": "PQR",
    "JoinedMethod": "CREATED",
    "Id": "3444550998293"
  }
]

exception=["3444550998293"]

#then expected result should be:
echo $expected_output
[
"3234443322122",
 "12345678901"
]

примечание: $var создается во время выполнения и имеет более 200 элементов и $exception - ожидаемые пользователем данные.

1 Ответ

1 голос
/ 17 апреля 2020

Вот фильтр, который использует index/1

map( .Id | select( . as $id | $exception | index($id) | not ) )

Для его использования необходимо предоставить массив исключение .
Один из способов использовать --argjson например, если ваш фильтр в filter.jq

jq -Mc --argjson exception '["3444550998293"]' -f filter.jq <<< "${var}"

Пример вывода

["3234443322122","12345678901"]

Попробуйте онлайн!

...