Amazon RDS - Kiểm soát truy cập DB
Để truy cập phiên bản Amazon RDS DB, người dùng cần có các quyền cụ thể. Điều này được định cấu hình bằng AWS IAM (Quản lý danh tính và quyền truy cập). Trong hướng dẫn này, chúng ta sẽ xem cấu hình này được thực hiện như thế nào.
Cấu hình bao gồm hai phần.
Authentication
Kiểm soát truy cập
Nó liên quan đến việc tạo tên người dùng, mật khẩu và tạo các khóa truy cập cho người dùng. Với sự trợ giúp của khóa truy cập, có thể thực hiện truy cập theo chương trình vào dịch vụ AWS RDS. Các công cụ SDK và CLI sử dụng các khóa truy cập để đăng nhập bằng mật mã với yêu cầu.
Chúng ta có thể sử dụng Vai trò IAM để xác thực người dùng. Nhưng vai trò không được gắn với bất kỳ người dùng cụ thể nào, thay vào đó bất kỳ người dùng nào cũng có thể đảm nhận vai trò tạm thời và hoàn thành nhiệm vụ được yêu cầu. Sau khi nhiệm vụ kết thúc, vai trò có thể bị thu hồi và người dùng mất khả năng xác thực.
Sau khi người dùng được xác thực, một chính sách được đính kèm với người dùng đó sẽ xác định loại nhiệm vụ mà người đó có thể thực hiện. Dưới đây là một ví dụ về chính sách cho phép tạo một phiên bản RDS DB, trên một phiên bản t2.micro cho DB Engine MySQL.
{
"Version": "2018-09-11",
"Statement": [
{
"Sid": "AllowCreateDBInstanceOnly",
"Effect": "Allow",
"Action": [
"rds:CreateDBInstance"
],
"Resource": [
"arn:aws:rds:*:123456789012:db:test*",
"arn:aws:rds:*:123456789012:og:default*",
"arn:aws:rds:*:123456789012:pg:default*",
"arn:aws:rds:*:123456789012:subgrp:default"
],
"Condition": {
"StringEquals": {
"rds:DatabaseEngine": "mysql",
"rds:DatabaseClass": "db.t2.micro"
}
}
}
]
}
Hành động trên mọi tài nguyên RDS
Trong ví dụ dưới đây, chúng ta thấy một chính sách cho phép bất kỳ hành động mô tả nào trên bất kỳ tài nguyên RDS nào. Biểu tượng * được sử dụng để đại diện cho bất kỳ tài nguyên nào.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AllowRDSDescribe",
"Effect":"Allow",
"Action":"rds:Describe*",
"Resource":"*"
}
]
}
Không cho phép xóa Phiên bản DB
Chính sách dưới đây không cho phép người dùng xóa một phiên bản DB cụ thể.
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"DenyDelete1",
"Effect":"Deny",
"Action":"rds:DeleteDBInstance",
"Resource":"arn:aws:rds:us-west-2:123456789012:db:my-mysql-instance"
}
]
}