[英]Access denied on AWS s3 bucket even with bucket and/or user policy
[英]S3 Bucket Policy to allow S3 Access to Current Authenicated user in AWS Console?
我有一個應用程序,我在其中使用 Cognito 對用戶進行身份驗證並授予對 AWS 控制台的臨時訪問權限,但該用戶能夠查看所有其他存儲桶,我希望該用戶應該能夠查看或訪問他創建的存儲桶。
目前,我已經向 Cognito 用戶提供了 S3FullAccess 策略。 誰能建議我應該附加哪個政策?
根據我的研發,我可以有一些策略可以限制特定用戶或允許特定用戶,但我的用戶將是動態的,所以我不能硬編碼這些值以及允許/限制訪問特定存儲桶的策略,我只想要創建存儲桶的用戶應該無法訪問其他用戶。
這是我發現的東西
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:ListAllMyBuckets",
"s3:GetBucketLocation"
],
"Resource": "*"
},
{
"Effect": "Allow",
"Action": "s3:ListBucket",
"Resource": "arn:aws:s3:::bucket-name",
"Condition": {
"StringLike": {
"s3:prefix": [
"",
"home/",
"home/${aws:userid}/*"
]
}
}
},
{
"Effect": "Allow",
"Action": "s3:*",
"Resource": [
"arn:aws:s3:::bucket-name/home/${aws:userid}",
"arn:aws:s3:::bucket-name/home/${aws:userid}/*"
]
}
]
}
但這是列出所有存儲桶,唯一可訪問的存儲桶是上面代碼中的內容,我想要新用戶,它不應該顯示任何內容,並且在創建時,它應該顯示只有
這並不容易,您需要創建自己的策略並強制執行一些約定。 您有 3 個選擇。
但首先,如果每個用戶只需要自己的 S3 空間,請查看 S3 前綴 [此處]( https://aws.amazon.com/blogs/mobile/understanding-amazon-cognito-authentication-part-3-roles-and- policy/ ) 此外,您可以在 S3 資源存儲桶上執行此操作。 我有一個在 gitlab 中執行此操作的模板
現在回到回答你的問題。
選項1; 當他們創建“所有者”標簽等於他們的身份的存儲桶時,他們需要設置一個標簽。 我刪除了這個,因為盡管被列在 IAM 政策中,但我很確定它不適用於 S3。
選項二:桶名前綴等於他們的身份。
然后您就可以使用 IAM Policy 中的變量和標簽功能了。 在這里閱讀
請注意,coginto 用戶是網絡聯合身份,因此變量 aws:username 對您不可用。 使用 aws:userid 變量,值將是角色 id:caller-specified-role-name 其中角色 id 是角色的唯一 id,調用者指定的角色名稱由傳遞給 AssumeRoleWithWebIdentity 的 RoleSessionName 參數指定要求
我目前找不到方法的鏈接。 但從這里是一個詳細的描述。
問:如何控制聯合用戶在登錄控制台后可以執行的操作? 當您使用 AssumeRole API 為聯合用戶請求臨時安全憑證時,您可以選擇在請求中包含訪問策略。 聯合用戶的權限是隨請求傳遞的訪問策略授予的權限與附加到所承擔的 IAM 角色的訪問策略的交集。 隨請求傳遞的訪問策略無法提升與所承擔的 IAM 角色關聯的權限。 當您使用 GetFederationToken API 為聯合用戶請求臨時安全憑證時,您必須隨請求提供訪問控制策略。 聯合用戶的權限是隨請求傳遞的訪問策略授予的權限與附加到用於發出請求的 IAM 用戶的訪問策略的交集。 隨請求傳遞的訪問策略無法提升與用於發出請求的 IAM 用戶關聯的權限。 這些聯合用戶權限適用於 API 訪問和在 AWS 管理控制台內執行的操作。
這種方法的好處是您可以以編程方式創建訪問策略。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.