解决因缺失实例配置文件权限导致的 Amazon RDS Custom 创建不兼容问题
关键要点
在创建 Amazon RDS Custom 实例时,缺少正确的实例配置文件权限可能导致 INCOMPATIBLECREATE 状态。本文将介绍如何排查这些问题,包括识别实例配置文件权限不正确的原因,以及防止和修复 INCOMPATIBLECREATE 错误的步骤。
Amazon 关系数据库服务Amazon RDSCustom 为那些因与第三方应用程序的自定义需求而难以迁移到完全托管服务的客户提供了便利。RDS Custom 为用户节省了管理时间,具有持久性,并能随着业务的增长进行扩展。通过访问和自定义数据库环境及操作系统的工具,RDS Custom 帮助用户满足基于 Oracle 和 SQL Server 数据库引擎构建的遗留、自定义和打包应用程序的要求。
轻蜂加速器使用教程
在创建 RDS Custom 实例时,创建请求中必须提供一个实例配置文件。RDS Custom 在 DB 实例内部使用该配置文件进行内置自动化,以评估实例配置文件的权限。IAM 策略、权限边界、基于资源的策略、虚拟私有云 (VPC) 端点政策和服务控制政策 (SCP) 都可能影响这一点。如果这些中的任何一个策略存在明确拒绝或权限错误,实例可能在配置时进入 INCOMPATIBLECREATE 状态。
在本文中,我们将探讨如何确定 RDS Custom 实例进入 INCOMPATIBLECREATE 状态的原因,以及因实例配置文件权限不正确而导致的问题。
解决方案概述
不正确的实例配置文件权限会导致 RDS Custom 实例进入 INCOMPATIBLECREATE 状态。为了解决此错误,您必须具备正确的 IAM 权限。在接下来的部分中,我们将演示如何通过审查 Amazon RDS 事件来识别不兼容创建状态的原因,并使用这些信息识别任何特定资源权限或 SCP 权限阻止实例创建。
我们还将分享其他可能导致 RDS Custom 中 INCOMPATIBLECREATE 错误的原因及其预防或修复步骤。
INCOMPATIBLECREATE 的可能原因
以下是因缺失实例配置文件权限而导致 RDS Custom 实例在创建过程中进入 INCOMPATIBLECREATE 状态的原因:
原因描述实例配置文件缺少必要的 IAM 策略权限推荐使用 AWS 托管策略。如果使用自管理 IAM 策略,请确保它具有所有必要权限,特别是在使用 RDS Custom SQL Server 或 RDS Custom Oracle 进行实例创建时。IAM 权限边界由于附加在实例配置文件角色上的 IAM 权限边界,权限可能受到限制。确保 RDS Custom 实例所需的 IAM 权限未被限制。基于资源的策略使用基于资源的策略可能会限制权限。检查 Amazon S3、AWS KMS 或 AWS Secrets Manager 是否有策略阻止访问。例如,如果某 S3 存储桶具有拒绝权限,则会出现错误。VPC 端点策略如果 VPC 使用 VPC 端点访问相应的 AWS 服务,VPC 端点策略可能会限制权限。检查是否有任何 VPC 端点策略阻止访问。服务控制政策 (SCPs)SCP 是一种组织策略,可用于管理组织中的权限。SCP 提供了对组织中所有 IAM 用户和角色的最高可用权限的中央控制。如果使用了条件密钥,IAM 策略模拟器即使在特定区域权限已被允许,也会返回拒绝。您可以通过访问 AWS Organizations 控制台 检查您的账户是否存在 SCP 策略。此外,您还可以使用以下 AWS CLI 命令查看:
bash aws organizations listpolicies filter SERVICECONTROLPOLICY
有关 SCP 相关错误的更多故障排除步骤,请参见 SCP 如何与 Deny 一起工作。
在本博客中,我们演示了一个场景,其中 RDS Custom for SQL Server 实例创建因 AWS KMS 中的资源政策而失败。
前提条件
在接下来的部分中,我们将演示可能导致 RDS Custom 中 INCOMPATIBLECREATE 错误的不同场景。如果您想要跟随示例,必须:
向您的 IAM 主体授予所需权限。确保提供可用于 RDS Custom 访问其他 AWS 服务的网络配置。有关具体要求,请参见 手动配置您的 VPC及相关链接。确保您拥有一个 AWS Key Management Service (AWS KMS) 对称加密密钥。确保创建并在启动 RDS Custom 实例时包含所需的 IAM 角色及其 托管策略。安装或更新最新版本的 AWS 命令行界面 (AWS CLI)。操作步骤
在此演示中,我们为 AWS KMS 密钥策略设置了明确拒绝权限,导致在 RDS Custom 实例创建过程中发生 INCOMPATIBLECREATE。
创建具有下列信任关系和 托管策略 的 IAM 角色,命名为 AWSRDSCustomtestrole。 json { Version 20121017 Statement [ { Effect Allow Principal { Service ec2amazonawscom } Action stsAssumeRole } ] }
使用 AWS CLI 创建实例配置文件。 bash aws iam createinstanceprofile instanceprofilename AWSRDSCustomtestrole
将角色添加到实例配置文件。 bash aws iam addroletoinstanceprofile instanceprofilename AWSRDSCustomtestrole rolename AWSRDSCustomtestrole
创建 KMS 密钥并确保您的对称加密密钥策略允许 IAM 角色访问 kmsDecrypt 和 kmsGenerateDataKey 操作。注意:我们为 IAM 角色添加拒绝权限以触发错误。 json { Version 20121017 Id keyconsolepolicy3 Statement [ { Sid Enable IAM User Permissions Effect Allow Principal { AWS arnawsiam123456789root } Action kms Resource } { Sid Deny use of Key Effect Deny Principal { AWS arnawsiam123456789role/AWSRDSCustomtestrole } Action [ kmsEncrypt kmsDecrypt kmsReEncrypt kmsGenerateDataKey kmsDescribeKey ] Resource } ] }
创建 RDS Custom 实例,并使用之前创建的实例配置文件和 KMS 密钥。
在启动实例创建后,RDS Custom 实例进入 INCOMPATIBLECREATE 状态。为了排查问题,可以在 AWS 管理控制台的 Amazon RDS 中 查看日志和事件部分。以下输出来自实例创建。 You cant create the DB instance because of incompatible resources Role attached to instanceprofile missing required permission The IAM instance profile role is missing the following permissions kmsDecrypt action not allowed on kms key [arnawskmsuseast1123456789key/keyid] kmsGenerateDataKey action not allowed on kms key [arnawskmsuseast1123456789key/keyid]
修改 KMS 密钥策略以允许所需的权限。 json { Version 20121017 Id keyconsolepolicy3 Statement [ { Sid Enable IAM User Permissions Effect Allow Principal { AWS arnawsiam123456789root } Action kms Resource } { Sid Allow use of Key Effect Allow Principal { AWS arnawsiam123456789role/AWSRDSCustomtestrole } Action [ kmsEncrypt kmsDecrypt kmsReEncrypt kmsGenerateDataKey kmsDescribeKey ] Resource } ] }
再次创建 RDS Custom 实例,并使用之前创建的实例配置文件和 KMS 密钥。
实例成功创建,没有出现 INCOMPATIBLECREATE。清理
为避免持续费用,请删除使用该解决方案创建的资源:
删除 IAM 角色。删除 AWS KMS 密钥。删除 RDS Custom SQL Server 实例。结论
在本文中,我们回顾了导致 RDS Custom 进入 INCOMPATIBLECREATE 状态的因素。我们还强调了其他在顺利部署 RDS Custom 实例时应考虑的因素。
如果您有任何问题或疑虑,请在评论部分留言。
关于作者
Nirupam Datta 是 AWS 的高级云支持 DBE,在 AWS 工作超过 4 年。拥有 12 年以上的数据库工程和基础架构架构经验,他在 Amazon RDS 核心系统和 Amazon RDS for SQL Server、Amazon Aurora MySQL 方面是主题专家。他为客户提供技术支持,指导他们迁移、优化和在 AWS 云中导航。
Noorul Mahajabeen Mustafa 是 AWS 的云支持 DBE,工作了 25 年。拥有超过 5 年的数据库经验,Noorul 还是 Amazon RDS SQL Server、AWS 数据库迁移服务AWS DMS和 Amazon Aurora MySQL 的主题专家。她为客户提供卓越的技术支持,涉及数据库迁移、RDS 基础设施、监控和安全相关场景。
Dipin Sahadevan 是 AWS 的云支持工程师,工作已超过 2 年。他也是 Amazon RDS for SQL Server 的主题专家,具有 15 年的关系数据库工作经验。在 AWS,他与外部客户合作,处理多种场景,例如故障排除 RDS 基础设施、编写和改善内部文档。
发表评论