简短描述
用户可以使用 IAM 用户或角色凭证以及身份验证令牌连接到 Amazon RDS 数据库实例或集群。IAM 数据库身份验证比原生身份验证方法更安全,这是因为:
IAM 数据库身份验证令牌是使用您的 AWS 访问密钥生成的。您不需要存储数据库用户凭证。
身份验证令牌的生命周期为 15 分钟,因此您不需要进行密码重置。
IAM 数据库身份验证需要安全套接字层 (SSL) 连接。这意味着与数据库实例之间传输的所有数据都经过加密。
如果您的应用程序是在 Amazon Elastic Compute Cloud (Amazon EC2) 上运行,则您可以使用 EC2 实例配置文件凭证来访问数据库。您不需要在您的实例上存储数据库密码。
要使用 IAM 角色设置 IAM 数据库身份验证,请按照以下步骤操作:
-
在数据库实例上启用 IAM 数据库身份验证。
-
创建一个使用 AWS 身份验证令牌的数据库用户账户。
-
添加一个 IAM 策略以将该数据库用户映射到该 IAM 角色。
-
将该 IAM 角色附加到该 EC2 实例。
-
生成一个 AWS 身份验证令牌以标识该 IAM 角色。
-
下载 SSL 根证书文件或证书捆绑包文件。
-
使用 IAM 角色凭证和身份验证令牌或 SSL 证书来连接到数据库实例。
解决方法
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请确保您运行的是最新版本的 AWS CLI。
在开始之前,请确保您已经启动了一个支持 IAM 数据库身份验证的数据库实例以及一个要连接到该数据库的 EC2 实例。
在 RDS 数据库实例上启用 IAM 数据库身份验证
您可以使用 Amazon RDS 控制台、AWS 命令行界面 (AWS CLI) 或 Amazon RDS API 来启用 IAM 数据库身份验证。如果您使用 Amazon RDS 控制台来修改数据库实例,请选择 Apply Immediately (立即应用)以立即启用 IAM 数据库身份验证。启用 IAM 身份验证需要短暂停机。有关哪些修改需要停机的更多信息,请参阅数据库实例的设置。
注意:如果选择 Apply Immediately(立即应用),则在维护时段内也会立即应用任何待处理修改。这可能会导致您的实例长时间停机。有关更多信息,请参阅使用“立即应用”设置。
创建一个使用 AWS 身份验证令牌的数据库用户账户
- 通过运行以下命令以连接到该数据库实例或集群终端节点。输入主密码以登录。
$ mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p
2. 创建一个使用 AWS 身份验证令牌而不是密码的数据库用户账户:
CREATE USER {dbusername} IDENTIFIED WITH AWSAuthenticationPlugin as ‘RDS’;
3. (可选)运行以下命令以要求用户通过 SSL 连接到数据库:
GRANT USAGE ON . TO ‘{dbusername}’@’%'REQUIRE SSL;
4. 运行退出命令以关闭 MySQL。然后,退出数据库实例。
创建一个允许 Amazon RDS 访问的 IAM 角色
-
打开 IAM 控制台,然后从导航窗格中选择 Roles(角色)。
-
依次选择创建角色、AWS 服务、EC2。
-
对于选择使用案例,请选择 EC2,然后选择下一步: 权限。
-
在搜索栏中输入 RDS。然后,选择基于身份的策略,例如 AmazonRDSFullAccess。 或者,使用自定义的授予更少权限的 Amazon RDS IAM 策略。
-
选择下一步:审核。
-
对于角色名称,输入此 IAM 角色的名称。
-
选择 Create Role(创建角色)。
添加一个 IAM 策略,将该数据库用户映射到 IAM 角色
-
从 IAM 角色列表中,选择新创建的 IAM 角色。
-
选择添加内联策略。
-
输入创建和使用 IAM 策略以进行 IAM 数据库访问中的策略。
注意:请务必使用您的数据库资源的详细信息来编辑资源值,例如您的数据库实例标识符和数据库用户名。
-
选择查看策略。
-
对于 Name (名称),输入策略名称。
-
选择 Create policy(创建策略)。
将 IAM 角色附加到 EC2 实例
-
打开 Amazon EC2 控制台。
-
选择您将用于连接到 Amazon RDS 的 EC2 实例。
-
附加新创建的 IAM 角色至 EC2 实例。
-
使用 SSH 连接到您的 EC2 实例。
生成 AWS 身份验证令牌以标识 IAM 角色
连接到您的 EC2 实例后,请运行以下 AWS 命令行界面 (AWS CLI) 命令以生成身份验证令牌。复制并存储身份验证令牌以备将来使用。
$ aws rds generate-db-auth-token --hostname {db or cluster endpoint} --port 3306 --username {db username}
注意:创建 15 分钟后,此令牌将过期。
下载 SSL 根证书文件或证书捆绑包文件
运行以下命令以下载适用于所有区域的根证书:
$ wget https://s3.amazonaws.com/rds-downloads/rds-ca-2019-root.pem
使用 IAM 角色凭证和身份验证令牌连接到 RDS 数据库实例
下载证书文件后,请运行以下命令之一以通过 SSL 来连接到该数据库实例。
注意 :如果您的应用程序不接受证书链,则运行以下命令以下载证书捆绑包:
$ wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
RDSHOST=“rdsmysql.abcdefghijk.us-west-2.rds.amazonaws.com”
TOKEN="$(aws rds generate-db-auth-token --hostname $RDSHOST --port 3306 --region us-west-2 --username {db username})"
根据您正在使用的证书(RootCA 或 Bundle),运行以下命令之一:
RootCA 命令:
mysql --host=
R
D
S
H
O
S
T
−
−
p
o
r
t
=
3306
−
−
s
s
l
−
c
a
=
/
s
a
m
p
l
e
d
i
r
/
r
d
s
−
c
a
−
2019
−
r
o
o
t
.
p
e
m
−
−
e
n
a
b
l
e
−
c
l
e
a
r
t
e
x
t
−
p
l
u
g
i
n
−
−
u
s
e
r
=
d
b
u
s
e
r
n
a
m
e
−
−
p
a
s
s
w
o
r
d
=
RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-ca-2019-root.pem --enable-cleartext-plugin --user={db username} --password=
RDSHOST−−port=3306−−ssl−ca=/sampledir/rds−ca−2019−root.pem−−enable−cleartext−plugin−−user=dbusername−−password=TOKEN
Bundle 命令:
mysql --host=
R
D
S
H
O
S
T
−
−
p
o
r
t
=
3306
−
−
s
s
l
−
c
a
=
/
s
a
m
p
l
e
d
i
r
/
r
d
s
−
c
o
m
b
i
n
e
d
−
c
a
−
b
u
n
d
l
e
.
p
e
m
−
−
e
n
a
b
l
e
−
c
l
e
a
r
t
e
x
t
−
p
l
u
g
i
n
−
−
u
s
e
r
=
d
b
u
s
e
r
n
a
m
e
−
−
p
a
s
s
w
o
r
d
=
RDSHOST --port=3306 --ssl-ca=/sample_dir/rds-combined-ca-bundle.pem --enable-cleartext-plugin --user={db username} --password=
RDSHOST−−port=3306−−ssl−ca=/sampledir/rds−combined−ca−bundle.pem−−enable−cleartext−plugin−−user=dbusername−−password=TOKEN
使用 IAM 角色凭证和 SSL 证书连接到 RDS 数据库实例
下载证书文件后,请通过 SSL 连接到该数据库实例。有关更多信息,请参阅连接到运行 MySQL 数据库引擎的数据库实例。