EC2 не может получить доступ к объекту S3 через роль IAM - PullRequest
0 голосов
/ 26 марта 2020

Я создал роль IAM следующим образом и прикрепил ее к своему экземпляру EC2:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": "*"
        }
    ]
}

Также добавлена ​​политика сегмента для моего сегмента S3:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<my-aws-account-id>:role/Get-Pic"
            },
            "Action": [
                "s3:Get*",
                "s3:List*"
            ],
            "Resource": [
                "arn:aws:s3:::<my-bucket>",
                "arn:aws:s3:::<my-bucket>/*"
            ]
        }
    ]
}

Параметры блокировки публикации c Доступ к S3:

  • [on] Блокировка публикации c доступ к контейнерам и объектам, предоставленным через новые списки контроля доступа (ACL)
  • [on] Блокировка публикации c доступ к корзинам и объектам, предоставленным через любые списки контроля доступа (ACL)
  • [off] Блокировать публичные c доступ к корзинам и объектам, предоставленным с помощью новых publi c политик блоков или точек доступа
  • [выкл.] Блокировать публичные c и кросс-аккаунт доступ к корзинам и объектам с помощью любых общедоступных c политик блоков или точек доступа

Но я все еще не могу получить доступ к своему S3 из EC2:

$ curl https://<my-bucket>.s3-ap-southeast-2.amazonaws.com/Instagram.png
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>2006E789486C0744</RequestId><HostId>DVldRN7BgUXvKvXElPYTVGd7mgAsoPEJkH9D/mlrr4Vv5FNZdr0DLbKTFkGu9ZuCo45yPq+i2rU=</HostId></Error>

Что я должен сделать?

1 Ответ

1 голос
/ 26 марта 2020

Причина сбоя заключается в том, что вы используете curl для доступа к объектам, как если бы они были общедоступными. Но ваша политика корзины не разрешает доступ на чтение c. Правильная политика должна быть :

{
  "Version":"2012-10-17",
  "Statement":[{
    "Sid":"PublicReadGetObject",
        "Effect":"Allow",
      "Principal": "*",
      "Action":["s3:GetObject"],
      "Resource":["arn:aws:s3:::example-bucket/*"
      ]
    }
  ]
}

Однако, если вы не хотите, чтобы ваши объекты были общедоступными, в вашем экземпляре вы должны использовать AWS CLI для получения объектов например, aws s3 cp или SDK, например, get_object boto3 .

...