promenadeco / doctrine-aws-auth
使用 IAM 对 Doctrine DBAL/ORM 进行 RDS 认证
1.1.1
2023-03-02 20:34 UTC
Requires
- php: >=7.4
- aws/aws-sdk-php: ^3.225
- doctrine/dbal: ^3.3
- psr/cache: ^3.0
This package is not auto-updated.
Last update: 2024-09-27 04:07:20 UTC
README
此库提供使用 IAM 对 Amazon RDS 数据库进行认证的功能,用于 Doctrine DBAL / ORM。
功能
- 使用短期令牌通过 IAM 进行 RDS 认证
- 令牌缓存(默认为 10 分钟)
- 支持 EC2 和 ECS 环境
- 支持 PDO 和 MySQLi 驱动程序
用法
使用 Composer 安装包
composer require promenadeco/doctrine-aws-auth
使用以下环境变量启用 Doctrine ORM 的明文 IAM 认证
AWS_REGION=us-east-1 RDS_USE_IAM=1 LIBMYSQL_ENABLE_CLEARTEXT_PLUGIN=1
Doctrine ORM
在 Doctrine ORM 中注册 DBAL 驱动程序中间件
use Doctrine\ORM\EntityManager; use Doctrine\ORM\ORMSetup; use Promenade\Doctrine\Aws\Auth\Driver\IamMiddleware; use Promenade\Doctrine\Aws\Auth\Token\RdsToken; // ... $ormConfig = ORMSetup::createAnnotationMetadataConfiguration([ 'src/Entity', ]); $tokenProvider = new RdsToken(); $ormConfig->setMiddlewares([ new IamMiddleware($tokenProvider), ]); $entityManager = EntityManager::create( [ 'host' => 'example-db.abcdefghijkl.us-east-1.rds.amazonaws.com', 'port' => 3306, 'user' => 'iam_user', 'dbname' => 'test_db', 'driver' => 'pdo_mysql', 'driverOptions' => [ PDO::MYSQL_ATTR_SSL_CA => '/etc/ssl/certs/ca-certificates.crt', PDO::MYSQL_ATTR_SSL_VERIFY_SERVER_CERT => false ], ], $ormConfig );
加密
连接加密对于以明文形式安全传输凭证是必要的。
不同驱动程序的 SSL 配置不同,例如
[ // ... 'driver' => 'mysqli', 'driverOptions' => [ 'flags' => MYSQLI_CLIENT_SSL, ], ]
缓存
激活令牌缓存以保持速率限制并提高性能
use Promenade\Doctrine\Aws\Auth\Token\CachingProxy; // ... $tokenProvider = new CachingProxy($tokenProvider, $ormConfig->getMetadataCache());
默认情况下,令牌有效期为 15 分钟,缓存 10 分钟以便提前更新。
Symfony
在 config/services.yaml
中注册 DBAL 驱动程序中间件
services: Promenade\Doctrine\Aws\Auth\Token\TokenProvider: class: Promenade\Doctrine\Aws\Auth\Token\RdsToken Promenade\Doctrine\Aws\Auth\Driver\IamMiddleware: tags: ['doctrine.middleware']
缓存
激活令牌缓存并根据需要调整其生命周期
services: Promenade\Doctrine\Aws\Auth\Driver\IamMiddleware: arguments: $tokenProvider: '@Promenade\Doctrine\Aws\Auth\Token\CachingProxy' Promenade\Doctrine\Aws\Auth\Token\RdsToken: arguments: $lifetime: 15 Promenade\Doctrine\Aws\Auth\Token\CachingProxy: arguments: $lifetime: 14
确保令牌在缓存过期后一段时间内仍然有效,以补偿潜在的时钟漂移。
限制
IAM 认证依赖于数据库客户端以明文形式发送凭证而不进行散列。
此实现仅在 MySQL 上进行了测试。其他 RDBMS 可能有自己的独特限制。
资源
包含有用信息的相关资源
贡献
欢迎提交修复和改进的 Pull Requests!
许可证
版权所有 © Promenade Group。保留所有权利。
根据 Apache License, Version 2.0 许可。