Paket düzeyinde izinle PutObject işlemi çağrılırken Erişim Engellendi


109

Bir kullanıcıya yalnızca bir gruba nasıl erişim izni verileceğini öğrenmek için http://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_examples.html#iam-policy-example-s3 üzerindeki örneği takip ettim .

Daha sonra yapılandırmayı W3 Total Cache Wordpress eklentisini kullanarak test ettim. Test başarısız oldu.

Ayrıca sorunu yeniden oluşturmayı denedim.

aws s3 cp --acl=public-read --cache-control='max-age=604800, public' ./test.txt s3://my-bucket/

ve bu başarısız oldu

upload failed: ./test.txt to s3://my-bucket/test.txt A client error (AccessDenied) occurred when calling the PutObject operation: Access Denied

Neden paketime yükleyemiyorum?

Yanıtlar:


205

Kendi sorumu cevaplamak için:

Örnek politika PutObject erişimi sağladı, ancak ayrıca PutObjectAcl erişimi de vermem gerekiyordu.

Değiştirmek zorunda kaldım

"s3:PutObject",
"s3:GetObject",
"s3:DeleteObject"

örnekten:

"s3:PutObject",
"s3:PutObjectAcl",
"s3:GetObject",
"s3:GetObjectAcl",
"s3:DeleteObject"

Ayrıca, şu iki kutunun işaretini kaldırarak paketinizin istemciler için genel erişimli bir EKL ayarlayacak şekilde yapılandırıldığından emin olmanız gerekir:

görüntü açıklamasını buraya girin


2
Teşekkür ederim! Amazon'un kendi belgelerinin neden kapalı olduğundan emin değilim. Durdurulmuş bir yüklemenin düzgün şekilde temizlenebilmesi için "s3: AbortMultipartUpload" da dahil etmek isteyebilirsiniz.
Hashcut

S3 politikaları için örnekler burada yer almaktadır docs.aws.amazon.com/IAM/latest/UserGuide/…
E. Büyük

1
btw benim için çalışmıyor. boto3 etkileşimi, s3fullaccess politikasıyla bile "PutObject için Erişim Reddedildi"
alıyorum

2
Benim durumumda AWS cli ile çalışıyor, ancak boto ile çalışmıyor
Hardik Gajjar

3
S3'e tam erişimim vardı ancak yeni genel ACL'leri engelle ve genel nesneleri karşıya yüklerken eksikti. Teşekkür ederim!
the_ccalderon

37

Ben de benzer bir sorun yaşıyordum. ACL şeylerini kullanmıyordum, bu yüzden ihtiyacım yoktu s3:PutObjectAcl.

Benim durumumda yapıyordum ( Sunucusuz Çerçeve YML'de):

- Effect: Allow
  Action:
    - s3:PutObject
  Resource: "arn:aws:s3:::MyBucketName"

Onun yerine:

- Effect: Allow
  Action:
    - s3:PutObject
  Resource: "arn:aws:s3:::MyBucketName/*"

Bu /*, ARN paketinin sonuna bir ekler .

Bu yardımcı olur umarım.


2
/ *
İle

benim için de durum
buydu

10

Sadece S3 yüklemelerinin büyük dosyalarla çalışmasını sağlamaya çalışıyordum. Başlangıçta benim hatam şuydu:

An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied

Sonra daha küçük bir dosya kopyalamayı denedim ve şunu elde ettim:

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

Nesneleri iyi listeleyebiliyordum ama s3:*Rol politikamda izinlerim olmasına rağmen başka bir şey yapamadım . Politikayı şu şekilde yeniden çalıştım:

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

Artık herhangi bir dosyayı yükleyebiliyorum. Paket my-bucketadınızla değiştirin . Umarım bu, bundan başka birine yardım eder.


2
Bu şunu verir: Eksik gerekli alan Müdür :(
Sameera K

2
Ayrıca şu hatayı alıyorum: Zorunlu alan eksik Principal
Karan Sharma

bunu yml'de nasıl yaparsınız
ichimaru

Dikkat: Bu, IAM Kullanıcınıza / rolünüze tüm paketlerdeki anahtarları listelemek için erişim sağlar. Dikkatli kullanın; ideal olarak hiç kullanmaktan kaçının "Resource": "*".
Darian Moody

Eksik gerekli alanla sorunu çözmek için - "Ana": "*", - "Etki" nin altında: "İzin ver"
meck373

9

Bu başka birine yardımcı olursa, benim durumumda bir CMK kullanıyordum (varsayılan aws / s3 anahtarını kullanarak iyi çalıştı)

IAM'deki şifreleme anahtarı tanımıma girmem ve boto3'te oturum açmış programatik kullanıcıyı, "bu anahtarı uygulamalar içinden ve KMS ile entegre AWS hizmetlerini kullanırken verileri şifrelemek ve şifresini çözmek için kullanabilen" kullanıcılar listesine eklemem gerekiyordu.


Bu bana yardımcı oldu. Teşekkürler! İzinlerle aynı hata, ancak aslında şifrelemeydi.
Vicente Rocha

6

KWS şifrelemesiyle korunan bir S3 kovasına yükleme yaparken benzer bir sorunla karşılaştım. Belirli bir s3 anahtarı altında nesnelerin eklenmesine izin veren minimal bir politikam var.

Rolün pakete nesne koymasına izin vermek için politikama aşağıdaki KMS izinlerini eklemem gerekiyordu. (Kesinlikle gerekenden biraz daha fazla olabilir)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "kms:ListKeys",
                "kms:GenerateRandom",
                "kms:ListAliases",
                "s3:PutAccountPublicAccessBlock",
                "s3:GetAccountPublicAccessBlock",
                "s3:ListAllMyBuckets",
                "s3:HeadBucket"
            ],
            "Resource": "*"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "kms:ImportKeyMaterial",
                "kms:ListKeyPolicies",
                "kms:ListRetirableGrants",
                "kms:GetKeyPolicy",
                "kms:GenerateDataKeyWithoutPlaintext",
                "kms:ListResourceTags",
                "kms:ReEncryptFrom",
                "kms:ListGrants",
                "kms:GetParametersForImport",
                "kms:TagResource",
                "kms:Encrypt",
                "kms:GetKeyRotationStatus",
                "kms:GenerateDataKey",
                "kms:ReEncryptTo",
                "kms:DescribeKey"
            ],
            "Resource": "arn:aws:kms:<MY-REGION>:<MY-ACCOUNT>:key/<MY-KEY-GUID>"
        },
        {
            "Sid": "VisualEditor2",
            "Effect": "Allow",
            "Action": [
            <The S3 actions>
            ],
            "Resource": [
                "arn:aws:s3:::<MY-BUCKET-NAME>",
                "arn:aws:s3:::<MY-BUCKET-NAME>/<MY-BUCKET-KEY>/*"
            ]
        }
    ]
}

Harika. İzinleri varsayılan yönetilen aws/s3anahtardan bir role ekli bir IAM politikasına (KMS politikasında değil) kopyaladım ve iyi çalışıyor. Ben KMS Arns karşı gerekli işlemler sadece vardı: kms:Encrypt, kms:Decrypt, kms:ReEncrypt*, kms:GenerateDataKey*, kms:DescribeKey. Sonra sadece standart S3 izinleri.
z0r

3

Yaptığım bir hata için aynı hata mesajını alıyordum: Aşağıdaki gibi doğru bir s3 uri kullandığınızdan emin olun: s3://my-bucket-name/

(Eğer my-kova-adı, aws s3'ünüzün kökünde açıkça görülüyorsa)

Bunda ısrar ediyorum çünkü s3 paketini tarayıcınızdan kopyalayıp yapıştırırken şöyle bir şey elde edersiniz: https://s3.console.aws.amazon.com/s3/buckets/my-bucket-name/?region=my-aws-regiontab=overview

Bu nedenle, s3://buckets/my-bucket-nameaşağıdakileri artıran kullanma hatasını yaptım :

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied


3

Paket için genel erişimi ayarladıysanız ve hala çalışmıyorsa, bucker politikasını düzenleyin ve aşağıdakileri yapıştırın:

    {
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::yourbucketnamehere",
                "arn:aws:s3:::yourbucketnamehere/*"
            ],
            "Effect": "Allow",
            "Principal": "*"
        }
    ]
}

Benim için çalıştı, yeni bir S3 kovası oluşturdum, tamamen halka açık hale getirdim. Yazılabilir put_object, ancak put_object w / ACL = seçeneği yapıldığında başarısız olur. Garip mi?
Doug F

2

Yukarıdaki bir gönderiye benzer şekilde (yönetici kimlik bilgilerini kullanmam dışında) S3 yüklemelerinin 50M'lik büyük bir dosyayla çalışmasını sağlamak için.

Başlangıçta benim hatam şuydu:

An error occurred (AccessDenied) when calling the CreateMultipartUpload operation: Access Denied

Multipart_threshold değerini 50M'nin üzerinde olacak şekilde değiştirdim

aws configure set default.s3.multipart_threshold 64MB

ve bende:

An error occurred (AccessDenied) when calling the PutObject operation: Access Denied

Paket genel erişim ayarlarını kontrol ettim ve hepsine izin verildi. Bu nedenle , tüm S3 paketleri için hesap düzeyinde genel erişimin engellenebileceğini öğrendim :

S3, hesap düzeyinde genel ACL'yi engelleyebilir


1

Benim için süresi dolmuş kimlik doğrulama anahtarları kullanıyordum. Yenilerini üretti ve patlama.


0

S3 şifrelemesi için kendi müşteri tarafından yönetilen KMS anahtarınızı belirlediyseniz, aynı zamanda bayrağı da sağlamanız gerekir --server-side-encryption aws:kms, örneğin:

aws s3api put-object --bucket bucket --key objectKey --body /path/to/file --server-side-encryption aws:kms

Bayrağı eklemezseniz --server-side-encryption aws:kms, cli bir AccessDeniedhata görüntüler


0

Politikalardan Lambda'ya tam s3 erişimi vererek sorunu çözebildim. Lambda için yeni bir rol yapın ve politikayı ona tam S3 Erişimi ile ekleyin.

Umarım bu yardımcı olur.


0

Ben de aynı sorunla karşılaştım. Paketim özeldi ve KMS şifrelemesine sahipti. Role ek KMS izinleri ekleyerek bu sorunu çözebildim. Aşağıdaki liste, gereken minimum rol setidir.

{
  "Version": "2012-10-17",
  "Statement": [
    {
        "Sid": "AllowAttachmentBucketWrite",
        "Effect": "Allow",
        "Action": [
            "s3:PutObject",
            "kms:Decrypt",
            "s3:AbortMultipartUpload",
            "kms:Encrypt",
            "kms:GenerateDataKey"
        ],
        "Resource": [
            "arn:aws:s3:::bucket-name/*",
            "arn:aws:kms:kms-key-arn"
        ]
    }
  ]
}

Referans: https://aws.amazon.com/premiumsupport/knowledge-center/s3-large-file-encryption-kms-key/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.