AWS Data Pipeline でデータベース認証情報を非表示または暗号化したいと考えています。
簡単な説明
データパイプラインは、転送時にデータベース認証情報を暗号化します。ただし、エクスポート中にパイプラインにアクセスすると、パイプラインの JSON 定義パスワードが表示されます。
次のいずれかの操作を行って、パイプラインでデータベース認証情報をマスクできます。
- タグを作成して使用して、AWS Identity and Access Management (AWS IAM) ユーザーがパスワードを表示できないように制限します。
- データベース認証情報を環境変数としてエクスポートして、カスタム Amazon マシンイメージ (AMI) を作成します。
- AWS Secrets Manager を使用して、データベースパスワードをパイプラインに保存します。
解決方法
タグ付け
AWS Identity and Access Management (AWS IAM) ユーザーに、タグに基づいて、パイプラインへのフルアクセスまたは制限付きアクセスを付与できます。
IAM ユーザーがパスワードを表示できないようにするには、Describe、GetPipelineDefinition や QueryObjects などの読み取り専用の Data Pipeline アクションの使用を許可する IAM ポリシーを作成し、アタッチします。詳細については、「AWS Data Pipeline のポリシーの例」を参照してください。
カスタム AMI
パイプラインでデータベース認証情報をセキュリティで保護するには、次の手順を実行します。
1. **Amazon Elastic Compute Cloud (Amazon EC2) インスタンスで、データベースのユーザー名とパスワードを環境変数としてエクスポートします。**次のコマンドを実行して、Amazon EC2 インスタンスでデータベース認証情報を環境変数としてエクスポートします。
sudo vi /etc/profile
export USERNAME=awsuser
export PASSWORD=
2. Amazon EC2 インスタンスからカスタム AMI を作成します。
3. **この変数を Postgre SQL 接続メソッドで ShellCommandActivity としてデータベースインスタンスに渡します。**Data Pipeline Architect を使用して次の ShellCommandActivity を定義します。
psql "host=redshiftendpoint port=5439 dbname=Dbname user=$USERNAME password=$PASSWORD" -c "select 1;"
詳細については、「AWS Data Pipeline Architect を使用してアクティビティを定義する」を参照してください。
AWS Secrets Manager
パイプラインでデータベース認証情報を暗号化する最も安全な方法は、次の手順を実行することです。
- AWS Secrets Manager を使用してパスワードを保存します。
- PostgreSQL をインストールして Redshift データベースインスタンスに接続するか、SQL Workbench をインストールして他のデータベースインスタンスに接続します。
AWS Secrets Manager を使用して、パスワードを環境変数として保存できます。その後、PostgreSQL 接続メソッドでこの変数を ShellCommandActivity としてデータベースインスタンスに渡すことができます。詳細については、「psql ツールを使用してクラスターに接続する」を参照してください。
1. AWS Secrets Manager に Redshift データベース認証情報を作成して保存します。
2. 次のポリシーを DatapipelineDefaultResource ロールにアタッチして、AWS Secret Manager に保存されているシークレットの一覧表示/読み取りアクセス権を付与します。
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "SecretPolicytoretrievesecretvalue",
"Effect": "Allow",
"Action": [
"secretsmanager:GetSecretValue",
"secretsmanager:DescribeSecret",
"secretsmanager:ListSecretVersionIds"
],
"Resource": "arn:aws:secretsmanager:us-east-1:1111222233334444:secret:mysecret/secret-10aaPx"
}
]
}
上記のポリシーの次の項目を置き換えます。
- us-east-1 をシークレットが存在するリージョンに
- 1111222233334444 を AWS アカウント ID に
- mysecret を仮想フォルダの名前に
- secret-10aaPx をお使いのシークレット名に
3. Data Pipeline Architect を使用して、次の ShellCommandActivity を定義します。
sudo yum -y install aws-cli jq postgresql95-server.x86_64 postgresql95-contrib.x86_64 postgresql95.x86_64 postgresql95-libs.x86_64 && export USERNAME=`aws secretsmanager get-secret-value --secret-id mysecret/secret --region regionname | jq -r '.SecretString' | cut -f4 -d \"\\\"\"` && export AWS_REGION=region_name && export PASSWORD=`aws secretsmanager get-secret-value --secret-id mysecret/secret --region region_name | jq -r '.SecretString' | cut -f8 -d \"\\\"\"` && psql "host=redshiftendpointname port=5439 dbname=sampledbname user=$USERNAME password=$PASSWORD" -c "select 1";
関連情報
AWS Data Pipeline のセキュリティ