Доступ к переменным 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}
Другие вопросы по тегам