AWS Cognito和AWS S3集成?

时间:2018-10-22 15:59:05

标签: amazon-web-services amazon-s3 amazon-cognito

是否可以限制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/*"
        }
    ]
}

2 个答案:

答案 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并检索它们

这可能对您有帮助