2016-08-07 7 views
11

से एडब्ल्यूएस एस 3 बाल्टी में डॉकर छवियों को सहेजने में त्रुटि मैं एक निजी डॉकर रजिस्ट्री सेट अप करने और एडब्ल्यूएस एस 3 इंस्टेंस में छवियों को सहेजने की कोशिश कर रहा हूं। रजिस्ट्री ठीक काम कर रही प्रतीत होती है - यह ठीक शुरू होता है और मैं इसे https पर प्रमाणित कर सकता हूं। मेरी समस्या यह है कि मुझे S3 में त्रुटि सहेज रही है, इसलिए मुझे लगता है कि S3 IAM नीति के साथ कुछ अनुमति समस्या है।निजी डॉकर रजिस्ट्री

docker run आदेश इस तरह दिखता है:

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 

और S3 IAM नीति इस तरह दिखता है:

{ 
    "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/*" 
     } 
    ] 
} 

त्रुटि लॉग प्रविष्टि है:

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 

मैंने अन्य ऐप्स में फ़ाइल अपलोड के लिए एक समान नीति का उपयोग किया, इसलिए मुझे यकीन नहीं है कि समस्या कहां है। रजिस्ट्री को एस 3 बाल्टी में सहेजने की अनुमति देने के लिए आईएएम नीति में मुझे क्या बदलने की ज़रूरत है?

+0

क्या आप उल्लेख कर सकते हैं कि आप किस रजिस्ट्री का उपयोग कर रहे हैं? लोचदार कंटेनर सेवा? –

+0

मैं अपनी खुद की रजिस्ट्री का उपयोग कर रहा हूं, डॉकरफाइल पोस्ट में है। – ldg

उत्तर

6

मैं यह पता लगा - यकीन नहीं अगर कुछ कैसे डोकर छवि फ़ाइलों को बचाता है के साथ बदल लेकिन यह अब आप बाल्टी स्तरीय अनुमति के लिए s3:ListBucketMultipartUploads जोड़ने के लिए (नीचे मध्य ब्लॉक, IAM संपूर्णता के लिए पूर्ण रूप से दिखाया गया है) की जरूरत है लगता है:

{ 
    "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/*" 
     } 
    ] 
} 

अब अच्छी तरह से काम करने लगता है।

अगले चरण ऊपर दिए गए docker run तर्कों के साथ डॉकर-कंपोज़ फ़ाइल बनाने के लिए हैं, उसमें एक लाल कंटेनर जोड़ें, और यह एक पूर्ण निजी रजिस्ट्री समाधान है।

1

कृपया जांचें कि क्या I3 उपयोगकर्ता को S3 IAM भूमिका असाइन की गई है जिसका उपयोग कुंजी का उपयोग किया जा रहा है। आप इस भूमिका को ईसी 2 इंस्टेंस में भी असाइन कर सकते हैं और इस एक्सेस कुंजी का उपयोग करने से बच सकते हैं।

+0

धन्यवाद @ शंकर-पी-एस - यह काम करता है अगर मैं आईएएम क्रियाओं को वाइल्डकार्ड '*' में बदलता हूं, जो मैं नहीं करता, मुझे बस यह पता लगाने की आवश्यकता है कि मुझे कौन सी अनुमति गुम है और कहां है। निश्चित नहीं है कि मैं ईसी 2 उदाहरण में भूमिका निभा सकता हूं क्योंकि मैं एक कंटेनर में रजिस्ट्री चला रहा हूं, और यह पोर्टेबल भी बनना चाहता हूं। – ldg

संबंधित मुद्दे