インスタンスにインスタンス RAM ロールを関連付けることで、長期的な AccessKey の代わりに STS の一時的な認証情報を使用して他のクラウドリソースにアクセスできます。これにより、認証情報の漏洩リスクが軽減され、セキュリティが向上します。このトピックでは、インスタンス RAM ロールを使用して STS の一時的な認証情報を取得する方法について説明します。
背景情報
インスタンス RAM ロールは、Alibaba Cloud サービスを信頼されたエンティティとする RAM ロールです。これにより、クラウドサービスがロールを引き受けて、安全にサービス間のアクセスを行うことができます。RAM ロールの詳細については、「RAM ロールとは」をご参照ください。
インスタンス RAM ロールを使用して認証とアクセス制御のための一時的なアクセス認証情報を取得することには、次の重要な利点があります。
-
セキュリティの強化
インスタンス内で認証情報を管理する必要がありません。長期的な AccessKey の代わりに STS の一時的な認証情報を使用することで、認証情報の漏洩リスクが軽減されます。
制限
1 つの個人開発環境インスタンスには、1 つの RAM ロールのみ関連付けることができます。
ステップ1:RAM ロールの設定
シナリオ1:DataWorks デフォルトロールの関連付け
Notebook または Python を使用して開発を行う場合、AccessKey ID と AccessKey Secret を提供することなく、一部のクラウド製品にアクセスできます。
DataWorks デフォルトロールは、MaxCompute、Hologres、EMR Serverless Spark、Realtime Compute for Apache Flink、および Platform for AI (PAI) へのアクセス権限のみを付与します。このロールから発行された一時的なアクセス認証情報を使用してこれらのサービスにアクセスする場合、個人開発環境の所有者と同じ権限を持つことになります。
DataWorks デフォルトロールをインスタンスに関連付けると、権限昇格なしに基本的な開発リソースへアクセスできる一時的なアクセス認証情報が利用可能になり、カスタム RAM ロールを作成する必要がなくなります。
DataWorks デフォルトロールを関連付けた後、次のシナリオでは AccessKey を設定する必要はありません。
-
Notebook の SQL セルを使用して、MaxCompute、Hologres、EMR Serverless Spark、Realtime Compute for Apache Flink、または Platform for AI (PAI) にアクセスする場合。
-
ODPS SDK を使用して、インスタンス所有者に実行権限がある MaxCompute プロジェクトにタスクを送信する場合。
[詳細情報] セクションで、[インスタンス RAM ロール] 設定を見つけ、[DataWorks デフォルトロール] を選択します。
シナリオ2:RAM ロールの関連付けなし
インスタンスがワークスペースで公開されている場合は、権限の漏洩を防ぐため、RAM ロールを関連付けないでください。インスタンスを作成または変更する際、[詳細情報] セクションの [インスタンス RAM ロール] オプションを [ロールを関連付けない] に設定してください。
RAM ロールが関連付けられていない場合は、コード内で AccessKey ID と AccessKey Secret を設定することで、クラウド製品にアクセスできます。
ステップ2:一時的なアクセス認証情報の取得
個人開発環境インスタンスに RAM ロールを関連付けた後、次のいずれかの方法で一時的なアクセス認証情報を取得できます。
方法1:Credentials ツールの使用
Credentials ツールは、インスタンス作成時に自動的に挿入されるローカルサービスを呼び出します。このサービスは STS の一時的な認証情報を取得し、自動的にローテーションします。
Credentials ツールを使用してインスタンス RAM ロールの認証情報を取得するには、次のコマンドを実行してツールをインストールします。以下の例では 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(credentialsConfig)
方法2:ローカルサービスのエンドポイントへのクエリ
個人開発環境インスタンス内のターミナルから、次のコマンドを実行して、挿入されたローカルサービスに直接クエリを実行し、認証情報を取得できます。
# インスタンス RAM ロールの一時的なアクセス認証情報を取得します。
curl $ALIBABA_CLOUD_CREDENTIALS_URI
以下はレスポンスの例です。パラメーターの説明は次のとおりです。
-
SecurityToken:インスタンス RAM ロールの一時的なトークン。 -
Expiration:一時的なアクセス認証情報の有効期限。
{
"Code": "Success",
"AccessKeyId": "************",
"AccessKeySecret": "************",
"SecurityToken": "DFE32G*******",
"Expiration": "2024-05-21T10:39:29Z"
}
方法3:ローカルの認証情報ファイルの読み取り
個人開発環境インスタンス内の特定のパスにあるファイルにアクセスして、インスタンス RAM ロールの一時的なアクセス認証情報を取得できます。ファイルは /mnt/.alibabacloud/credentials にあり、次の内容が含まれています。
{
"AccessKeyId": "*********",
"AccessKeySecret": "***************",
"SecurityToken": "DFE32G*******",
"Expiration": "2024-05-21T10:39:29Z"
}
ステップ3:MaxCompute へのアクセス
-
次のコマンドを実行して、Credentials ツールと ODPS SDK をインストールします。
# Credentials ツールをインストールします。 pip install alibabacloud_credentials # ODPS SDK をインストールします。 pip install odps -
インスタンス RAM ロールからの一時的な認証情報を使用して ODPS にアクセスし、指定されたプロジェクト内のテーブルのリストを取得します。
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)