Realtime Compute for Apache Flink では、名前空間で RAM ロールを参照できます。ジョブは RAM ロールを引き受けることで、平文の AccessKey ペアの代わりに一時的な STS トークンを使用して Alibaba Cloud リソースにアクセスします。これにより、クレデンシャルフリーアクセス、きめ細かなアクセス制御、メンテナンスフリーの認証情報管理が可能になります。
概要
RAM ロールを参照することで、ジョブコードに平文の AccessKey ペアを公開することなく、そのロールを使用して Flink ジョブから OSS や KMS などの他の Alibaba Cloud サービスにアクセスできます。
主な利点:
-
機密情報の保護:ジョブ内で AccessKey ペアが公開されることはありません。RAM ロールの STS トークンが静的な認証情報に置き換わります。
-
きめ細かなアクセス制御:RAM ロールの権限ポリシーはカスタマイズ可能です。異なるコネクタが異なるロールを使用することで、最小権限の原則を適用できます。
-
メンテナンスフリーの認証情報:STS トークンはシステムによって自動的に取得および更新されるため、認証情報のローテーションを管理する必要はありません。
詳細については、「付録:STS呼び出しフロー」をご参照ください。
注意事項
RAM で RAM ロールの権限や信頼ポリシーを誤って削除または変更すると、Flink ジョブがクラウドリソースにアクセスできなくなり、失敗する可能性があります。Realtime Compute for Apache Flinkのサービスレベルアグリーメントに基づき、お客様による不適切なリソース使用に起因する利用不能は SLA の対象外となります。
制限事項
-
VVR 11.8 以降のエンジンの OSS コネクタおよび Postgres CDC コネクタでのみサポートされています。
-
ワークスペースごとに最大 10 個の RAM ロールを参照できます。
-
1 回の追加操作で選択できるロールは最大 5 つです。
-
参照できるのは通常のサービスロール (SR) のみです。サービスリンクロール (SLR) はサポートされていません。
-
STS トークンは、PyFlink および Flink JAR ジョブのローカルデバッグではサポートされていません。ジョブは使用前にクラスターにデプロイする必要があります。
-
Alibaba Cloud サービスの RAM による ID 認証のみがサポートされています。
権限の準備
-
ステップ 1 とステップ 2:オペレーターには
AliyunRAMFullAccessポリシーが付与されているか、または RAM ロール管理と権限管理の権限が個別に付与されている必要があります。詳細については、「カスタムポリシーの作成」および「RAM ロール管理と権限管理のAPI概要」をご参照ください。 -
ステップ 3:オペレーターは、Flink 名前空間に対する編集者以上の権限を持っているか、RAM ロールを参照してジョブを開発するためのきめ細かな権限が付与されている必要があります。詳細については、「開発コンソールへのアクセス権限の付与」をご参照ください。
ステップ 1:RAM ロールの作成と設定
このロールは、Flink サービスが他のクラウドリソースにアクセスするためのID 認証情報です。Flink はこのロールを引き受けることで一時的な認証情報を取得し、そのロールの権限でクラウドリソースにアクセスします。
1. RAM ロールの作成
-
RAM コンソール - ロールページにログインし、[Create Role] をクリックします。デフォルトのオプション (信頼されたエンティティは現在の Alibaba Cloud アカウント) を維持し、[OK] をクリックします。
-
FlinkRoleForOSSReadのような、認識しやすいロール名を入力し、[OK] をクリックします。
2. 信頼ポリシーの追加
Flink は RAM ロールを引き受けて一時的な認証情報を取得します。RAM ロールは、Flink による引き受けを許可する必要があります。
ロールが作成された後、ロール詳細ページで [Trust Policy] タブをクリックし、[Edit Trust Policy] をクリックします。"Service": ["stream.aliyuncs.com"] を Principal に追加して、Flink がロールを引き受けることを信頼するようにします。詳細については、「RAM ロールの信頼ポリシーの変更」をご参照ください。
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"stream.aliyuncs.com"
]
}
}
],
"Version": "1"
}
3. クラウドリソースへのアクセス権限の付与
Flink は RAM ロールの ID を使用してクラウドリソースにアクセスします。アクセスエラーを防ぐために、事前に必要な権限を RAM ロールに付与してください。
ロール詳細ページで [Permissions] タブをクリックし、[Grant Permission] をクリックして、対象のクラウドリソースにアクセスするための権限をロールに付与します。
たとえば、OSS にアクセスするには、AliyunOSSReadOnlyAccess (読み取り専用) または AliyunOSSFullAccess (全アクセス) 権限を付与します。詳細については、「RAM ロールへの権限付与」をご参照ください。
ステップ 2:RAM ユーザーへの権限付与
権限ポリシーを作成し、それを RAM ユーザーに付与します。これにより、ユーザーはステップ 1 で作成した RAM ロールを Flink サービスに渡して、引き受けさせることができます。
ステップ 3 の RAM ユーザーがすでに AliyunRAMFullAccess または AliyunStreamFullAccess ポリシーに関連付けられている場合、ユーザーはすでに PassRole 権限を持っています。このステップはスキップできます。
権限ポリシーの作成
RAM コンソール - ポリシーページにログインし、[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"
}
}
}
]
}
|
権限 |
説明 |
|
|
ユーザーがアカウント配下のロールリストを表示できるようにし、Flink コンソールでロールを選択できるようにします。 |
|
|
ユーザーが指定したロールを Flink サービスに渡すことを許可します。ポリシー内の
|
[OK] をクリックして、FlinkPassRolePolicy のようにポリシーを保存します。詳細については、「カスタムポリシーの作成」をご参照ください。
RAM ユーザーへの権限付与
-
RAM コンソール - ユーザーページにログインします。権限を付与する RAM ユーザーを見つけ、[Actions] 列の [Add Permissions] をクリックします。
-
[Add Permissions] パネルで、ステップ 2 で作成したポリシー (例:
FlinkPassRolePolicy) を検索して選択し、[Confirm] をクリックします。詳細については、「RAMユーザーへの権限付与」をご参照ください。
ステップ 3:Flink での RAM ロールの参照
ステップ 2 で権限を付与されたユーザーは、ステップ 1 の RAM ロールを Flink に渡すことができます。Flink はそのロールを引き受けて一時的な認証情報を取得し、そのロールの権限でクラウドリソースにアクセスします。
RAM ロール参照の追加
-
Realtime Compute コンソールにログインし、対象のワークスペースに入ります。
-
左側のナビゲーションペインで、 を選択します。
-
[RAM Roles] タブをクリックします。
-
[Reference RAM Role] をクリックします。
-
ダイアログボックスで、以下を設定します:
項目
必須
説明
RAM role
はい
ドロップダウンリストからロールを選択します。ロール名によるあいまい検索と複数選択 (1 回の操作で最大 5 つ) が可能です。すでに参照されているロールは再度選択できません。
説明-
ロールリストには、現在の名前空間を所有する Alibaba Cloud アカウント配下の通常のサービスロールが含まれます。
-
オペレーターは現在の名前空間と同じ Alibaba Cloud アカウントに属しており、ロールを表示するための
ListRoles権限を持っている必要があります。
Description
いいえ
ロールの説明。最大 256 文字。
-
-
[Test] をクリックします。システムは自動的に以下の 2 項目をチェックします:
-
PassRole 権限チェック:現在のユーザーが、選択された RAM ロールに対する
ram:PassRole権限を持っているか。 -
信頼ポリシーチェック:選択された RAM ロールが、現在の Flink 名前空間による引き受けを信頼しているか。
-
-
チェックに合格したら、[OK] をクリックします。
ジョブでの RAM ロールの使用
RAM ロールが参照された後、ジョブコードで akless.assume-role.role-name パラメーターを使用してロール名を指定します。Flink はそのロールを引き受けて一時的な STS トークンを取得し、そのロールの権限でクラウドリソースにアクセスします。
この機能は、VVR 11.8 以降のエンジンの OSS コネクタと Postgres CDC コネクタでのみサポートされています。
パラメーターの説明
|
パラメーター |
タイプ |
必須 |
説明 |
|
akless.assume-role.role-name |
String |
いいえ |
RAM ロールの名前 (例: |
優先順位ルール
-
AccessKey ペア (accessKeyId + accessKeySecret) が明示的に指定されている場合、AccessKey ペアが最優先されます。
-
AccessKey ペアが指定されておらず、
akless.assume-role.role-nameが指定されている場合、ロールの STS トークンが使用されます。 -
ジョブ内の異なるコネクタは、異なる
akless.assume-role.role-nameの値を指定することで、異なるロールを使用できます。
OSSの例
[Deployment Details] タブの [Runtime Parameters] 配下にある [Other Configuration] に以下の設定を追加します:
# OSS
fs.oss.bucket.<bucketName>.akless.assume-role.role-name: <your-role-name>
fs.oss.inner.bucket: <workspace-associated-bucket-name>
# OSS-HDFS
fs.oss.jindo.akless.assume-role.role-name: <your-role-name>
|
パラメーター |
説明 |
|
|
対象ファイルシステムのパスパラメーター ( |
|
|
ワークスペースリストページの [Storage Type] フィールドを確認して、ワークスペースが自己管理の OSS バケットを使用しているか、フルマネージドストレージを使用しているかを判断し、それに応じてバケット名を取得します:
|
|
|
OSS へのアクセスに使用される RAM ロールの名前。 |
RAM ロール参照の管理
Flink で RAM ロールを編集または削除しても、Flink の RAM ロールへの参照にのみ影響します。RAM ロール自体を直接変更するものではありません。
RAM ロールの編集
-
[Security Services] > [Access Security] > [RAM Roles] で、対象のロールを見つけ、[Actions] 列の [Edit] をクリックします。
-
ダイアログボックスで、説明を変更します。ロール名は変更できません。
-
[Test] をクリックします。チェックに合格したら、[OK] をクリックします。
RAM ロールの削除
RAM ロールを削除すると、現在の名前空間でそのロールを参照しているすべてのジョブが失敗します。注意して進めてください。
-
[Security Services] > [Access Security] > [RAM Roles] で、対象のロールを見つけ、[Actions] 列の [Remove] をクリックします。
-
確認ダイアログボックスで、ロール名を入力し、[Confirm Removal] をクリックします。
ロールステータスの更新
RAM ロールリストの右上隅にある [Refresh] をクリックして、参照されているすべてのロールのステータスを一括で確認します。
|
ステータス |
説明 |
|
正常 |
ロールは RAM に存在し、その信頼ポリシーで Flink による引き受けが許可されています。 |
|
Abnormal |
ロールが RAM から削除されたか、信頼ポリシーが Flink による引き受けを許可していません。このロールを参照しているジョブは異常に実行される可能性があります。 |
付録:STS呼び出しフロー
Alibaba Cloud RAM は、主要な 2 つのロール関連認可モデルを提供します:直接的な引き受け (AssumeRole) と委任による承認 (PassRole) です。
モデル1:直接的な引き受け (sts:AssumeRole)
-
主要なアクション:信頼されたエンティティ (RAM ユーザーやアプリケーションなど) が、自ら STS の
AssumeRoleAPI を呼び出して RAM ロールの一時的な認証情報を取得し、実質的にそのロールになります。 -
認可チェーン:
エンティティ A→sts:AssumeRoleを呼び出す→ロール R を引き受ける→ロール R の権限を取得する。 -
権限要件:エンティティ A には
sts:AssumeRole権限が付与されている必要があります。 -
典型的なシナリオ:ECS またはローカルサーバーで実行されているアプリケーションが、一時的に OSS にアクセスする必要がある場合。アプリケーションは自身の AccessKey ペアを使用して
AssumeRoleを呼び出し、一時的な認証情報を取得して、それを使用して OSS にアクセスします。このシナリオでは、エンティティ A が実行主体です。
モデル2:委任による承認 (ram:PassRole)
-
主要なアクション:エンティティ (RAM ユーザーなど) が、RAM ロールをクラウドサービス (Flink など) に「渡し」、そのサービスがロールを引き受けることを承認します。ユーザー自身はロールを引き受けません。
-
認可チェーン:ユーザー B → ロール A を渡す → クラウドサービスへ → クラウドサービスが
sts:AssumeRoleを呼び出してロール A を引き受ける → クラウドサービスがロール A の権限を取得する。 -
権限要件:ユーザー B には
ram:PassRole権限が付与されている必要があり、かつロール A はクラウドサービスによる引き受けを信頼している必要があります。 -
典型的なシナリオ:開発者 (ユーザー B) が Flink コンソールでジョブを開発し、ロール (ロール A) を指定する場合。Flink サービスがユーザーに代わってクラウドリソースにアクセスできるようにするには、ユーザーがロール A を Flink サービスに渡す権限を持っている必要があります。このシナリオでは、ユーザーが承認者であり、クラウドサービスが実行者です。
例:Flink による OSS へのアクセス
委任による承認 (PassRole) モデルのインタラクションフローは、設定フェーズとランタイムフェーズで構成されます:
-
設定フェーズ:
-
RAM 管理者が、ロールの作成、その権限と信頼関係の設定、ユーザーへの
PassRole権限の付与など、基本的なセットアップを完了します。 -
ユーザーが Flink で RAM ロールの参照を追加します。Flink プラットフォームは、ユーザーがロールを「渡す」権限を持っていること、およびロールが Flink による引き受けを信頼していることを検証します。
-
-
ランタイムフェーズ:
-
サービスによるロールの引き受け:実際のロール引き受け者である Flink サービス (
stream.aliyuncs.com) が、AssumeRoleリクエストを STS に送信します。 -
STSの認可とサービスの実行:STS は、Flink がロール A によって信頼されていることを確認し、一時的な認証情報を発行します。Flink サービスはこれらの認証情報を使用して OSS にアクセスし、ユーザーから委任されたタスクを完了します。
-