Конфигурация IAM для доступа к jgit на S3

Я пытаюсь создать разрешения IAM, чтобы jgit мог получить доступ к каталогу в одном из моих сегментов.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": ["s3:ListBucket"],
      "Resource": ["arn:aws:s3:::<mybucket>/<mydir>/*"]   
    },
    {
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:DeleteObject"
      ],
      "Resource": ["arn:aws:s3:::<mybucket>/<mydir>"]
    }
  ]  
}

К сожалению, это выдает ошибку. Я не уверен, какие еще действия должны произойти, чтобы это сработало. (Немного нового в IAM).

Caused by: java.io.IOException: Reading of '<mydir>/packed-refs' failed: 403 Forbidden
    at org.eclipse.jgit.transport.AmazonS3.error(AmazonS3.java:519)
    at org.eclipse.jgit.transport.AmazonS3.get(AmazonS3.java:289)
    at org.eclipse.jgit.transport.TransportAmazonS3$DatabaseS3.open(TransportAmazonS3.java:284)
    at org.eclipse.jgit.transport.WalkRemoteObjectDatabase.openReader(WalkRemoteObjectDatabase.java:365)
    at org.eclipse.jgit.transport.WalkRemoteObjectDatabase.readPackedRefs(WalkRemoteObjectDatabase.java:423)
    ... 13 more
Caused by: java.io.IOException:
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied</Message><RequestId>...</RequestId><HostId>...</HostId></Error>
    at org.eclipse.jgit.transport.AmazonS3.error(AmazonS3.java:538)
    ... 17 more

403 Forbidden, очевидно, является ошибкой, но не уверен, что нужно добавить в IAM. Есть идеи?

[Должен был также добавить, что я опробовал это в симуляторе политики, и, похоже, он работал там.]

1 ответ

Ошибка "403" может просто означать, что ключ <mydir>/packed-refs не существует Согласно https://forums.aws.amazon.com/thread.jspa?threadID=56531:

Amazon S3 вернет ошибку AccessDenied, когда запрошен несуществующий ключ, а запрашивающему не разрешено перечислять содержимое корзины.

Если вы нажимаете в первый раз, эта папка может не существовать, и я думаю, вам понадобится ListBucket привилегии на родительский каталог, чтобы получить надлежащий NoSuchKey ответ. Попробуйте изменить это первое утверждение на:

{
  "Effect": "Allow",
  "Action": ["s3:ListBucket"],
  "Resource": ["arn:aws:s3:::<mybucket>/*"]   
}

Я также заметил, что jgit push s3 refs/heads/master работал когда jgit push s3 master не.

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

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<bucketname>"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::<bucketname>/*"
            ]
        }
    ]
}
Другие вопросы по тегам