Я пытаюсь настроить свой экземпляр EC2, чтобы сценарий мог получать значение секрета, например, во время загрузки.
Я создал экземпляр EC2 из CentOS AMI и секрет в диспетчере секретов. Секрет использует ключ от KMS.
Затем я определил роль IAM с соответствующими политиками для расшифровки секрета и назначил роль экземпляру EC2.
Изнутри экземпляра я могу видеть AccessKeyId и SecretAccessKey в метаданных с помощью этой команды (Decrypt-Secret - это имя роли):
$ curl http://169.254.169.254/latest/meta-data/iam/security-credentials/Decrypt-Secrets/
{
"Code" : "Success",
"LastUpdated" : "2018-12-06T09:45:55Z",
"Type" : "AWS-HMAC",
"AccessKeyId" : "AAAAAAAAAAAAAA",
"SecretAccessKey" : "BBBBBBBBBBBBBBBBBBB",
"Token" : "...",
"Expiration" : "2018-12-06T16:11:24Z"
}
Затем я настраиваю aws cli:
$ aws configure
AWS Access Key ID [None]: AAAAAAAAAAAAAA
AWS Secret Access Key [None]: BBBBBBBBBBBBBBBBBBB
Default region name [us-east-1]: us-east-1
Default output format [None]:
И попробуем узнать секрет:
$ aws secretsmanager get-secret-value --secret-id arn:aws:secretsmanager:us-east-1:1234567890:secret:my-secret-aaaaa
An error occurred (UnrecognizedClientException) when calling the GetSecretValue operation: The security token included in the request is invalid.
Насколько я понимаю, ошибка заключается в том, что я использую неправильный KeyID и AccessKey. Но я не понимаю почему.
Я также попытался создать пользователя IAM, который использует ту же политику, и когда я указываю KeyID и AccessKey этого пользователя, он работает, я могу получить секрет. Но мне нужно указать идентификатор и ключ вручную, и моя цель - сценарий, который автоматически получит секрет.
Что мне не хватает?