У меня есть настройка AmazonMQ (ActiveMQ 5.17.1) с пользователем, определенным в моем терраформе следующим образом:
user {
username = "myUser"
password = "somethingSecret"
console_access = false
}
и конфигурация ActiveMQ без какой-либо авторизацииMap: мой клиент может подключиться без проблем.
Теперь я хочу настроить authorizationMap
для некоторых других пользователей и дать пользователю myUser
права администратора на все очереди и темы.
Вот как выглядит мой authorizationMap
:
<authorizationPlugin>
<map>
<authorizationMap>
<authorizationEntries>
<authorizationEntry queue = "SYS1.IN.>" read = "system1"/>
<authorizationEntry queue = "SYS2.IN>" read = "system2"/>
<authorizationEntry queue = "SYS2.OUT>" write = "system2"/>
<!-- few other queues / permissions -->
<!-- taken from https://docs.aws.amazon.com/amazon-mq/latest/developer-guide/child-element-details.html#authorizationEntry -->
<authorizationEntry admin = "admins,activemq-webconsole" read = "admins,users,activemq-webconsole" write = "admins,activemq-webconsole" queue = ">"/>
<authorizationEntry admin = "admins,activemq-webconsole" read = "admins,users,activemq-webconsole" write = "admins,activemq-webconsole" topic = ">"/>
</authorizationEntries>
</authorizationMap>
</map>
</authorizationPlugin>
и я также добавил myUSer в группу администраторов в terraform:
user {
username = "myUser"
password = "somethingSecret"
groups = ["admins"]
}
Но с этой настройкой я вижу в журналах AWS (и на стороне клиента) ошибку, говорящую что-то вроде:
... User myUser doesn't have permission to write in topic `ActiveMQ.Advisory.Connection` ...
Я попытался добавить следующую запись в authorizationMap
(сохранив существующую выше):
<authorizationEntry topic = "ActiveMQ.Advisory.>" read = "admins,activemq-webconsole" write = "admins,activemq-webconsole" admin = "admins,activemq-webconsole"/>
Но ошибка все та же.
Обратите внимание, что когда я пытался отправить сообщение в очередь из консоли (с другим пользователем, где console_access = true), возникает ошибка, но я могу создавать новые очереди.
Обратите внимание, что я принудительно перезагружаю брокера между каждым изменением конфигурации, но указанная выше ошибка остается.
Я обнаружил две проблемы с моим файлом terraform:
Сначала мне пришлось добавить authentication_strtategy
:
authentication_strategy = "simple"
но это само по себе еще не работало.
После из консоли я увидел, что мой брокер не ссылается на последнюю конфигурацию.
Затем, во-вторых, мне пришлось явно добавить строку revision
в мою конфигурацию следующим образом:
configuration {
id = aws_mq_configuration.conf-amq-area51-dev.id
revision = aws_mq_configuration.conf-amq-area51-dev.latest_revision
}
чтобы явно указать последнюю версию, поскольку я сделал (ложное) предположение, что отсутствие ссылки на версию будет неявно использовать последнюю версию.
После этих двух изменений я могу правильно использовать своего пользователя, и администратор консоли также работает правильно.
Еще один важный момент, который также отсутствовал в моей первоначальной конфигурации: группа, назначенная каждому пользователю. Если я хочу назначить авторизацию, подобную той, что указана в вопросе:
<authorizationEntry queue = "SYS1.IN.>" read = "system1"/>
<authorizationEntry queue = "SYS2.IN>" read = "system2"/>
<authorizationEntry queue = "SYS2.OUT>" write = "system2"/>
system1
и system2
представляют группы, а не пользователя, поскольку в ActiveMQ авторизация всегда относится к группе, а не к отдельному пользователю. Обходной путь состоит в том, чтобы назвать (и назначить) группу тем же именем, что и пользователь (немного похоже на Linux).
В Terraform вы можете объявить их так:
user {
username = "system1"
password = "somethingSecretPa$$01"
console_access = false
groups = ["system1"]
}
user {
username = "system2"
password = "somethingSecretPa$$02"
console_access = false
groups = ["system2"]
}