Параметры AWS SSM GET с использованием расшифровки KMS

Сценарий: один из наших скриптов использует boto3 kms api для PUT и GET параметров SSM с шифрованием и дешифрованием KMS. SSM param put работает отлично, и параметры добавляются (с расшифровкой как true) с защищенной строкой в ​​хранилище параметров SSM EC2. Проблема, с которой мы сталкиваемся, заключается в попытке получить значения параметров SSM с расшифровкой как истинные. Соответствующий лямбда-код, запускающий этот сценарий, выдает следующую ошибку при попытке запустить следующий сценарий boto3 (при запуске get_ssm_parameters_by_path):

       session = boto3.Session()
       ssm_client = session.client('ssm', 'us-east-1')
       ssm_parameters = []
       response = ssm_client.get_parameters_by_path(
         Path=self.ssm_parameter_path,
         Recursive=True,
         WithDecryption=True
       )

ОШИБКА: произошла ошибка (AccessDeniedException) при вызове операции GetParametersByPath: зашифрованный текст относится к главному ключу клиента, который не существует, не существует в этом регионе или вам не разрешен доступ. (Сервис: AWSKMS; Код состояния: 400; Код ошибки: AccessDeniedException; Идентификатор запроса: eaaxx-7ae7-11e8-97xx5e-b9exxxxxxx410): ClientError

Я просмотрел различные документы AWS по работе с шифрованием и дешифрованием KMS и обновил свой документ политики, как показано ниже, но пока мне не повезло. Роль, которую использует лямбда, имеет следующий доступ к политике:

{
"Sid": "AllowSSMAccess",
"Effect": "Allow",
"Action": ["kms:Encrypt", "kms:Decrypt", "kms:ReEncrypt*", "kms:GenerateDataKey*", "kms:DescribeKey"],
"Resource": "arn:aws:kms:us-east-1:AWS_ACCOUNT_NUMBER:key/<aws/ssm default key id>",
"Condition": {
    "StringEquals": {
        "kms:ViaService": "ssm.us-east-1.amazonaws.com",
        "kms:CallerAccount": "AWS_ACCOUNT_NUMBER"
    }
  }
}, 
{
"Sid": "AllowKeyMetadata",
"Effect": "Allow",
"Action": ["kms:Describe*", "kms:Get*", "kms:List*"],
"Resource": "arn:aws:kms:us-east-1:AWS_ACCOUNT_NUMBER:key/<aws/ssm default key id>"
},  
{
  "Sid": "KeyAccess",
  "Effect": "Allow",
  "Action": [
    "kms:Describe*",
    "kms:Enable*",
    "kms:List*",
    "kms:Get*",
"kms:TagResource"
  ],
  "Resource": "arn:aws:kms:us-east-1:AWS_ACCOUNT_NUMBER:key/<aws/ssm default key id>"
}

Где AWS_ACCOUNT_NUMBER - это номер моей учетной записи AWS, а идентификатор ключа kms - это ключ "aws / ssm" по умолчанию для шифрования и дешифрования параметра SSM. Ключ действительно существует в учетной записи. Мы указываем регион "us-east-1", так что это нормально 0. Последняя часть ошибки говорит «или у вас нет доступа».

Я вижу, что параметр доступен в хранилище параметров SSM EC2 и правильно расшифрован с помощью идентификатора KEY ID, который я использую для расшифровки.

Какой еще доступ к политике или добавление нам необходимо выполнить, чтобы успешно запустить "get_parameters_by_path".


person Vishal    schedule 28.06.2018    source источник
comment
Вы когда-нибудь выясняли, что это было?   -  person BWStearns    schedule 18.07.2018
comment
пока не повезло. У меня другая задача, и я вернусь к ней, чтобы еще раз проанализировать все.   -  person Vishal    schedule 23.07.2018


Ответы (2)


Для доступа к ключу хранилища параметров необходимо определить приведенную ниже политику.

{
   "Sid": "getParameter",
    "Effect": "Allow",
    "Action": [
        "ssm:GetParameters"
    ],
    "Resource": "arn:aws:ssm:<region>:<AWS_ACCOUNT_NUMBER>:parameter/<Parameter_Store_Key_Name>"
},
{
    "Sid": "decryptKey",
    "Effect": "Allow",
    "Action": [
        "kms:Decrypt"
    ],
    "Resource": "arn:aws:kms:<region>:<AWS_ACCOUNT_NUMBER>:key/<aws/ssm_Key_Id>"
}

ssm: GetParameters позволит нам получить доступ к Parameter_Store_Key_Name. Обратитесь к https://docs.aws.amazon.com/kms/latest/developerguide/services-parameter-store.html.

person Navneet Joshi    schedule 24.01.2019

Так что, по крайней мере, для нас решение было в IAM. Внизу списка есть раздел Ключи шифрования. Вам необходимо добавить соответствующего пользователя или роль к соответствующему ключу. Эта ошибка вызывает боль, поскольку она напрямую относится только к SSM, поэтому вводит в заблуждение относительно того, где находится решение.

Дополнительная информация: https://docs.aws.amazon.com/kms/latest/developerguide/key-policies.html#key-policy-default-allow-users

person BWStearns    schedule 19.07.2018
comment
Это правильно, но у меня уже есть необходимая роль и политика для шифрования и дешифрования. - person Vishal; 23.07.2018