AWS Secrets Manager を使用した Amazon Redshift 管理者パスワードの管理
Amazon Redshift は、AWS Secrets Manager と統合して、暗号化されたシークレット内で管理者認証情報を生成して管理できます。AWS Secrets Manager を使用して、管理者パスワードを API コールに置き換えて、必要な際にシークレットをプログラムで取得できます。ハードコードされた認証情報の代わりにシークレットを使用すると、認証情報が公開されたり侵害されたりするリスクを軽減できます。AWS Secrets Manager の詳細については、「AWS Secrets Manager ユーザーガイド」を参照してください。
次のいずれかのオペレーションを実行する場合、Amazon Redshift が AWS Secrets Manager を使用して管理者パスワードを管理するように指定できます。
-
プロビジョニングされたクラスターまたはサーバーレス名前空間を作成する
-
プロビジョニングされたクラスターまたはサーバーレス名前空間の管理者認証情報を編集、更新、または変更する
-
スナップショットからのクラスターまたはサーバーレス名前空間を復元する
AWS Secrets Manager で管理者パスワードを Amazon Redshift で管理するように指定すると、Amazon Redshift はパスワードを生成して Secrets Manager に保存します。このシークレットを AWS Secrets Manager で直接アクセスして、管理者ユーザーの認証情報を取得できます。別の AWS アカウントからシークレットにアクセスする必要がある場合、オプションでカスタマーマネージドキーを指定してシークレットを暗号化できます。AWS Secrets Manager が提供する KMS キーを使用することもできます。
Amazon Redshift はシークレットの設定を管理し、デフォルトでシークレットを 30 日ごとにローテーションします。シークレットはいつでもを手動でローテーションできます。AWS Secrets Manager でシークレットを管理しているプロビジョンされたクラスターまたはサーバーレス名前空間を削除すると、シークレットとそれに関連するメタデータも削除されます。
シークレットで管理された認証情報を使用してクラスターまたはサーバーレス名前空間に接続するには、Secrets Manager コンソールまたは GetSecretValue
Secrets Manager API コールを使用して AWS Secrets Manager からシークレットを取得できます。詳細については、AWS Secrets Manager ユーザーガイドの「AWS Secrets Manager からのシークレットの取得、AWS Secrets Manager シークレットの認証情報を使用して SQL データベースに接続する」を参照してください。
AWS Secrets Manager の統合に必要となるアクセス許可
AWS Secrets Manager の統合に関連するオペレーションを実行するには、ユーザーは必要なアクセス許可を持っている必要があります。必要となる特定のリソースの API オペレーションを実行するためのアクセス許可を付与する IAM ポリシーを作成します。その後、このようなポリシーを、アクセス許可を必要とする IAM アクセス許可セットまたはロールにアタッチします。詳細については、「Amazon Redshift での Identity and Access Management」を参照してください。
Amazon Redshift が AWS Secrets Manager を使用して管理者パスワードを管理するように指定するユーザーには、次のオペレーションを実行するアクセス許可が付与されている必要があります。
-
secretsmanager:CreateSecret
-
secretsmanager:RotateSecret
-
secretsmanager:DescribeSecret
-
secretsmanager:UpdateSecret
-
secretsmanager:DeleteSecret
-
secretsmanager:GetRandomPassword
-
secretsmanager:TagResource
プロビジョン済みのクラスターの MasterPasswordSecretKmsKeyId
パラメータ、またはサーバーレス名前空間の AdminPasswordSecretKmsKeyId
パラメータで KMS キーを渡すユーザーの場合は、上記のアクセス許可に加えて、次のアクセス許可が必要です。
-
kms:Decrypt
-
kms:GenerateDataKey
-
kms:CreateGrant
-
kms:RetireGrant
管理者パスワードシークレットのローテーション
デフォルトでは、Amazon Redshift は 30 日ごとにシークレットを自動的にローテーションして、同じ認証情報が長期間使用されることを回避できます。Amazon Redshift が管理者パスワードのシークレットをローテーションすると、AWS Secrets Manager は既存のシークレットが新しい管理者パスワードを含むように更新します。Amazon Redshift は、更新されたシークレットのパスワードと一致するようにクラスターの管理者パスワードを変更します。
AWS Secrets Manager を使用して、スケジュールされたローテーションを待つ代わりに、シークレットを直ちにローテーションできます。シークレットのローテーションの詳細については、「AWS Secrets Manager ユーザーガイド」の「AWS Secrets Manager シークレットのローテーション」を参照してください。
Amazon Redshift で AWS Secrets Manager を使用する場合の考慮事項
AWS Secrets Manager を使用してプロビジョニングされたクラスターまたはサーバーレス名前空間の管理者認証情報を管理する場合は、次の点を考慮する必要があります。
-
管理者認証情報が AWS Secrets Manager で管理されているクラスターを一時停止しても、クラスターのシークレットは削除されず、引き続きシークレットに対して料金が発生します。シークレットは、クラスターを削除したときにのみ削除されます。
-
Amazon Redshift がアタッチされたシークレットのローテーションを試行する際にクラスターが一時停止していると、ローテーションは失敗します。この場合、Amazon Redshift は自動ローテーションを停止して、クラスターを再開した後でも自動ローテーションを再度試行することはありません。シークレットの自動ローテーションを継続するには、
secretsmanager:RotateSecret
API コールを使用して AWS Secrets Manager の自動ローテーションのスケジュールを再開する必要があります。 -
Amazon Redshift がアタッチされたシークレットのローテーションを試行する際に、サーバーレス名前空間にワークグループが関連付けられていない場合、ローテーションは失敗し、ワークグループをアタッチした後でも自動ローテーションを再度試行することはありません。シークレットの自動ローテーションを継続するには、
secretsmanager:RotateSecret
API コールを使用して AWS Secrets Manager の自動ローテーションのスケジュールを再開する必要があります。