Установка AWS Lambda в качестве принципала в политике разрешений - PullRequest
0 голосов
/ 17 мая 2019

У меня есть очень специфическая лямбда-функция AWS, которую я хочу сделать политикой разрешений Принципала в AWS Secret Manager, чтобы она могла получать секреты.

Я хочу дать это разрешение только моей Лямбде. Я создал роль и назначил эту роль политике.

Тем не менее, я хочу иметь возможность написать Принципал в явном виде (для изучения и узнать, что он делает на первый взгляд).

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Lambda Get Secret File",
            "Effect": "Allow",
            "Action": "secretsmanager:GetSecretValue",
            "Principal": {
                "AWS": "arn:aws:iam::XXXXXXXXXX:role/My-Lambda"    
            },
            "Resource": "arn:aws:secretsmanager:us-west-2:XXXXXX:secret:My-Secret"
        }
    ]
}

Это не будет разрешено. Как это написать?

Все, что я вижу, это чтобы лямбда вращалась, я не хочу вращаться.

Ответы [ 2 ]

1 голос
/ 21 мая 2019

При работе с удостоверениями / разрешениями AWS важно понимать, что существует два типа политик:

  1. политики на основе идентификаторов (вы присоединяете их к удостоверениям)
  2. resource-основанные политики (вы присоединяете их к ресурсам)

Первые, основанные на идентификации политики, привязаны к пользователю, группе или роли IAM.Эти политики позволяют указать, что может делать это удостоверение (пользователь, группа или роль).Эти политики не имеют элемент Principal, поскольку принципалом, к которому применяется политика, является неявно пользователь / процесс, представляющий учетные данные.

Последние, основанные на ресурсах политики, прикрепленына ресурс.Эти политики определяют, кто может получить доступ к данному ресурсу и что они могут делать.Чаще всего вы увидите их с сегментами S3, но они также могут быть связаны с другими типами ресурсов.Эти политики do имеют и требуют элемент Principal.

В вашем случае вам необходимо настроить политику на основе ресурсов для секрета Secrets Manager, контролирующего, кто имеет доступ ксекрет.

Мне удалось добавить следующую политику в секрет диспетчера секретов (я сохранил эту политику в файле с именем mysecret.json:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "secureme",
      "Effect": "Allow",
      "Action": "secretsmanager:GetSecretValue",
      "Principal":
        "AWS": "arn:aws:iam::123456789012:role/mylambdarole"
      },
      "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:mysecret-xyz"
    }
  ]
}

Вы не можете использовать AWSКонсоль, чтобы применить эту политику к секрету, насколько я знаю, но вы можете использовать awscli или SDK. Я использовал awscli, следующее:

aws secretsmanager put-resource-policy \
    --secret-id mysecret \
    --resource-policy file://mysecret.json
0 голосов
/ 17 мая 2019

В руководстве пользователя AWS IAM есть глава о элементах политики AWS JSON: принципал . Если вы прокрутите страницу вниз, появится параграф о Сервисе AWS :

Участник службы - это идентификатор, который используется для предоставления разрешений службе. Идентификатор включает в себя длинную версию имени службы и обычно имеет следующий формат:

long_service-name.amazonaws.com

Следовательно, поскольку вы имеете дело с лямбда-функцией, главный элемент должен иметь следующий вид:

"Principal": {
  "Service": "lambda.amazonaws.com"
},
...