Как можно назначить политику ресурсу AWS?

Ниже я понимаю назначение политики:

введите здесь описание изображения

Политика AWS может быть назначена пользователю, группе, роли, но не ресурсу AWS.

В определении политики aws запись Principal имеет значение как пользователь, группа или роль, но не как ресурс AWS (например, EC2, бессерверная лямбда и т. Д.)


Политику можно назначить ресурсу через роль


Мы создаем лямбда-ресурс (AWS) с использованием шаблона SAM, как показано ниже:

Resources:
  MyFunction:
    Type: 'AWS::Serverless::Function'
    Properties:
      CodeUri: src/
      Handler: index.handler
      Runtime: nodejs4.3
      Policies:

        - SQSPollerPolicy:
            QueueName: name

        - LambdaInvokePolicy:
            FunctionName: name

но я вижу свойство Policies как часть определения ресурса


Как можно назначить политику ресурсу AWS (лямбда)?


person overexchange    schedule 14.07.2019    source источник
comment
Потому что на вашем рисунке показана политика на уровне ресурсов, а не на основе идентификации.   -  person Matus Dubrava    schedule 14.07.2019
comment
Любая политика на основе ресурсов будет иметь Principal указанную сущность ... SQSPollerPolicy не упоминает Principal сущность   -  person overexchange    schedule 14.07.2019
comment
@MatusDubrava и согласно этому документации, нельзя назначить политику на основе ресурсов ...   -  person overexchange    schedule 14.07.2019
comment
Конечно, Lambda не поддерживает политику на основе ресурсов, я совершенно неправильно понял вопрос. Извините, это моя ошибка.   -  person Matus Dubrava    schedule 14.07.2019
comment
Вопрос, связанный с @MatusDubrava, stackoverflow.com/q/57049666/3317808   -  person overexchange    schedule 16.07.2019


Ответы (2)


В определении политики aws запись участника имеет значение как пользователь, группа или роль, но не как ресурс AWS (например, EC2, бессерверная лямбда и т. Д.)

Изменить:

Я не уверен, говорим ли мы здесь об одном и том же объекте на языке политики AWS JSON. Политика может быть одного из типов: (а) политика на основе идентичности, (б) политика доверия или (в) политика на основе ресурсов. [2]

В документации указано, что «вы не можете использовать элемент Principal в политике на основе идентификации IAM». [2] Lambda обычно использует два других типа политик: политику доверия для роли исполнения и политику на основе ресурсов для доступа между аккаунтами и доступа из других сервисов AWS. [6]
Однако есть также возможность использовать политики на основе идентификации с Lambda. [7]
В этом случае вы не указываете Принципал, поскольку «принципал неявно является пользователем, к которому привязана политика» [2].

Пример:

В концепции AWS IAM Принципал роли также может быть сервисом AWS - это так называемые сервисные роли [1]. [2]
Чтобы установить Lambda в качестве принципала, вы установите следующее как AssumeRolePolicyDocument (политика доверия):

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Service": "lambda.amazonaws.com"
      },
      "Action": "sts:AssumeRole"
    }
  ]
}

В блоге по безопасности AWS есть пошаговый пример, в котором показано, как вручную создать роль выполнения для лямбда-функции. [3]

Как можно назначить политику ресурсу AWS (лямбда)?

Политика назначается исполняющей роли Lambda. Затем функция принимает роль во время выполнения и получает разрешение на основе всех политик, назначенных роли выполнения. [4]

но я вижу свойство Policies как часть определения ресурса

SAM может создать для вас роль выполнения лямбда-выражения и автоматически назначить ей политики. Разработчики SAM предоставляют так называемые шаблоны политики AWS SAM [5], на которые вы можете ссылаться в своем шаблоне SAM. Используя эти шаблоны политик, вы даете команду SAM создать для вас политику и автоматически присоединить ее к роли выполнения.

использованная литература

[1] https://docs.aws.amazon.com/IAM/latest/UserGuide/id_roles_terms-and-concepts.html#iam-term-service-role
[2] https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_tml / a > (раздел «Сервис AWS»)
[3]
https://aws.amazon.com/de/blogs/security/how-to-create-an-aws-iam-policy-to-grant-aws-lambda-access-to-an-amazon-Dynamodb-table/
[4] https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html
[5] https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/serverless-policy-templates.html
[6] https://docs.aws.amazon.com/lambda/latest/dg/access-control-resource-based.html
[7] https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html

person Martin Löper    schedule 14.07.2019
comment
Я просто скопировал представления из этого aws_talk, где он говорит ... когда мы создаем политику IAM , мы знаем, кто такой Principal ..., он привязан к пользователю, роли, группе или службе ... Но когда вы определяете политику на основе ресурсов, вы должны явно упомянуть Principal - person overexchange; 14.07.2019
comment
В 10:40 он говорит о служебных ролях;) - person Martin Löper; 14.07.2019
comment
В 10:40 он привел пример имени службы (ec2.amazonaws.com) как Principal, определенного в политике ресурсов, но не в политике разрешений. - person overexchange; 14.07.2019
comment
ваша третья ссылочная ссылка довольно крутая ... Можете ли вы также прокомментировать это? - person overexchange; 14.07.2019
comment
Я принимаю этот ответ только для ссылок 3, 4 и 5. Я не согласен с первой частью вашего ответа. - person overexchange; 14.07.2019
comment
Когда вы говорите ... Политика назначается роли выполнения Lambda. Вы имеете в виду, что политика, которую я написал в шаблоне SAM, будет перезаписывать существующие AWSLambdaExecutionRole определения политик? - person overexchange; 14.07.2019
comment
[6] говорит ... AWS Lambda поддерживает политики разрешений на основе ресурсов для функций Lambda, но как мне доказать, что AWS Lambda не поддерживает политику на основе идентификационных данных? - person overexchange; 14.07.2019
comment
Честно говоря, я не использую SAM, но думаю, что он делает следующее: для каждой указанной вами функции он создает новую роль. Затем он создает (возможно, «встроенные») политики для каждого оператора, который вы определяете в своем шаблоне (например, SQSPollerPolicy, LambdaInvokePolicy) внутри вновь созданной роли. Я не знаю, какие определения можно было перезаписать? Но, как я уже сказал, я не использую SAM, так что, возможно, я что-то здесь упускаю ... - person Martin Löper; 14.07.2019
comment
Лямбда поддерживает политики на основе идентичности, см. [7] =), но они используются для управления доступом к лямбда-функции (то есть, кто может выполнять лямбда-функцию), а не для доступа к лямбда-функции. - person Martin Löper; 14.07.2019
comment
Ознакомьтесь с этой политикой, написанной для управляемой AWS (AWSLambdaBasicExecutionRole), здесь. Он не использует политику на основе ресурсов (я имею в виду отсутствие элемента Principal) - person overexchange; 14.07.2019
comment
Отправленная вами ссылка, скорее всего, является политикой на основе личности. Он может быть присоединен к роли выполнения лямбда-выражения и затем предоставит лямбда-функции разрешение на запись журналов в CloudWatch. Но!! Он должен быть привязан к роли, чтобы делать что-нибудь! - person Martin Löper; 14.07.2019
comment
Но вы сказали ... здесь политика на основе идентификации не сообщает лямбда-функции, к какому объекту обращаться ... они используются для управления доступом к лямбда-функции, которая конфликтует определение политики - person overexchange; 14.07.2019
comment
О, я понимаю, какой конфликт вы здесь имеете в виду ... Я имел в виду политику на основе идентификации, которая ссылается на лямбда-функцию в разделе ресурсов и используется для управления доступом к лямбда-функции. Политика на основе идентичности, которая назначается роли выполнения лямбда-выражения, конечно же, используется для определения того, к каким службам может получить доступ лямбда-функция. - person Martin Löper; 14.07.2019
comment
Это process, не было выделено ... когда использовать политику на основе ресурсов или политику на основе идентификации для лямбда-функций - person overexchange; 14.07.2019
comment
Вы хотите, чтобы я согласился с этим: Lambda обычно использует два других типа политик: в вашем ответе ... - person overexchange; 14.07.2019
comment
Я не хотел обсуждать, какой способ определения разрешений лучше или используется чаще. Если у вас есть лучшая формулировка, предложите отредактировать. Думаю, мы обсуждали тему этого вопроса. Как можно назначить политику ресурсу AWS? основательно в этот момент =) - person Martin Löper; 14.07.2019

Когда вы определяете бессерверную функцию, SAM автоматически создает роль IAM, необходимую для запуска функции. Допустим, вашей функции требуется доступ к нескольким таблицам DynamoDB, вам необходимо предоставить вашей функции явные разрешения на доступ к таблицам. Вы можете сделать это, добавив AWS Managed Policies в определение ресурса бессерверной функции в шаблоне SAM.

Ссылка:

https://github.com/awslabs/serverless-application-model/blob/master/docs/policy_templates.rst

person overexchange    schedule 14.07.2019