DataWorks の個々の開発環境で他の Alibaba Cloud サービスにアクセスするには、ID 認証用の AccessKey ペアを設定する必要があります。個々の開発環境に RAM ロールを関連付けると、Security Token Service (STS) によって提供される一時的なアクセス認証情報を使用して、個々の開発環境で他の Alibaba Cloud サービスにアクセスできます。長期的な AccessKey ペアを設定する必要はありません。これは、AccessKey ペアの漏洩によるセキュリティリスクの軽減に役立ちます。このトピックでは、RAM ロールを使用して STS によって提供される一時的なアクセス認証情報を取得する方法について説明します。
背景情報
信頼できるエンティティが Alibaba Cloud サービスである RAM ロールを作成できます。Alibaba Cloud サービスは、RAM ロールを引き受けてクロスサービスアクセスを実装できます。RAM ロールの詳細については、RAM ロールの概要をご参照ください。
RAM ロールを使用して一時的なアクセス認証情報を取得し、ID 認証とアクセス制御を実装できます。この方法には、次の利点があります。
セキュリティと機密性
STS によって提供される一時的なアクセス認証情報を使用してアクセスする場合、長期的な AccessKey ペアを設定したり、個々の開発環境で認証情報を管理したりする必要はありません。これは、AccessKey ペアの漏洩によるセキュリティリスクの軽減に役立ちます。
制限事項
個々の開発環境に関連付けることができる RAM ロールは 1 つだけです。
ステップ 1:個々の開発環境に RAM ロールを関連付ける
シナリオ 1:DataWorks のデフォルトロールを個々の開発環境に関連付ける
DataWorks で Notebook または Python を使用してデータ開発操作を実行する場合、特定の Alibaba Cloud サービスにアクセスするために AccessKey ペアを設定する必要はありません。
DataWorks のデフォルトロールには、MaxCompute、Hologres、EMR Serverless Spark、Realtime Compute for Apache Flink、および Platform for AI (PAI) にアクセスするための権限があります。DataWorks のデフォルトロールに基づいて発行された一時的なアクセス認証情報を使用して上記のサービスにアクセスすると、個々の開発環境の所有者の権限が取得されます。
DataWorks のデフォルトロールを個々の開発環境に関連付けると、RAM ロールを作成する必要はありません。さらに、個々の開発環境の基本的な開発リソースへのアクセスを許可する一時的なアクセス認証情報を取得できます。
DataWorks のデフォルトロールを個々の開発環境に関連付けた後、次の操作を実行するときに AccessKey ペアを設定する必要はありません。
Notebook の SQL セルを使用して、MaxCompute、Hologres、EMR Serverless Spark、Realtime Compute for Apache Flink、または PAI にアクセスする。
MaxCompute SDK を使用して、個々の開発環境の所有者が実行権限を持つ MaxCompute プロジェクトにタスクを送信する。

シナリオ 2:RAM ロールを個々の開発環境に関連付けない
ワークスペースで個々の開発環境がパブリックに設定されている場合は、RAM ロールを環境に関連付けないことをお勧めします。これは、権限の漏洩を防ぐことができます。個々の開発環境を作成する場合、または個々の開発環境の構成を変更する場合は、[詳細情報] セクションの [RAM ロール] パラメーターを [ロールを関連付けない] に設定できます。
個々の開発環境に RAM ロールを関連付けない場合は、コードで AccessKey ペアを設定して他の Alibaba Cloud サービスにアクセスできます。

ステップ 2:個々の開発環境に関連付けられた RAM ロールに基づいて一時的なアクセス認証情報を取得する
次のいずれかの方法を使用して、RAM ロールが関連付けられている個々の開発環境で一時的なアクセス認証情報を取得できます。
方法 1:Alibaba Cloud Credentials ツールを使用する
Alibaba Cloud Credentials ツールは、個々の開発環境の作成時に自動的に挿入されるローカルサービスを呼び出して、STS によって提供される一時的なアクセス認証情報を取得します。認証情報は定期的に更新されます。
Credentials ツールを使用して RAM ロールのアクセス認証情報を取得するには、次のコマンドを実行して Alibaba Cloud Credentials ツールをインストールします。Python のサンプルコマンド:
pip install alibabacloud_credentials次のサンプルコードは、Credentials ツールの使用方法の例を示しています。他のプログラミング言語での SDK の例の詳細については、アクセス認証情報を使用して API オペレーションを呼び出すためのベストプラクティスをご参照ください。
from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig
credentialsConfig = CredConfig(
type='credentials_uri' # オプション。デフォルトの認証情報チェーンに他のアクセス方法を設定していない場合は、このパラメーターを明示的に設定する必要はありません。Credentials SDK は、URI を使用して一時的なアクセス認証情報を取得します。
)
credentialsClient = CredClient(CredConfig)
方法 2:個々の開発環境のローカルサービスにアクセスする
個々の開発環境では、ターミナルで次のコマンドを実行して、挿入されたローカルサービスにアクセスし、一時的なアクセス認証情報を取得できます。
# RAM ロールの時的なアクセス認証情報を取得します。
curl $ALIBABA_CLOUD_CREDENTIALS_URI次のコードは、サンプルレスポンスを示しています。パラメーター:
SecurityToken:RAM ロールの一時トークン
Expiration:RAM ロールの一時的なアクセス認証情報の有効期限
{
"Code": "Success",
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}方法 3:個々の開発環境のローカルファイルにアクセスする
個々の開発環境の指定されたパスにあるファイルにアクセスして、一時的なアクセス認証情報を取得できます。ファイルのパスは /mnt/.alibabacloud/credentials です。次のコードは、ファイルの内容の例を示しています。
{
"AccessKeyId": "STS.N*********7",
"AccessKeySecret": "3***************d",
"SecurityToken": "DFE32G*******"
"Expiration": "2024-05-21T10:39:29Z"
}ステップ 3:個々の開発環境に関連付けられた RAM ロールを使用して MaxCompute にアクセスする
次のコマンドを実行して、Credentials ツールと MaxCompute SDK をインストールします。
# Credentials ツールをインストールします。 pip install alibabacloud_credentials # MaxCompute SDK をインストールします。 pip install odpsRAM ロールの一時的なアクセス認証情報を使用して MaxCompute にアクセスし、特定のプロジェクトのテーブルリストを取得します。
from alibabacloud_credentials import providers from odps.accounts import CredentialProviderAccount from odps import ODPS if __name__ == '__main__': account = CredentialProviderAccount(providers.DefaultCredentialsProvider()) o = ODPS( account=account, project="{odps_project}", # 値をアクセスするプロジェクトの名前に置き換えます。 endpoint="{odps_endpoint}"# 値をプロジェクトが存在するリージョンのエンドポイントに置き換えます。 ) for t in o.list_tables(): print(t)