Доступ к переменным SSM с помощью Serverless
Я хотел бы использовать параметры SSM в переменных без сервера.
Следуя документации, я выполнил эту команду:
aws ssm put-parameter --name foo --value bar --type SecureString
И я добавил это к моему serverless.yml
:
custom:
foo: ${ssm:foo}
Однако при развертывании я получаю это предупреждение:
Serverless Warning --------------------------------------
A valid SSM parameter to satisfy the declaration 'ssm:foo' could not be found.
Как мне получить доступ к этой переменной? Спасибо!
2 ответа
Мне нужно было установить один и тот же регион как для функции без сервера, так и для назначения переменной ssm:
aws ssm put-parameter --name foo--value bar --type SecureString --region us-east-1
Если параметр является SecureString, вам необходимо добавить ~true после пути к параметру в файле serverless.yml, как описано здесь: https://serverless.com/framework/docs/providers/aws/guide/variables
Это скажет платформе расшифровать значение. Убедитесь, что у вас есть разрешения на использование ключа, используемого для шифрования параметра.
Проверьте свою политику IAM. Для получения параметров ему необходим доступ к SSM. Это предлагает полный доступ. См. Документацию, чтобы немного сузить его (например, GetParameters, GetParameter).
"Effect": "Allow",
"Action": [
"ssm:*"
],
"Resource": [
"*"
]
Добавьте это в раздел провайдера в файле serverless.yml
iamRoleStatements:
- Effect: "Allow"
Action:
- "ssm:GetParameters"
Resource: "*"
Чтобы использовать переменные SSM, вам нужно добавить префикс /aws/reference/secretsmanager/
пример
${ssm:/aws/reference/secretsmanager/${self:provider.stage}/service/mysecret~true}