AWS Secrets Managerを利用して、Redshiftのパスワードを自動的にローテーションさせる

redshift-data cliを利用して、sqlを実行する時に、認証方法としてAWS Secrets Managerを利用したいと思います。 Secrets Managerコンソール上で新たなシークレットを作成し、Redshiftのパスワードを自動ローテーションさせる設定までやってみました。 構成 Redshiftクラスターはbastionサーバーを利用し、外部からのアクセスを可能にし、パスワードを自動ローテーションさせるLambdaはNATゲートウェイでなはく、VPCエンドポイントを通すように設定しました。 シークレット作成と自動ローテーション設定 新たなシークレットを作成します。Redshiftクラスターのユーザー名とパスワードを入力し、対象クラスターを選びます。KMSキーはデフォルトを選びました。 自動ローテーションを有効にし、ローテーション間隔を入力し、新しいLambda関数を作成します。 しかし、自動作成されるCloudformationスタック作成に失敗しました。サブネットの数超過による失敗でした。 Properties validation failed for resource SecretsManagerRedshiftRotationSingleUser with message: #/VpcConfig/SubnetIds: expected maximum item count: 16, found: 20 手動で自動ローテーション再設定 失敗したCloudformationスタックを削除し、同じテンプレートでスタックを再度作成します。 パラメーターは失敗したスタックと同じ値を入力し、サブネットはLambdaを作成するサブネットを入力します。 Key Value kmsKeyArn - excludeCharacters :/@"'\ functionName SecretsManagerRedshiftRotationLambda endpoint https://secretsmanager.ap-northeast-1.amazonaws.com invokingServicePrincipal secretsmanager.amazonaws.com vpcSecurityGroupIds sg-0b3xxxcfa vpcSubnetIds subnet-0e171673999462f90,subnet-0c21ae038cbe71f48 Cloudformationスタック作成が完了したら、シークレット自動ローテーション設定画面を開き、作成されたLambda関数を選択します。 Lambda実行失敗 Lambda関数に設定したSecurity GroupはRedshiftへ設定されたSecurity Groupと同じです。(自動でLambda関数が作成される場合もRedshiftクラスターと同様なSecurity Groupが設定されます。) Redshiftへ設定されているSecurity GroupはAWS Secrets Managerが作成するLambda関数のInboundアクセスの許可が必要です。 [ERROR] d352ae22-3b4b-4203-88cf-224160303d56 setSecret: Unable to log into database with previous, current, or pending secret of secret arn arn:aws:secretsmanager:ap-northeast-1:xxxx:secret:dev/Demo/Redshift-8c3rDL [ERROR] ValueError: Unable to log into database with previous, current, or pending secret of secret arn arn:aws:secretsmanager:ap-northeast-1:xxxx:secret:dev/Demo/Redshift-8c3rDL Security GroupへInboundアクセス追加 Redshift Security GroupへSecurity Group自身からRedshiftへアクセスできるようにInboundアクセスを追加 すぐにシークレットをローテーションさせるを実行 正常にパスワードが変更されました。...

2021-07-26 · bokyung

AWS SAMを利用して、Lambda関数デプロイする

前のPostに CloudFrontとLambda@Edgeを利用して画像をリサイズさせる 方法に関する内容がありましたが、AWS SAMを利用してCloudFormationでLambda関数をデプロイする方法をまとめてみました。 デプロイ順番 SAM CLIインストール Install SAM CLI 私は SAM CLI, version 1.23.0を利用しました。 template.yaml作成 CloudFormation基盤のテンプレート(template.yaml)を作成します。 . ├── index.js ├── node_modules/ ├── template.yaml ├── package-lock.json └── package.json SAM deployを利用した、コードのパッケージングとデプロイ SAM deploy \ --template-file template.yaml \ # Lambda@edgeの場合はus-east-1リージョンに作成したBucketが必要です。 --s3-bucket <zipファイルをアップロードするBucket name> \ --s3-prefix SAM \ --stack-name <cloudformation スタック名> \ --capabilities CAPABILITY_NAMED_IAM \ --region <cloudformationをデプロイするリージョン名> \ --profile <profile name> SAMはデプロイ時、 アプリケーションのコードを圧縮して、S3へアップロード CodeUriがS3 pathに変換されたCloudFormationテンプレートファイル作成、S3へアップロード S3にアップロードされたファイルを利用して、Cloudformationのスタック作成してデプロイ Cloudformationコンソール上でTemplateの中身を確認するとCodeUriがS3のパスになっていることが確認できます。 CodeUri: s3://<zipファイルをアップロードするBucket name>/SAM/70b53b458e040c19f27aaf1d7f197e0e Cloudformationのスタック作成が完了されたら、OutputsにLambda関数の新たなバージョンを含めたARNを表示してくれます。 このARNをCloudfrontのリサイズ用のBehaviors > Edge Function Associations > Function ARN/Nameへ指定します。...

2021-05-17 · bokyung

CloudFrontとLambda@Edgeを利用して画像をリサイズさせる

リサイズされた画像をS3へ保存せずに、原本のみ利用してリサイズさせる方法がないか調べてみましたが、Lambda@Edgeを利用してリサイズさせる方法があったので、試してみました。 Lambda@Edge動作概要 Lambda@EdgeはCloudFrontへアクセスする時に実行されるLambdaの拡張版です。 CloudFrontイベント発生時、Lambda関数の実行が可能です。 イベントには4種類があります。 Viewer Request : CloudFrontがビューアーからのリクエストを受け、リクエストしたオブジェクトがedge cacheにあるかを確認する前に関数を実行します。 Origin Request : CloudFrontがオリジンにリクエストを渡す場合のみ実行されます。 リクエストしたオブジェクトがedge cacheにある場合は関数は実行されません。 Origin Response : CloudFrontがオリジンからレスポンスを受け取った後、レスポンスへオブジェクトをcacheする前に関数を実行します。 Viewer Response : リクエストしたオブジェクトをビューアーに返却する前に実行されます。 この関数は、オブジェクトがedge cacheに既に存在しているか否かに関わらず実行されます。 Lambda@Edge 注意点 環境変数は利用不可 us-east-1 リージョンのみ対応 イベントタイプによって異なるクォータ Entity Origin request and response event quotas Viewer request and response event quotas Function memory size Same as Lambda quotas(128 MB to 10,240 MB) 128 MB Function timeout 30 seconds 5 seconds Size of a response 1 MB 40 KB Maximum compressed size of a Lambda function and any included libraries 50 MB 1 MB イメージリサイジング処理実装 イメージリサイジング処理の流れ Origin Responseイベント発生時、Lambda@Edge関数を実行する方法を利用しました。...

2021-05-14 · bokyung

Jenkins環境でSpring Batch Jobを実行する

JenkinsでSpring Batch Jobを実行してみました。 Jenkinsの環境 Amazon Linux2 AMI ID : ami-0f27d081df46f326c AMI名 : amzn2-ami-hvm-2.0.20210303.0-x86_64-gp2 Jenkins version : Jenkins 2.284 環境変数とプラグイン設定 複数のJobを登録する場合は、各Jobに同じパラメータを設定することになりますが、環境変数に登録しておくと一括管理ができます。 Jobパラメーターに実行日を渡すために、timestamperプラグインを利用しました。 Manage Jenkins > System Configuration > Configure System > Global properties > Environment variablesでJob共通で利用している環境変数を設定します。 Batch Job登録 New Item > Freestyle projectを選び、JOBを登録します。 java -jar ${JAR_NAME} ${DB_HOST} ${DB_PORT} ${DB_NAME} ${DB_USER} ${DB_PASSWORD} \ --spring.batch.job.names=${JOB_NAME} version=${BUILD_NUMBER} requestDate=${BUILD_TIMESTAMP} --spring.batch.job.enabled=true --spring.profiles.active=dev Batch Job実行 Jobを実行し、実行結果を確認します。 2021-03-31 13:09:56.358 INFO 3564 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2021-03-31 13:09:56....

2021-03-31 · bokyung

Jenkins環境でSpring BatchプロジェクトをGradleビルドする

Spring BatchのJob Runnerを調査していましたが、その中でJenkinsでbatchプロジェクトをgradleビルドをしてみました。 Jenkinsの環境 Amazon Linux2 AMI ID : ami-0f27d081df46f326c AMI名 : amzn2-ami-hvm-2.0.20210303.0-x86_64-gp2 Jenkins version : Jenkins 2.284 認証情報登録 Github ID/PASSWORD認証方法 JenkinsでRepository関連作業ができるようにGithub上でPersonal access tokensを発行します。 ( Settings > Developer settings > Personal access tokens ) Manage Jenkins > Manage Credentials > domainにあるglobalをクリックします。 KindはUsername with passwordを選び、パスワード欄にはPersonal access tokens値を入力し認証情報を追加します。 Github SSH 認証方法 SSH鍵を作成します。 Githubプロジェクト設定のDeploy keysに公開鍵を追加します。 KindはSSH Username with private keyを選び、Private Key > Enter directlyに秘密鍵を追加します。 Gradle, JDK設定 プロジェクトで利用するGradleとJDKを Manage Jenkins > System Configuration > Global Tool Configurationにて設定します。一つのバージョンのみ設定した場合は、各JOBでデフォルトとして設定されます。複数のバージョンが登録されている場合は、JOB設定時バージョンを選べられます。 Job登録 New Item > Freestyle projectを選び、JOBを登録します。github access tokens認証の場合は、Repository URLに git@github....

2021-03-30 · bokyung