6

AWS は、Amazon Aurora (サーバーレスも?) を含む、サポートされている一部の RDS エンジンに対して、完全に構成され、すぐに使用できるローテーション サポートを提供しています。

CloudFormation テンプレートでパスワードのローテーションをセットアップしようとしていますAWS::SecretsManager::RotationSchedule(これは完全に機能するテンプレートではなく、単なる図であることに注意してください):

  DBCluster:
    Type: AWS::RDS::DBCluster
    Properties:
      Engine        : aurora
      EngineMode    : serverless
      EngineVersion : 5.6.10a

  Secret:
    Type: AWS::SecretsManager::Secret
    Properties:
      GenerateSecretString:
        SecretStringTemplate: '{"username": "admin"}'
        GenerateStringKey: password
        PasswordLength: 20
        ExcludeCharacters: '"@/\'

  SecretTargetAttachment:
    Type: AWS::SecretsManager::SecretTargetAttachment
    Properties:
      SecretId: !Ref Secret
      TargetId: !Ref DBCluster
      TargetType: AWS::RDS::DBCluster

  SecretRotation:
    Type: AWS::SecretsManager::RotationSchedule
    Properties:
      SecretId: !Ref UserAdminSecret
      RotationLambdaARN: <ARN_GET_FROM_SERVERLESS_APPLICATION_REPOSITORY>
      RotationRules:
        AutomaticallyAfterDays: 1

ただし、AWS Lambda ローテーション関数は次のメッセージで失敗します。

「このローテーション ラムダを使用するには、データベース エンジンを 'mysql' に設定する必要があります」: KeyError

AWS が提供する AWS Lambda ローテーション機能では、Aurora Serverless がサポートされていないようです。

既存の Lambda ローテーション テンプレートを使用して Aurora Serverless シークレット ローテーションをセットアップする簡単な方法はありますか?

Aurora Serverless 用に独自のローテーション関数を作成するための例はありますか?

PS: この質問は、cloudformation からの Aurora サーバーレス クラスターの作成に関連するものですか?

4

4 に答える 4

2

RotationSchedule リソースは、SecretTargetAttachment リソースに依存しています。attachment リソースは、db エンジン、ポート、エンドポイントなどの接続情報を含むように secret-string 値を更新します。

残念ながら、CloudFormation が 2 つのリソース間のこの暗黙的な依存関係を認識する方法はありません。アタッチメント リソースの論理 ID を使用して、RotationSchedule リソースにDependsOnを配置する必要があります。

この例の RotationSchedule リソースを参照してください - https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-secretsmanager-rotationschedule.html#aws-resource-secretsmanager-rotationschedule--examples

于 2019-08-07T23:03:18.053 に答える