すべてのプロダクト
Search
ドキュメントセンター

Realtime Compute for Apache Flink:KMS 認証情報管理統合 (Beta)

最終更新日:Sep 24, 2026

Realtime Compute for Apache Flink では、Alibaba Cloud Key Management Service (KMS) にホストされている認証情報をジョブから参照し、プレーンテキストのユーザー名とパスワード (user-pwd) を置き換えることができます。これにより、認証情報の暗号化ホスティング、プレーンテキストの露出回避、メンテナンス不要な認証情報管理が可能になります。

概要

KMS 認証情報管理統合により、Flink ジョブのコード内で認証情報をプレーンテキストで露出させることなく、KMS にホストされている認証情報 (データベースのユーザー名とパスワードなど) を参照できます。実行時に、Flink は RAM ロールを引き受けて一時的な STS トークンを取得し、KMS を呼び出して実際の認証情報の値を取得した後、対象のデータソースに接続します。

主なメリット:

  • 機密情報の保護:ジョブ内でプレーンテキストの user-pwd は露出しません。認証情報は KMS に暗号化された状態でホストされます。

  • メンテナンス不要の認証情報:KMS で認証情報をローテーションさせると、更新後に Flink は最新の認証情報の値を自動的に取得します。ジョブコードを変更する必要はありません。

注意事項

KMS で認証情報を誤って削除した場合、または RAM で RAM ロールの権限や信頼ポリシーを誤って削除または変更した場合、Flink ジョブが KMS 認証情報を取得できずに失敗する可能性があります。Realtime Compute for Apache Flink のサービスレベルアグリーメント (SLA) によれば、お客様によるリソースの誤用が原因で利用不能となった場合、SLA の対象外となります。

制限事項

  • KMS 認証情報を使用してクラウドリソースにアクセスできるのは、Postgres CDC コネクタ (VVR 11.8 以降) と Kafka コネクタ (VVR 11.9 以降) のみです。

  • KMS へのアクセスで参照される RAM ロールの数には制限があります。詳細については、「RAM ロールを使用してクラウドリソースにアクセスする」をご参照ください。

権限の準備

  • ステップ 1 (KMS 認証情報管理の作成):操作者には KMS 認証情報管理の権限が必要です。

  • ステップ 2 とステップ 3: オペレーターには、AliyunRAMFullAccess ポリシー、または別途 RAM ロール管理および権限管理の権限が付与されている必要があります。詳細については、「カスタムポリシーの作成」をご参照ください。

  • ステップ 4 とステップ 5 (Flink でのロールの参照とジョブの開発): オペレーターには、Flink 名前空間に対する編集者以上の権限、または RAM ロールの参照、ファイルの管理、ジョブの開発を行うためのきめ細かい権限が必要です。 詳細については、「開発コンソールにアクセスするための権限を付与する」をご参照ください。

ステップ1:KMS認証情報の作成

KMS は複数種類の認証情報を提供します。以下の手順では、RDS 認証情報を例に説明します。

  1. Key Management Service コンソールにログインします。上部メニューバーでリージョンを選択し、左側のナビゲーションペインで、[Resources] > [Secrets] を選択します。

  2. [Self-Managed Secrets] タブの [Secret Type] エリアで、[Database Secret] をクリックします。

  3. 右側のリスト上部で、[Create Database Secret] の下にある [Create Single Secret] をクリックし、設定を完了してから [OK] をクリックします。

詳細については、「Secrets Manager の使用開始」および「ApsaraDB RDS シークレットの管理と使用」をご参照ください。

ステップ2:RAM ロールの作成と設定

このロールは、Flink サービスが KMS にアクセスするために使用するID 認証情報です。Flink はロールを引き受けて一時的な認証情報を取得し、そのロールとして KMS を呼び出して認証情報の値を取得します。KMS への認証情報不要のアクセスに関する詳細については、「RAM ロールを使用したクラウドリソースへのアクセス」の付録をご参照ください。

1. RAM ロールの作成

  1. RAM コンソール - Roles ページにログインし、[Create Role] をクリックします。既定のオプションのまま [OK] をクリックします。

  2. 識別しやすいロール名 (例: FlinkRoleForKMSRead) を入力し、[OK] をクリックします。

2. 信頼ポリシーの追加

ロールが作成された後、ロールの詳細ページで[信頼ポリシー] タブをクリックし、[信頼ポリシーの編集] をクリックします。Principal に "Service": ["stream.aliyuncs.com"] を追加して、Flink がロールを引き受けることを信頼できるようにします。詳細については、「RAM ロールの信頼ポリシーを変更する」をご参照ください。

{
  "Statement": [
    {
      "Action": "sts:AssumeRole",
      "Effect": "Allow",
      "Principal": {
        "Service": [
          "stream.aliyuncs.com"
        ]
      }
    }
  ],
  "Version": "1"
}

3. RAM ロールへのKMSアクセス権限の付与

Flink がロールを引き受けた後、そのロールとして KMS を呼び出します。必要な KMS 権限を、事前にロールの権限ポリシーに付与してください。

ロールの詳細ページで [Permissions] タブをクリックし、[Grant Permission] をクリックします。AliyunKMSSecretUserAccess ポリシー (KMS 内の認証情報を取得する権限を付与) を追加します。認証情報がカスタマーマスターキー (CMK) で暗号化されている場合は、AliyunKMSCryptoUserAccess ポリシーを追加して kms:Decrypt 権限も付与します。

キーおよび認証情報レベルで権限を制御するには、GetSecretValue および Decrypt 権限を付与し、リソースを特定のリソースに制限するカスタムポリシーを作成します。詳細については、「KMS カスタムポリシーリファレンス」および「カスタムポリシーの作成」をご参照ください。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kms:GetSecretValue",
      "Resource": "acs:kms:<region>:<account-id>:secret/<secret-name>"
    },
    {
      "Effect": "Allow",
      "Action": "kms:Decrypt",
      "Resource": "acs:kms:<region>:<account-id>:key/<key-id>"
    }
  ]
}

ステップ3:RAMユーザーへの権限付与

権限ポリシーを作成し、RAM ユーザーに付与します。これにより、ユーザーはステップ2で作成した RAM ロールを Flink サービスに渡して引き受けさせることができます。

説明

ステップ4の RAM ユーザーがすでに AliyunRAMFullAccess または AliyunStreamFullAccess ポリシーに関連付けられている場合、ユーザーはすでに PassRole 権限を持っています。このステップはスキップできます。

権限ポリシーの作成

RAM コンソール - Policies ページにログインし、[Create Policy] をクリックします。[Script] モードに切り替え、ポリシー内容を編集します。

{
  "Version": "1",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ram:ListRoles"
      ],
      "Resource": "*"
    },
    {
      "Effect": "Allow",
      "Action": "ram:PassRole",
      "Resource": "acs:ram::<account-id>:role/<role-name>",
      "Condition": {
        "StringEquals": {
          "acs:Service": "stream.aliyuncs.com"
        }
      }
    }
  ]
}

権限

説明

ram:ListRoles

ユーザーがアカウント配下のロール一覧を表示できるようにします。これにより、Flink コンソールでロールを選択できます。

ram:PassRole

ユーザーが指定されたロールを Flink クラウドサービスに渡すことを許可します。ポリシーの <account-id> と <role-name> を実際の値に置き換えます:

  • <account-id>:Alibaba Cloud アカウントの UID。

  • <role-name>:ステップ2で作成した RAM ロールの名前。

Condition を追加して、ロールの引き渡しを stream.aliyuncs.com のみに制限します。

[OK] をクリックして、たとえば FlinkPassRolePolicy としてポリシーを保存します。詳細については、「カスタムポリシーの作成」をご参照ください。

RAMユーザーへの権限付与

  1. RAM コンソール - Users ページにログインします。権限を付与する RAM ユーザーを見つけ、[Actions] 列の [Add Permissions] をクリックします。

  2. [権限の追加] パネルで、ステップ 3 で作成したポリシー (例: FlinkPassRolePolicy) を検索して選択し、[確認] をクリックします。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。

ステップ4:FlinkでのRAM ロール参照

ステップ2で作成した RAM ロールを Flink の名前空間で参照し、ジョブがそのロールを使用して KMS にアクセスできるようにします。

  1. Realtime Compute コンソールにログインし、対象のワークスペースに入ります。

  2. 左側のナビゲーションペインで[Security] > [Security]を選択します。

  3. [RAM ロール] タブをクリックします。

  4. [RAM ロールを参照] をクリックします。

  5. ダイアログボックスで、ステップ2で作成した RAM ロール (例: FlinkRoleForKMSRead) を選択します。ロール名のあいまい検索も可能です。

    説明

    ロールリストには、現在の名前空間を所有する Alibaba Cloud アカウント配下の通常のサービスロールが含まれます。ロールを表示するには、オペレーターは現在の名前空間と同じ Alibaba Cloud アカウントに属し、ram:ListRoles 権限を持っている必要があります。

  6. [テスト] をクリックします。システムは自動的に以下の 2 つの項目をチェックします。

    • PassRole権限チェック:現在のユーザーが、選択した RAM ロールに対して ram:PassRole 権限を持っていること。

    • 信頼ポリシーチェック:選択した RAM ロールが、現在の Flink 名前空間によるロールの引き受けを信頼していること。

  7. チェックが成功したら、[OK] をクリックします。

詳細については、「RAM ロールを使用してクラウドリソースにアクセスする」をご参照ください。

ステップ5:ジョブでのKMS認証情報の利用

前の手順が完了したら、ジョブコードで secret:// 参照形式を使用して資格情報を指定し、KMS 接続パラメーターを設定します。 Flink は、データソースにアクセスするために、実行時に資格情報の値を自動的に取得します。

Postgres CDCコネクタの例

SQL ジョブ: 次の例では、Postgres CDC ソーステーブルを使用し、KMS 認証情報にデータベースのユーザー名とパスワードを格納します。KMS に my-db-secret という名前のデータベース認証情報が作成されており、SecretData は {"AccountName":"alice","AccountPassword":"xxx"} です。

CREATE TEMPORARY TABLE postgrescdc_source (
    id INT NOT NULL,
    name STRING,
    description STRING,
    weight DECIMAL(10,3)
) WITH (
  'connector' = 'postgres-cdc',
  'hostname' = '<host name>',
  'port' = '<port>',
  'username' = 'secret://kms.my-db-secret.AccountName',
  'password' = 'secret://kms.my-db-secret.AccountPassword',
  'database-name' = '<database name>',
  'schema-name' = '<schema name>',
  'table-name' = '<table name>',
  'slot.name' = '<slot name>',
  'decoding.plugin.name' = 'pgoutput',
  'kms.endpoint' = '<your-kms-instance-vpc-endpoint>',
  'kms.ca' = 'oss://<bucket>/kms-ca.pem',
  'kms.akless.assume-role.role-name' = 'FlinkRoleForKMSRead'
);

Postgres CDC コネクターのパラメーターの説明、前提条件、および型マッピングについては、「Postgres CDC コネクター」をご参照ください。

Kafkaコネクタの例

Kafka の認証情報は SASL JAAS 設定で参照します。properties.sasl.jaas.config 内の username と password の値を secret:// を使った参照に置き換えます。その他の Kafka パラメーターは変更しません。KMS に my-kafka-secret という名前の認証情報が作成済みで、SecretData は {"AccountName":"<SASL username>","AccountPassword":"<SASL password>"} であるものとします。

SQL ジョブ: 次の例では Kafka のソーステーブルを使用します。結果テーブルも同様に設定します。

CREATE TEMPORARY TABLE kafka_source (
  order_id BIGINT,
  user_id BIGINT,
  amount INT,
  payload STRING
) WITH (
  'connector' = 'kafka',
  'topic' = '<topic name>',
  'properties.bootstrap.servers' = '<broker 1>,<broker 2>,<broker 3>',
  'properties.group.id' = '<group id>',
  'scan.startup.mode' = 'earliest-offset',
  'format' = 'csv',
  'properties.security.protocol' = 'SASL_PLAINTEXT',
  'properties.sasl.mechanism' = 'PLAIN',
  /* usernameとpasswordでKMS認証情報を参照します */
  'properties.sasl.jaas.config' = 'org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="secret://kms.my-kafka-secret.AccountName" password="secret://kms.my-kafka-secret.AccountPassword";',
  'kms.endpoint' = 'kms.cn-beijing.aliyuncs.com',
  'kms.akless.assume-role.role-name' = 'FlinkRoleForKMSRead'
);

データインジェスト YAML ジョブ: ソースとシンクは、それぞれ個別に KMS パラメーターを指定します。ソースは共有ゲートウェイを使用し、シンクは専用ゲートウェイを使用するため、この例では両方を扱います。

source:
  type: kafka
  name: Kafka Source
  topic: <topic name>
  value.format: json
  scan.startup.mode: earliest-offset
  properties.bootstrap.servers: <broker 1>,<broker 2>,<broker 3>
  properties.group.id: <group id>
  properties.security.protocol: SASL_PLAINTEXT
  properties.sasl.mechanism: PLAIN
  properties.sasl.jaas.config: org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="secret://kms.my-kafka-secret.AccountName" password="secret://kms.my-kafka-secret.AccountPassword";
  # 共有ゲートウェイ:エンドポイントはリージョンごとに固定で、kms.caは不要です
  kms.endpoint: kms.cn-beijing.aliyuncs.com
  kms.akless.assume-role.role-name: FlinkRoleForKMSRead

sink:
  type: kafka
  name: Kafka Sink
  properties.bootstrap.servers: <broker 1>,<broker 2>,<broker 3>
  # ApsaraMQ for Kafkaは冪等書き込みをサポートしていません。VVR 8.0.0以降では冪等性を無効にします
  properties.enable.idempotence: false
  properties.security.protocol: SASL_PLAINTEXT
  properties.sasl.mechanism: PLAIN
  properties.sasl.jaas.config: org.apache.flink.kafka.shaded.org.apache.kafka.common.security.plain.PlainLoginModule required username="secret://kms.my-kafka-secret.AccountName" password="secret://kms.my-kafka-secret.AccountPassword";
  # 専用ゲートウェイ:kms.caも必要です
  kms.endpoint: <your-kms-instance-vpc-endpoint>
  kms.ca: oss://flink-fullymanaged-<workspace-id>/artifacts/namespaces/<namespace>/PrivateKmsCA_kst-******.pem
  kms.akless.assume-role.role-name: FlinkRoleForKMSRead
説明
  • YAML では、properties.sasl.jaas.config の値にはダブルクォーテーションが含まれています。エスケープせずにそのまま記述してください。

  • SASL アクセス用のエンドポイントアドレスとポートは、ApsaraMQ for Kafka コンソールから取得してください。

Kafka コネクタの完全なパラメーターとセキュリティ設定については、「Kafka SQL コネクタ」および「Kafka YAML コネクタ」をご参照ください。

パラメーターの説明

認証情報の参照形式

KMS 認証情報の参照形式は secret://<provider>.<secret-name>.<key> です。

フィールド

説明

<provider>

認証情報ソースタイプの識別子です。現在、kms のみがサポートされています。

<secret-name>

KMS での認証情報名です (例: my-db-secret)。

<key>

認証情報の SecretData JSON 内のフィールド名 (例: AccountName、AccountPassword) です。

例: secret://kms.my-db-secret.AccountPassword

KMSパラメーター

パラメーター

タイプ

必須

説明

kms.endpoint

String

はい

KMS ゲートウェイのアドレス (専用ゲートウェイまたは共有ゲートウェイ)。

  • 専用ゲートウェイ:

    • KMS の [Instance Management] ページで、[Software Key Management] または [Hardware Key Management] タブをクリックし、対象の KMS インスタンスを選択します。

    • インスタンス ID をクリックして詳細ページに移動し、インスタンスの VPC アドレスを表示します。この VPC アドレスがエンドポイントです。詳細については、「サービスエンドポイント」をご参照ください。

  • 共有ゲートウェイ:エンドポイントはリージョンごとに固定されており、「サービスエンドポイント」から取得できます。

kms.ca

String

専用ゲートウェイで必須

CA 証明書の OSS パスです。

  1. KMS インスタンスの詳細ページから CA 証明書をダウンロードします。ダウンロードしたファイルは、デフォルトで PrivateKmsCA_kst-******.pem という名前です。

  2. Flink アーティファクトを使用して証明書をアップロードし、oss://bucket/path 形式の OSS パスをコピーします。

kms.akless.assume-role.role-name

String

いいえ

KMS へのアクセスに使用する RAM ロールの名前。 このロールは、[セキュリティ] > [RAMロール] で事前に参照されている必要があります。