为 RDS 代理配置 IAM 身份验证
要在 Amazon RDS 中为 RDS 代理设置 Amazon Identity and Access Management(IAM)身份验证,请创建并配置用于授予必要权限的 IAM 策略。
本主题提供了为 RDS 代理配置 IAM 身份验证的步骤,包括创建所需的 IAM 策略并将其附加到 IAM 角色。
提示
仅当您想创建自己的 IAM 角色时,才需要执行此过程。否则,RDS 可以在您设置代理时自动创建所需的角色,因此您可以跳过这些步骤。
先决条件
在为 RDS 代理设置 IAM 身份验证之前,请确保您具有以下各项:
-
Amazon Secrets Manager:至少一个包含数据库凭证的存储密钥。有关创建密钥的说明,请参阅设置 RDS 代理的数据库凭证。
如果您使用端到端 IAM 身份验证,则不需要这样做。
-
IAM 权限:具有在 Amazon Secrets Manager 中创建和管理 IAM 策略、角色和密钥的权限的 IAM 角色或用户。
创建端到端 IAM 策略
使用端到端 IAM 身份验证时,RDS 代理使用 IAM 身份验证连接到您的数据库,而不是从 Secrets Manager 检索凭证。这需要为您的 IAM 角色配置您想要与代理一起使用的数据库账户的 rds-db:connect 权限。
要使用 IAM 对 RDS 代理进行数据库身份验证,请创建一个 IAM 角色,并附加授予必要数据库连接权限的策略。
使用代理创建用于端到端 IAM 身份验证的角色
登录 Amazon Web Services 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
为该角色创建权限策略。有关一般步骤,请参阅创建 IAM 策略(控制台)。
将此策略粘贴到 JSON 编辑器中,并进行以下更改:
-
替换您自己的账户 ID。
-
将
us-east-2替换为代理必须位于的区域。 -
用您想使用的 ID 和用户名替换数据库资源 ID 和用户名。RDS 实例和 Aurora clusters的资源 ID 格式有所不同。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rds-db:connect", "Resource": [ "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1", "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2" ] } ] } -
-
创建角色并向其附加权限策略。有关一般步骤,请参阅创建向 Amazon 服务委派权限的角色。
对于可信实体类型,选择 Amazon 服务。在用例下,选择 RDS,然后为用例选择 RDS - 向数据库添加角色。
-
对于权限策略,选择您创建的策略。
-
对于选择可信实体,为该角色输入以下信任策略:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
要使用 Amazon CLI 创建角色,请发送以下请求:
aws iam create-role \ --role-namemy_e2e_iam_role_name\ --assume-role-policy-document '{"Version":"2012-10-17", "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
然后,将策略附加到该角色:
aws iam put-role-policy \ --role-namemy_e2e_iam_role_name\ --policy-namee2e_iam_db_connect_policy\ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "rds-db:connect", "Resource": [ "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_1", "arn:aws:rds-db:us-east-2:account_id:dbuser:db_instance_resource_id/db_user_name_2" ] } ] }'
为端到端 IAM 身份验证配置 IAM 角色和权限后,即可创建 DefaultAuthScheme 设置为 IAM_AUTH 的代理。此代理使用 IAM 直接对数据库进行身份验证,无需使用 Secrets Manager 密钥。有关说明,请参阅为 Amazon Aurora 创建代理。
使用端到端 IAM 身份验证时,请确保按照使用 IAM 身份验证创建数据库账户中所述为数据库用户配置了 IAM 身份验证。
创建用于访问 Secrets Manager 的 IAM 策略
要支持 RDS 代理从 Secrets Manager 检索数据库凭证,请创建一个 IAM 角色,并使用授予必要权限的策略。
创建用于访问您的密钥以便与代理一起使用的角色
登录 Amazon Web Services 管理控制台,然后通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 -
为该角色创建权限策略。有关一般步骤,请参阅创建 IAM 策略(控制台)。
将此策略粘贴到 JSON 编辑器中,并进行以下更改:
-
替换您自己的账户 ID。
-
将
us-east-2替换为代理所在的区域。 -
将密钥名称替换为您创建的名称。有关更多信息,请参阅 Specifying KMS keys in IAM policy statements。
-
将 KMS 密钥 ID 替换为您用于加密 Secrets Manager 密钥(默认密钥或您自己的密钥)的密钥 ID。
-
-
创建角色并向其附加权限策略。有关一般步骤,请参阅创建向 Amazon 服务委派权限的角色。
对于可信实体类型,选择 Amazon 服务。在用例下,选择 RDS,然后为用例选择 RDS - 向数据库添加角色。
-
对于权限策略,选择您创建的策略。
-
对于选择可信实体,为该角色输入以下信任策略:
要使用 Amazon CLI 创建角色,请发送以下请求:
aws iam create-role \ --role-namemy_role_name\ --assume-role-policy-document '{"Version": "2012-10-17", "Statement":[{"Effect":"Allow","Principal":{"Service":["rds.amazonaws.com"]},"Action":"sts:AssumeRole"}]}'
然后,将策略附加到该角色:
aws iam put-role-policy \ --role-namemy_role_name\ --policy-namesecret_reader_policy\ --policy-document '{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": "secretsmanager:GetSecretValue", "Resource": [ "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_1", "arn:aws:secretsmanager:us-east-2:account_id:secret:secret_name_2" ] }, { "Sid": "VisualEditor1", "Effect": "Allow", "Action": "kms:Decrypt", "Resource": "arn:aws:kms:us-east-2:account_id:key/key_id", "Condition": { "StringEquals": { "kms:ViaService": "secretsmanager.us-east-2.amazonaws.com" } } } ] }'
配置了 IAM 角色和权限后,您现在可以创建代理并将其与该角色关联。这可让代理安全地从 Amazon Secrets Manager 中检索数据库凭证,并为您的应用程序启用 IAM 身份验证。有关说明,请参阅为 Amazon Aurora 创建代理。