2016-08-07 31 views
11

Özel bir Docker Kayıt Defteri kurmaya ve görüntüleri AWS S3 örneğine kaydetmeye çalışıyorum. Kayıt defteri iyi çalışıyor gibi görünüyor - iyi bir şekilde başlıyor ve https üzerinden kimlik doğrulaması yapabilirim. Sorun şu ki, S3'e bir hata kaydediyorum, bu yüzden S3 IAM politikasında bazı izin problemleri olduğunu varsayalım.Docker resimlerini özel Docker Kayıt Defteri'nden AWS S3 kovasına kaydetme hatası

docker run komut şuna benzer:

docker run -p 443:5000 \ 
    --link redis:redis \ 
    -e REGISTRY_STORAGE=s3 \ 
    -e REGISTRY_STORAGE_S3_BUCKET=my-docker-registry \ 
    -e REGISTRY_STORAGE_S3_ACCESSKEY=**** \ 
    -e REGISTRY_STORAGE_S3_SECRETKEY=**** \ 
    -e REGISTRY_STORAGE_S3_REGION=us-east-1 \ 
    -v `pwd`/auth:/auth \ 
    -e REGISTRY_AUTH=htpasswd \ 
    -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ 
    -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ 
    -v `pwd`/certs:/certs \ 
    -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/my.com_chain.crt \ 
    -e REGISTRY_HTTP_TLS_KEY=/certs/my.com.key \ 
    -e REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR=redis \ 
    -e REGISTRY_REDIS_ADDR=redis:6379 \ 
    registry:2.5 

Ve S3 IAM politikası şuna benzer:

{ 
    "Version":"2012-10-17", 
    "Statement":[ 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListAllMyBuckets" 
     ], 
     "Resource":"arn:aws:s3:::*" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListBucket", 
      "s3:GetBucketLocation" 
     ], 
     "Resource":"arn:aws:s3:::my-docker-registry" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
       "s3:PutObject", 
       "s3:GetObject", 
       "s3:DeleteObject", 
       "s3:ListMultipartUploadParts", 
       "s3:AbortMultipartUpload" 
     ], 
     "Resource":"arn:aws:s3:::my-docker-registry/*" 
     } 
    ] 
} 

hata günlüğü girişi: Ben ettik

level=error msg="error resolving upload: s3aws: AccessDenied: Access Denied\n\tstatus code: 403, request id: 2B224..." auth.user.name=my-user go.version=go1.6.3 http.request.host=my.domain.com http.request.id=13b79c07-... http.request.method=PATCH http.request.remoteaddr="xx.xx.xx.xx:41392" http.request.uri="/v2/my-test/blobs/uploads/467d94ea-2a77...?_state=zQd-..." http.request.useragent="docker/1.12.0 go/go1.6.3 git-commit/8eab123 kernel/4.4.15-moby os/linux arch/amd64 UpstreamClient(Docker-Client/1.12.0 \\(darwin\\))" instance.id=8a8db6f1-8fe4 vars.name=my-test vars.uuid=467d94ea-2a77 version=v2.5.0 

diğer uygulamalarda dosya yüklemeleri için benzer bir politika kullandı, dolayısıyla sorunun nerede olduğundan emin değilim. Kayıt defterinin S3 grubuna kaydedilmesine izin vermek için IAM ilkesinde neyi değiştirmem gerekiyor?

+0

Hangi kayıt defterini kullandığınızdan bahseder misiniz? Elastik Konteyner Servisi? –

+0

Kendi kayıt defterimi kullanıyorum, Dockerfile yazıyor. – ldg

cevap

6

ben bunu anladım

{ 
    "Version":"2012-10-17", 
    "Statement":[ 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListAllMyBuckets" 
     ], 
     "Resource":"arn:aws:s3:::*" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
      "s3:ListBucket", 
      "s3:GetBucketLocation", 
      "s3:ListBucketMultipartUploads" 
     ], 
     "Resource":"arn:aws:s3:::my-docker-registry" 
     }, 
     { 
     "Effect":"Allow", 
     "Action":[ 
       "s3:PutObject", 
       "s3:GetObject", 
       "s3:DeleteObject", 
       "s3:ListMultipartUploadParts", 
       "s3:AbortMultipartUpload" 
     ], 
     "Resource":"arn:aws:s3:::my-docker-registry/*" 
     } 
    ] 
} 

Şimdi iyi görünüyor.

Sonraki adımlar, yukarıdaki docker run kayıtlarıyla docker-compose dosyası oluşturmak, buna bir redis container eklemek ve tam bir özel kayıt defteri çözümüdür.

1

Lütfen S3 IAM rolünün, erişim anahtarı kullanılan IAM kullanıcısına atanıp atanmadığını kontrol edin. Ayrıca bu rolü EC2 örneğine atayabilir ve bu erişim tuşunu kullanmaktan kaçabilirsiniz. : Bir şey Docker görüntü dosyaları kaydeder nasıl değişti emin değilim ama şimdi (aşağıda orta blok, IAM bütünlüğü sağlamak için tam olarak gösterilir) kova düzey iznine s3:ListBucketMultipartUploads eklemem gerekiyor gibi görünüyor -

+0

Teşekkürler @ shankar-p-s - IAM Eylemlerini joker karakterine değiştirdiğimde * '' yapmak istemediğim, sadece hangi iznin eksik olduğunu ve nerede olduğunu bulmam gerekiyor. Rolü bir kapsayıcıda çalıştırdığımdan ve ayrıca taşınabilir olmasını istediğimden bu rolü EC2 örneğine atayabildiğime emin değilim. – ldg