AWS SSM description-instance-information не находит мои экземпляры
Я использую boto3 для управления своими экземплярами EC2 в AWS из среды python, используя ec2 и ssm сервисы. Я создал учетную запись IAM, которая имеет доступ к политикам AmazonSSMFullAccess и AmazonEC2FullAccess.
ec2 = boto3.client(
'ec2',
region_name='eu-west-1',
aws_access_key_id='…',
aws_secret_access_key='…/…+…'
)
ssm = boto3.client(
'ssm',
region_name='eu-west-1',
aws_access_key_id='…',
aws_secret_access_key='…/…+…'
)
Я побежал:
ec2.describe_instances()['Reservations']
Вернул список всех моих экземпляров. Но когда я бегу:
ssm.describe_instance_information()
Я получаю пустой список, хотя у меня есть как минимум один экземпляр, работающий на AWS Linux AMI (ami-ca0135b3), и шесть других на последних Ubuntu AMI. Они все в ЕС-западе-1 (Ирландия). На них должен быть предварительно установлен агент SSM: ( https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-install-ssm-agent.html).
Я зашел в экземпляр AWS Linux и попытался получить логи для ssm, используя:
sudo tail -f /var/log/amazon/ssm/amazon-ssm-agent.log
Но ничего не происходит, когда я запускаю свой код на Python. Время от времени отображается последовательность сообщений:
HealthCheck reporting agent health.
error when calling AWS APIs. error details - NoCredentialProviders: no valid providers in chain. Deprecated.
Я также попытался запустить команду через веб-интерфейс, выбрал "AWS-RunRemoteScript", но ни один экземпляр не показан ниже.
Моя цель - бежать:
ssm.send_command(
DocumentName="AWS-RunShellScript",
Parameters={'commands': [command]},
InstanceIds=[instance_id],
)
Но это дает мне следующую ошибку, вероятно, из-за предыдущей проблемы.
botocore.errorfactory.InvalidInstanceId: An error occurred (InvalidInstanceId) when calling the SendCommand operation
1 ответ
Агент предварительно установлен, но экземпляру (не только вашему пользователю IAM) по-прежнему нужна надлежащая роль для связи с администратором системы. В частности, этот шаг настройки доступа к системному диспетчеру.
По умолчанию системный менеджер не имеет разрешения на выполнение действий с вашими экземплярами. Вы должны предоставить доступ с помощью профиля экземпляра IAM. Профиль экземпляра - это контейнер, который передает информацию о роли IAM в экземпляр Amazon EC2 при запуске.
Вам следует просмотреть все руководство по настройке и убедиться, что вы правильно настроили все необходимые роли.