AWS S3儲存桶跨帳戶原則與內部帳戶混合

AWS S3儲存桶跨帳戶原則與內部帳戶混合

我們使用 s3 儲存桶在兩家公司之間共用檔案。我們建立了私人 S3 儲存桶,並且我們為使用該儲存桶的應用程式指定了專用使用者(使用它的 aws_key 和 aws_secret)。我們發現我們無法存取 getObject,但我們成功地將 Object 放入儲存桶中。

此外,我還建立了具有此儲存桶權限的角色並將其指派給 application_user,但它沒有解決問題。

所以主要目標是從外部帳戶和內部 IAM 使用者讀取、列出、放置對同一個 S3 儲存桶的存取權。我要指出的是,外部公司現在可以透過此政策存取它。我無權存取外部 aws 帳戶。

下面是s3的資源策略。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "SharedS3Bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": [
                    "arn:aws:iam::199999999999:root",    <--- external account 
                    "arn:aws:iam::111111111111:user/application_user" <-- our application user
                ]
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetBucketAcl",
                "s3:GetObject",
                "s3:GetObjectAcl",
                "s3:DeleteObject",
                "s3:PutObject"
            ],
            "Resource": [
                "arn:aws:s3:::shared-bucket",
                "arn:aws:s3:::shared-bucket/*"
            ]
        }
    ]
}

答案1

S3 權限有點複雜,因為您不僅擁有儲存桶權限還要擔心目的您上傳的內容有其自己的權限。

你的桶策略上面允許兩家公司上傳對象,並且它的工作原理如您所見。但是,當外部公司上傳物件時,它是預設權限只允許作者閱讀,即由外部公司提供。即使它在你的預設儲存桶如果是別人上傳的,則無法閱讀。這有點違反直覺。

解決方案是確保上傳的物件具有允許兩個帳戶讀取的 ACL。

S3 上傳對話框

您還需要新增s3:PutObjectAcl到儲存桶策略權限清單中才能使其發揮作用。

同樣,如果您從命令列上傳,則可以在上傳後修改物件 acl aws s3api put-object-acl

希望有幫助:)

相關內容