Amazon Elasticsearch Service入门-使用Amazon Cognito进行Kibana访问控制

用户需求

  • ES & Kibana安全规范

什么是 Amazon Cognito?

  • Amazon Cognito 为您的 Web 和移动应用程序提供身份验证、授权和用户管理。您的用户可使用用户名和密码直接登录,也可以通过第三方(例如 Facebook、Amazon、Google 或 Apple)登录

  • Amazon Cognito 的两个主要组件是用户池和身份池。用户池是为您的应用程序提供注册和登录选项的用户目录。使用身份池,您可以授予用户访问其他 AWS 服务的权限。您可以单独或配合使用身份池和用户池

1.配置Cognito

  • Cognito验证流程

    • 在第一步中,您的应用程序用户通过用户池登录,并在成功进行身份验证后收到用户池令牌

    • 接下来,您的应用程序通过身份池用用户池令牌交换 AWS 凭证

    • 最后,您的应用程序用户可以使用这些 AWS 凭证来访问其他 AWS 服务(如 Amazon S3 或 DynamoDB)

    image

  • 用户池和身份池可以复用,所以已经创建的可以跳过用户池和身份池创建

  • 用户池

  • 用户池是为您的应用程序提供注册和登录选项的用户目录

  • 身份池

  • 身份池可以授予用户可以获取临时 AWS 凭证来访问 AWS 服务

2.创建Amazon ES

3.修改ES访问策略

  • 更新ES访问策略
    • Principal:使用用户池和身份证验证
    • Action:允许ES访问的请求类型(Get,Post等)
    • Resource:指定的ES名称
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "AWS": "arn:aws:sts::account-id:assumed-role/Cognito_<user_pool>Auth_Role/CognitoIdentityCredentials"
      },
      "Action": "es:ESHttp*",
      "Resource": "arn:aws:es:region:account-id:domain/domain-name/*"
    }
  ]
}

4.创建Kibana访问ES的策略及角色

  • 默认用户池中的用户对于配置了此用户池的ES域都有访问权
  • 需要针对于ES给指定用户授权,其他未授权用户无法访问
  • 权限控制需要使用用户组和IAM角色配置完成
  • Kibana建议使用esHttpGet请求方式
  • 创建ES访问策略
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": "es:ESHttpGet",
            "Resource": "arn:aws:es:region:account-id:domain/domain-name/*"
        }
    ]
}
  • 创建访问Kibana访问ES角色-提供给Cognito中的用户组使用
    • 因为ES服务未在角色列表中,所以选择EC2服务作为占位服务
    • 选择刚才创建的Kibana访问ES的策略
    • 编辑信任关系---将原有内容替换以下内容
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Principal": {
        "Federated": "cognito-identity.amazonaws.com"
      },
      "Action": "sts:AssumeRoleWithWebIdentity"
    }
  ] 
}

5.在Cognito用户池中创建用户和用户组

参考链接

原文地址:https://www.cnblogs.com/zhanmeiliang/p/13193567.html