Отказано в доступе для политики IAM для корзины S3 - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь настроить лямбду изображения для изменения размера с помощью Изменение размера изображения на лету с помощью Amazon S3, AWS Lambda и Amazon API Gateway |Блог вычислений AWS .

Однако политика IAM не работает.У него нет доступа к корзине S3.

Я протестировал его в IAM Policy Simulator (тестирование для S3 PutObject), и там написано Implicitly denied (not matching statements).

Я отредактировал политику в соответствии с Предоставление лямбда-роли выполнения Доступ к корзине Amazon S3 , но при этом возникает та же ошибка.

Вот моя политика корзины (отредактированная для изменения этой роли ниже, а не root, по-прежнему отказаночерез IAM Policy Stimulator):

{
    "Version": "2008-10-17",
    "Statement": [
        {
            "Sid": "AllowPublicRead",
            "Effect": "Allow",
            "Principal": {
                "AWS": "*"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::mybucketname/*"
        },
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<my-account-number>::role/<my-role-name>"
            },
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::mybucketname",
                "arn:aws:s3:::mybucketname/*"
            ]
        }
    ]
}

Вот моя политика роли IAM:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogStream",
                "logs:PutLogEvents"
            ],
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "s3:ListAllMyBuckets",
                "s3:GetBucketLocation"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": "logs:CreateLogGroup",
            "Resource": "arn:aws:logs:*:*:*"
        },
        {
            "Sid": "VisualEditor3",
            "Effect": "Allow",
            "Action": "s3:*",
            "Resource": [
                "arn:aws:s3:::mybucketname/*",
                "arn:aws:s3:::mybucketname"
            ]
        }
    ]
}

Вот мои правила перенаправления S3:

<RoutingRules>
  <RoutingRule>
    <Condition>
      <KeyPrefixEquals/>
      <HttpErrorCodeReturnedEquals>404</HttpErrorCodeReturnedEquals>
    </Condition>
    <Redirect>
      <Protocol>https</Protocol>
      <HostName>MYAPIENDPOINT.eu-west-1.amazonaws.com</HostName>
      <ReplaceKeyPrefixWith>default/resize?key=</ReplaceKeyPrefixWith>
      <HttpRedirectCode>307</HttpRedirectCode>
    </Redirect>
  </RoutingRule>
</RoutingRules>

1 Ответ

0 голосов
/ 27 июня 2019

Вы уверены, что ваша функция Lambda работает от имени пользователя root? (Я даже не знаю, возможно ли это, но вы, вероятно, не хотите этого делать)

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

aws lambda get-function-configuration --function-name YOUR_FUNCTION_NAME | grep Role

Значение, которое вы видите, это то, что вы должны использовать в своей политике корзины:

    {
        "Effect": "Allow",
        "Principal": {
            "AWS": "arn:aws:iam::<my-account-number>:role/service-role/foo-bar-baz"
        },
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::mybucketname",
            "arn:aws:s3:::mybucketname/*"
        ]
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...