【问题标题】:AWS RDS - IAM authentication implications?AWS RDS - IAM 身份验证影响?
【发布时间】:2017-12-08 23:55:08
【问题描述】:

我正在设置 AWS RDS 集群,并且正在研究如何使用凭证连接到集群。选项似乎是像往常一样通过用户名/密码或使用 IAM 并使用 15 分钟令牌。

http://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.html

提供给 EC2 的 IAM 实例角色还可以指定允许它连接到集群,所以这看起来很不错,我想在这种情况下不需要令牌。

在这种情况下是否有人使用 IAM,或者普通用户/密码更简单?该文档指出,在使用 IAM 时,您应该将连接限制为每秒 20 个或更低。我很难评估这是否低。有人知道 IAM 身份验证对 AWS RDS 性能的影响吗?

【问题讨论】:

  • 直觉上,我不认为它会影响整体的“性能”,但是新连接建立的速度过快可能会通过延迟建立或导致间歇性错误来影响吃掉连接的能力当连接。一个设计良好的应用程序应该是池/重用数据库句柄,每秒 20 个新连接不应该是正常操作。不幸的是,我还没有测试过这个功能。
  • @Ktrum - 你最终是如何解决这个问题的?我现在处于同一时刻,无法决定。实际上,也在寻找一些示例代码。如果你能遮住一些光线会很棒。谢谢。
  • 嗨,我切换到 Postgres,所以无论如何我都无法使用 IAM 身份验证 :) 所以现在我将密码作为安全字符串保存在 Parameter Store 中。工作正常。在我链接到的页面底部,他们有建议您何时应该使用它。如果您不确定我会使用常规用户名/密码。特别是如果您将使用不同的数据库或将来可能会切换。

标签: amazon-web-services amazon-rds amazon-iam


【解决方案1】:

准备 EC2 实例

安装以下包和命令

yum install curl mysql -y
service mysqld start
chkconfig mysqld on

设置数据库以使用 IAM

# Connect to DB
RDS_HOST="db-with-iam-support.ct5b4uz1gops.eu-central-1.rds.amazonaws.com"
REGION="eu-central-1"
# mysql -h {database or cluster endpoint} -P {port number database is listening on} -u {master db username} -p
mysql -h ${RDS_HOST} -P 3306 -u dbuser -p

运行此命令以创建将使用 AWS 身份验证令牌而不是密码的数据库用户帐户:

CREATE USER 'db_iam_user' IDENTIFIED WITH AWSAuthenticationPlugin as 'RDS';

(可选)运行此命令以要求用户使用 SSL 连接到数据库:在此处了解更多信息

GRANT USAGE ON *.* TO 'db_iam_user'@'%'REQUIRE SSL;

运行“exit”命令关闭MySQL

IAM 内联政策

允许数据库访问用户的内联策略,相应地更改数据库 arn

{
    "Version": "2012-10-17",
    "Statement": [
       {
          "Effect": "Allow",
          "Action": [
              "rds-db:connect"
          ],
          "Resource": [
              "arn:aws:rds-db:eu-central-1:111111111111:dbuser:db-RWXD2T7YIWZU4VI2FBHSM2GE24/db_iam_user"
          ]
       }
    ]
}

下载 SSL 证书 下载 AWS RDS 证书 pem 文件,

mkdir -p /var/mysql-certs/
cd /var/mysql-certs/
curl -O https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem

生成 AWS 身份验证令牌

身份验证令牌由数百个字符组成。它在命令行上可能很笨拙。解决此问题的一种方法是将令牌保存到环境变量中,然后在连接时使用该变量。

TOKEN="$(aws rds generate-db-auth-token --hostname ${RDS_HOST} --port 3306 --region ${REGION} --username db_iam_user)"

连接到数据库

mysql --host="${RDS_HOST}" \
      --port=3306 \
      --user=db_iam_user \
      --ssl-ca=/var/mysql-certs/rds-combined-ca-bundle.pem \
      --ssl-verify-server-cert \
      --enable-cleartext-plugin \
      --password="$TOKEN

参考:https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/UsingWithRDS.IAMDBAuth.IAMPolicy.html

https://aws.amazon.com/premiumsupport/knowledge-center/users-connect-rds-iam/

【讨论】:

    猜你喜欢
    • 2020-12-21
    • 2019-09-14
    • 2021-06-07
    • 1970-01-01
    • 2018-01-21
    • 1970-01-01
    • 2018-11-23
    • 1970-01-01
    • 2021-05-14
    相关资源
    最近更新 更多