AWS 儲存桶策略 - 何時使用它

AWS 儲存桶策略 - 何時使用它

我正在嘗試建立一個儲存桶策略,該策略將授予來自 ec2 或 ecs 實例的存取權限,以便授予它們對特定儲存桶的 putObject 權限。

我有幾個基本問題:

1) 如果您只想授予從 ec2 到相同帳戶內的儲存桶的存取權限,那麼使用儲存桶策略是否正確?這些文件似乎引用了許多跨帳戶存取的內容。

2)實現這目標的原則是什麼?例如,我是否可以設定一個原則,簡單地說「授予此 aws 帳戶中任何資源的存取權」?

3) 我透過在原理中指定 ec2 實例的 IAM 角色來使其工作(見下文)。但這是首選方法嗎?

{
"Version": "2012-10-17",
"Id": "Policy1563569774763",
"Statement": [
    {
        "Sid": "Stmt1563569772515",
        "Effect": "Allow",
        "Principal": {
            "AWS": [
                "arn:aws:iam::XXXX:role/S3_Read_All"
            ]
        },
        "Action": "s3:PutObject",
        "Resource": "arn:aws:s3:::some-test-bucket-12345/*"
    }
]

}

先感謝您!我發現很難理解這一點。

答案1

你的直覺是對的。如果您只想授予對同一帳戶中的儲存桶的存取權限,那麼可能更簡單使用 IAM 策略。您可以將這樣的策略附加到角色,它將依序附加到 EC2 執行個體。

需要注意的一點是,考慮第一個連結中的政策:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ListObjectsInBucket",
            "Effect": "Allow",
            "Action": ["s3:ListBucket"],
            "Resource": ["arn:aws:s3:::bucket-name"]
        },
        {
            "Sid": "AllObjectActions",
            "Effect": "Allow",
            "Action": "s3:*Object",
            "Resource": ["arn:aws:s3:::bucket-name/*"]
        }
    ]
}

第一個語句「ListObjectsInBucket」將資源設定到儲存桶。 ARN 是arn:aws:s3:::bucket-name*沒有)。第二條語句將 arn 設定為arn:aws:s3:::bucket-name/*。 There/*的意思是「bucket-name 中的所有物件」。有些 IAM 操作適用於儲存桶,其他操作適用於物件。

您也可以使用前綴,例如arn:aws:s3:::bucket-name/prefix*,它將允許存取名稱以“prefix”開頭的所有物件。請記住,S3 中物件的名稱是全名,包括路徑標記(“/”),因此是“/path/to/object”,而不僅僅是“object”。 S3 中沒有目錄。

另一件事是,當您將角色附加到 EC2 執行個體時,您向有權存取該執行個體的任何人授予與該角色相同的權限。因此,請確保任何可以登入 EC2 執行個體的使用者也應該有權存取 S3 儲存桶。

請記住,物件(使用者、ec2 實例、lambda 函數等)對儲存桶的存取等級由 IAM 策略和儲存桶策略組合產生的策略集給出。且 Deny 語句具有優先權。當物件和儲存桶位於同一帳戶時,您只需使用其中之一,並且 IAM 策略可能是自然的選擇。在跨帳戶存取儲存桶策略中,基本上用於向其他帳戶授予對儲存桶的存取權限。在另一個帳戶中也設定了 IAM 政策。

相關內容