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)
-
-
用户池和身份池可以复用,所以已经创建的可以跳过用户池和身份池创建
-
用户池
-
用户池是为您的应用程序提供注册和登录选项的用户目录
-
身份池
-
身份池可以授予用户可以获取临时 AWS 凭证来访问 AWS 服务
-
创建身份池
-
修改Cognito身份池认证配置
- 身份池控制面板
- 编辑身份池
- 编辑身份验证提供商
- 找到对应的ES域对应的用户池ID和应用程序客户端ID
- 选择的经过身份验证的角色
- 使用令牌选择角色
- 角色解析-拒绝
-
2.创建Amazon ES
-
创建ES
-
创建时启用Amazon Cognito 身份验证
- 区域(默认)
- Cognito用户池---选定自己创建的用户池
- Cognito身份池---选定自己创建的身份池
- IAM角色名称---CognitoAccessForAmazonES
- 角色策略---AmazonESCognitoAccess
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用户池中创建用户和用户组
-
以管理员身份创建用户账户
-
创建用户组(每个项目或者每个es设置独立的用户组)
- https://docs.aws.amazon.com/zh_cn/cognito/latest/developerguide/cognito-user-pools-user-groups.html
- 创建用户组时,将IAM角色选择刚才创建的角色,并将Precedence设置为0。再创建
参考链接
- 推荐: https://aws.amazon.com/cn/blogs/database/get-started-with-amazon-elasticsearch-service-use-amazon-cognito-for-kibana-access-control/
- https://docs.aws.amazon.com/zh_cn/elasticsearch-service/latest/developerguide/es-cognito-auth.html
- https://docs.aws.amazon.com/zh_cn/cognito/latest/developerguide/what-is-amazon-cognito.html