Лямбда - Как создать политику, управляемую клиентом?

Фон:

Политики IAM можно создать двумя способами:

  • Управляемые политики (новый способ)

    • AWS managed policies
    • Политики, управляемые клиентом
  • Встроенные политики (старый способ)


Ниже шаблон SAM создает встроенную политику:

Resources:
  HelloWorldFunction:
    Type: AWS::Serverless::Function 
    Properties:
      CodeUri: hello-world/
      Handler: app.LambdaHandler
      Runtime: nodejs8.10
      Policies:
      - Statement:
        - Sid: AccessToS3Policy
          Effect: Allow
          Action:
          - s3:GetObject
          - s3:GetObjectACL
          Resource: 'arn:aws:s3:::some-bucket/*'

в результирующей роли, как показано ниже:

{
   "roleName": "somestack-HelloWorldFunctionRole-AAAAAAAA",
   "policies": [
   {
      "document": {
        "Statement": [
          {
            "Action": [
              "s3:GetObject",
              "s3:GetObjectACL"
            ],
            "Resource": "arn:aws:s3:::some-bucket/*",
            "Effect": "Allow",
            "Sid": "AccessToS3Policy"
          }
        ]
      },
      "name": "HelloWorldFunctionRolePolicy0",
      "type": "inline"
    },
    .....
   ]
 }

В случае лямбда-функции

1) Как создать политику, управляемую Клиентом?

2) Чем встроенная политика отличается от политики, управляемой клиентом?


person overexchange    schedule 14.07.2019    source источник


Ответы (1)


Если вы используете этот синтаксис в своем шаблоне SAM

Policies:
      - Statement:
        - Sid: AccessToS3Policy
          Effect: Allow
          Action:
          - s3:GetObject
          - s3:GetObjectACL
          Resource: 'arn:aws:s3:::some-bucket/*'

Он автоматически создаст встроенную политику. Если вы хотите создать политику, управляемую клиентом, а не встроенную политику, вам необходимо определить политику как отдельный Resource в своем шаблоне и ссылаться на нее в policies. Или вы можете создать роль вне шаблона (например, через консоль AWS) и ссылаться на эту политику так же, как если бы вы ссылались на управляемую политику AWS.

Чем встроенная политика отличается от политики, управляемой клиентом?

Я бы не сказал, что встроенная политика - это старый способ ведения дел. Единственное различие между встроенной политикой и политикой, управляемой клиентом, заключается в том, что встроенную политику нельзя повторно использовать (вы не можете назначить встроенную политику двум или более объектам). Но это часто может быть удобно, если вам нужна конкретная политика, которую вы не планируете повторно использовать в будущем.

person Matus Dubrava    schedule 14.07.2019
comment
Вы можете порекомендовать мне какой-нибудь синтаксис? который можно использовать в шаблоне SAM .. этот ... github.com/awslabs/serverless-application-model/issues/ - person overexchange; 14.07.2019
comment
Но политика (встроенная или управляемая) является частью существующей новой роли. Где мы ограничиваем назначение роли одному или нескольким объектам? - person overexchange; 14.07.2019
comment
Здесь вы можете узнать, как определить ресурс политики IAM в вашем шаблоне, docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/. Затем вы можете использовать внутреннюю функцию Ref в Policies для ссылки на логический идентификатор политики. - person Matus Dubrava; 14.07.2019
comment
Это не роль, которая может быть назначена только одному объекту, эта роль может быть назначена (принята) любому количеству доверенных объектов, но основная политика не может, если это встроенная политика. Если вы перейдете в консоль - ›Политики IAM, вы не найдете там эту политику. - person Matus Dubrava; 14.07.2019
comment
Я думаю, вы упомянули встроенную политику (_1 _) ... Я ищу документ AWS, который относится к управляемой политике примерно так .... github.com/awslabs/serverless-application-model/issues/. Исправь меня... - person overexchange; 14.07.2019
comment
Вы правы, правильный тип ресурса - AWS::IAM::ManagedPolicy - person Matus Dubrava; 14.07.2019
comment
Итак ... встроенная политика может быть назначена только одной роли, одному пользователю или одной группе ... Это понимание? - person overexchange; 14.07.2019
comment
Да, это правильно. Вы можете назначить его одному из них, и все. Если вы хотите назначить ту же политику другому объекту, вам снова потребуется создать новую встроенную политику с такими же разрешениями. Но в таком случае разумнее было бы создать ее как управляемую политику. - person Matus Dubrava; 14.07.2019
comment
Одно дополнение ... Чем эта граница разрешений отличается от управляемой политики или встроенной политики? Дайте мне знать ... если мне нужно добавить новый вопрос ... В сценарии случая лямбда-функции ... Мы можем ограничить доступ с помощью нашей политики, управляемой клиентом, почему снова граница разрешений? - person overexchange; 14.07.2019
comment
Я не уверен, какие политики мы сейчас сравниваем. Если у вас есть что-то конкретное, что не является частью исходного вопроса, лучше начать новый вопрос. - person Matus Dubrava; 14.07.2019
comment
У меня связанный с этим вопрос ... https://stackoverflow.com/questions/57044845/iam-policy-how-to-reference-resources - person overexchange; 15.07.2019