是否可以限制AWS S3对象,以便只有通过AWS Cognito进行身份验证的用户才能访问该对象?我还没有想办法做到这一点,但是对我来说,这显然是一个用例。
我想通过AWS S3托管一个网站并限制一些对象(我的页面),以便如果用户直接访问它们,则会出现权限被拒绝的错误。如果用户通过AWS Cognito进行了身份验证,则该对象应该可用。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Deny access to objects in the secured directory.",
"Effect": "Deny",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::domain.com/secured/*"
},
{
"Sid": "Only allowed authenticated users access to a specific bucket.",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::x:role/Cognito_Domain_IdP_Auth_Role"
},
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::domain.com/secured/*"
},
{
"Sid": "Read access for web hosting.",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::domain.com/*"
}
]
}
答案 0 :(得分:0)
您可以将角色传递给通过cognito认证的用户,然后允许他们执行某些操作。
为角色映射创建角色
为每个角色添加适当的信任策略非常重要,这样Amazon Cognito只能为您的身份池中经过身份验证的用户采用该策略。这是这种信任策略的示例:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "",
"Effect": "Allow",
"Principal": {
"Federated": "cognito-identity.amazonaws.com"
},
"Action": "sts:AssumeRoleWithWebIdentity",
"Condition": {
"StringEquals": {
"cognito-identity.amazonaws.com:aud": "us-east-1:12345678-dead-beef-cafe-123456790ab"
},
"ForAnyValue:StringLike": {
"cognito-identity.amazonaws.com:amr": "authenticated"
}
}
}
]
}
授予通行证角色权限
要允许IAM用户设置角色的权限超过该用户在身份池上的现有权限,请授予该用户iam:PassRole权限,以将该角色传递给set-identity-pool-roles API。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "Stmt1",
"Effect": "Allow",
"Action": [
"iam:PassRole"
],
"Resource": [
"arn:aws:iam::123456789012:role/myS3WriteAccessRole"
]
}
]
}
更多信息在这里: https://docs.aws.amazon.com/cognito/latest/developerguide/role-based-access-control.html
答案 1 :(得分:0)
是的,您可以实现 但是为此,您无法通过控制台直接配置
→首先,您需要创建对Cognito和S3存储桶具有受限访问权限的策略
→创建一个附加角色
→将它们分配给您的EC2或Lambda
→使用Cognito对应用程序中的用户进行身份验证
→使用S3对象的已签名URL并检索它们
这可能对您有帮助