IAM配置访问S3上的jgit

bre*_*mos 5 amazon-s3 jgit

我正在尝试创建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>"]
    }
  ]  
}
Run Code Online (Sandbox Code Playgroud)

不幸的是它会抛出一个错误.我不确定还有什么其他允许行动才能实现.(在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
Run Code Online (Sandbox Code Playgroud)

403 Forbidden显然是错误但不确定需要添加到IAM中的内容.有任何想法吗?

[本来应该补充说,我在政策模拟器中尝试了这个,它似乎在那里工作.]

bon*_*onh 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>/*"]   
}
Run Code Online (Sandbox Code Playgroud)

我还注意到,jgit push s3 refs/heads/masterjgit push s3 master不起作用时,它起作用了。

对于未来的人们:如果您只想用自己的用户设置一个 git repos 存储桶,那么以下安全策略似乎就足够了:

{
    "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>/*"
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)