![](/img/trans.png)
[英]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.