[Ver 2023.1 新機能] DCM の外部保管庫として AWS Secrets Manager が利用可能になりました

2023.05.24

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

2023/5/17 に Alteryx Designer の Version 2023.1 がリリースされました。

Designer 2023.1リリースノート | Alteryx Documentation

新機能として、DCM(データ接続マネージャー)の外部保管庫として、AWS Secrets Manager が利用できるようになり、試してみましたので、本記事で内容をまとめます。

DCM とは

DCM(データ接続マネージャー)は、各種データベース等のデータソースへの接続情報(ホスト・データベース名・ユーザー名・パスワード等)を管理するための機能です。

DCM を使用することで、ワークフローの各ツール(データ入力ツールなど)に接続情報を直接入力せずに、事前に DCM で設定した接続情報を呼び出すことが可能となります。

また、バージョン 2023.1 からこの DCM はシステム設定の DCM モードにおいて既定として設定されています。これにより、例えば データ入力ツール をワークフローに配置すると、下図赤枠部分の「データ接続マネージャー(DCM)の使用」にチェッが入り、有効となっています。

通常のファイルを選択する場合、DCM モードでは使用できないので、自動的にこのチェックが外れることになります。

検証環境

下記の環境で検証しています。

  • Windows 10 Pro
  • Alteryx Designer 2023.1
  • Ubuntu 22.04.1 LTS on Windows
  • PostgreSQL 14.7
    • ローカル環境に構成

検証用データベース

検証用のデータソースとして、PostgreSQL を使用しました。ローカルに構成し、サンプル用のデータベース、読み取り専用ユーザーを作成済みとしています。

AWS 側の設定

AWS Secrets Manager の設定

下記の設定で値を登録しました。

  • シークレットのタイプ
    • その他のデータベースの資格情報
  • シークレットの名前
    • alteryx/postgres/local
  • 暗号化キー
    • デフォルト(aws/secretsmanager
  • シークレットの値
    • 後ほど、この KEY 値を使用してユーザー名やパスワードを指定することになります
Key Value
username read_user
password パスワード
engine postgres
host localhost
port 5432
dbname userdb

Secrets Manager のアクセス制御

Secrets Manager へのアクセス制御の方法として、アイデンティティベースのアクセス制御を使用することとします。アクセス制御の方法については、下記もあわせてご参照ください。

AWS Secrets ManagerでEC2キーペア秘密鍵の安全な受け渡しを管理してみる | DevelopersIO

ここでは、アクセスに必要なユーザーやポリシーを下記の通り設定しました。

  • 作業用 IAM ユーザーの作成
    • Alteryx から Secret Manager への接続時は、アクセスキー(アクセスキーID・シークレットキー)が必要となります
    • 本記事では、シークレット取得用ユーザーを作成し、アクセスキーを発行しておきます
  • 作業用 IAM ユーザーグループの作成
    • 作成した IAM ユーザーに付与する権限は、グループにロールをアタッチすることで与えることとします
  • I AM ロールの作成
    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "VisualEditor0",
                "Effect": "Allow",
                "Action": "secretsmanager:GetSecretValue",
                "Resource": "arn:aws:secretsmanager:ap-northeast-1:XXX:secret:alteryx/postgres/*"
            }
        ]
    }

Alteryx 側の設定

設定の手順は、下記に記載があります。

AWS Secrets Manager Configuration | Alteryx Documentation

外部保管庫の作成

メニューから「ファイル > 接続を管理」を選択し「接続マネージャー」を開きます。
画面左下の「外部保管庫」を選択します。

右上の「新規」を選択します。

外部保管庫として使用可能なリストが表示されるので「AWS Secrets Manager」を選択します。

作成するデータソースの名称と Secrets Manager のリージョンと合致するエンドポイントを入力し「保存」を押下します。
※下記は東京リージョンの例。

AWS Secrets Manager のエンドポイント | AWS

「保存」を選択すると下記のように表示されます。

外部保管庫用の資格情報の設定

続いて上図の「資格情報の設定」を選択します。
すると下図のように、外部保管庫(Secrets Manager)への接続に使用する資格情報を入力する画面が開きます。認証方法には「AWS IAM アクセスキー」が選択されており、変更はできません。

資格情報として既存のものがあればそれを選択し、新規作成の場合は「新しい資格情報の作成」を選択し、その名称とアクセスキー(アクセスキーID・シークレットキー)を入力します。

この時点で「接続テスト」を実施できます。アクセスキーが間違っている場合は、テスト接続に失敗します。
問題なく接続できたら「作成/リンク」を押下することで、この外部保管庫に対する資格情報を紐づけできたことになります。

外部保管庫を使用するデータソースへの資格情報の作成

これまでの作業で、外部保管庫(Secrets Manager)に接続できるようになりました。次に、Secrets Manager を使用したデータソースへの資格情報を作成します。

Alteryx で「接続マネージャー」を開き「資格情報」を選択します。

新たに作成するので、画面右上の「+ 新規」を選択します。
すると資格情報の設定画面が開くので、データソースに対する資格情報(本記事の場合、PostgreSQL)としての名称を設定します。

「保管庫」では、ドロップダウンリストより先程作成した「外部保管庫」が選択できます。Secrets Manager の場合、「(保管庫名)- (保管庫に対する資格情報)」の名称で設定画面に表示されます。

その他の設定は、下記の通りです。
※ここでは、「postgres-local-readonly」の名称で作成しています。

  • ボールトパス
    • Secrets Manager で設定した「シークレットの名前」を入力します
    • ここでは alteryx/postgres/local となります
    • Secrets Manager の Arn も指定可能です
  • メソッド
    • データソースに対する認証方法を指定します
    • 本記事での PostgreSQL への認証には、ユーザー名とパスワードを使用するので「ユーザー名とパスワード」を選択します。
  • ユーザー名、パスワード
    • こちらは使用する資格情報について、Secrets Manager からどのように値を抽出するか指定します
    • Secrets Manager では、シークレットの値を、そのキー値を指定することで取り出せるので、それぞれに該当するキー値を入力します

すべて設定できたら「保存」を選択します。すると「接続マネージャー」の「資格情報」にて作成したデータソースへの資格情報が確認できるようになります。

保管庫の値が、先の手順で作成した外部保管庫(Secrets Manager)となっています。

データソースの作成

次に接続先データソースに関する情報を DCM 上で作成します。
接続マネージャーの下図赤枠の「データソース」を選択します。

データソースとして使用するテクノロジーを選択する画面が開くので任意のデータソースを選択します。ここでは、PostgreSQL を選択します。

PostgreSQL の場合、下記のように、使用するドライバー、データベース名やSSL オプションを指定します。指定ができたら右上の「保存」を押下します。

データソース作成すると、「データソース」の一覧に追加されます。作成されたデータソースを選択すると下図のような表示となります。

さいごに、このデータソースと使用する資格情報を紐づけます。「資格情報の接続」を選択します。

接続に使用する資格情報を選択できるメニューが開くので、「外部保管庫を使用するデータソースへの資格情報の作成」で作成した資格情報(ここでは「postgres-local-readonly」)を選択し、「リンク」を押下します。ここで接続テストを実施することも可能です。

以上で、データソース(PostgreSQL)の定義とデータソースに対する資格情報の紐づけが完了しました。

ワークフローで資格情報を呼び出す

ワークフローに データ入力ツール を配置します。

「データ接続マネージャー(DCM)使用」にチェックが入っている状態で「接続を設定します」を押下します。

データ接続のメニューが開くので「データソース」タブを選択します。

データソースから PostgreSQL の 「クイック接続」を押下します。

すると接続マネージャーが開くので、対象のデータソースを選択します。(ここでは、postgres-local)

データソースのメニューでは、使用する資格情報(どのユーザーで接続するか)を選択します。
データソースにリンクされた資格情報から使用するものの「接続」を押下します。

すると、接続マネージャーが閉じ、ワークフロー上で使用するテーブルを選択するメニューが開きます。以降は、これまでと同様の操作となります。

Secrets Manager のシークレットを取得する権限がない場合

シークレットを取得する際は、IAM ユーザーのアクセスキーを使用します。そのため、対象のシークレットを取得(secretsmanager:GetSecretValue)可能なポリシー持つ IAM ロールを作成し、ユーザーグループにアタッチしています。ポリシーでこの権限が適切に設定されていない場合、下図のように、ボールト(保管庫)に接続できないというエラーメッセージが表示されます。

この場合、シークレット取得に必要なポリシーが付与されているかご確認ください。

さいごに

DCM の外部保管庫として、AWS Secrets Manager を試してみました。

暗号化や鍵のローテーションといったシークレットの管理を AWS上で行え、Alteryx からはその情報を呼び出すのみとなるので、AWS 上ですでにシークレットを管理している場合や、より安全にシークレットを管理したい場合に使える機能と思います。

今回は以上になります。