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

Elastic Compute Service:Alibaba Cloud アカウントの保護と認証情報の漏洩防止

最終更新日:May 16, 2026

MFA を有効にし、AccessKey の代わりに RAM ロールを使用し、認証情報を定期的にローテーションして、不正アクセスを防止します。

セキュリティリスク

Alibaba Cloud アカウントに対する主なセキュリティ脅威には、パスワードへのブルートフォース攻撃や、AccessKey や STS トークンなどの長期的な認証情報の漏洩が含まれます。攻撃者がこれらの認証情報を入手すると、正当なユーザーになりすましてログインし、リソースを管理したり、機密データにアクセスしたりする可能性があります。これにより、以下の事態が発生する可能性があります。

  • 不正なリソース使用による直接的な金銭的損失。

  • ビジネスの可用性に影響を与えるインフラストラクチャの損傷やサービスの中断。

  • 機密データの漏洩や暗号化による、情報漏洩やランサムウェアのリスク。

  • 悪意のあるプログラムやバックドアのインストールによる、システムのセキュリティとデータの整合性に対する長期的な脅威。

ベストプラクティス

アカウントパスワードの保護と MFA の有効化

  • 複雑なパスワードの設定:脆弱なパスワードは、アカウント侵害の主な原因です。ブルートフォース攻撃を防ぐため、脆弱なパスワードの使用は避けてください。

  • パスワードの定期的な変更:長期使用による漏洩リスクを低減するため、90 日ごとにパスワードを変更してください。

  • MFA の有効化:Alibaba Cloud アカウントの仮想 MFA デバイスのアタッチまたはデタッチ。MFA は、パスワード認証に加えて、モバイルトークンやハードウェアで保護されたキーなどの動的検証コードを追加のレイヤーとして導入し、不正アクセスを防止します。

AccessKey の代わりに ECS RAM ロールを使用

Elastic Compute Service (ECS) インスタンス上のアプリケーションが、ECS のスケーリングなどで Alibaba Cloud API を呼び出す必要がある場合は、AccessKey の代わりに RAM ロールを使用してください。

RAM ユーザーの作成とロールのアタッチ

インスタンスにロールをアタッチするには、アカウントに sts:AssumeRole 権限が必要です。

コンソール

  1. Resource Access Management (RAM) ユーザーの作成と権限付与を行います。

  2. ECS インスタンスに RAM ロールをアタッチします。

    インスタンス作成時のロールのアタッチ

    インスタンス購入ページでインスタンスを作成するときは、詳細オプションインスタンス RAM ロール を選択します。

    インスタンスの脆弱性や設定エラーによる STS トークンの漏洩を防ぐには、[メタデータアクセスモード][セキュリティ強化モード] を選択します。 詳細については、「強制モードを使用してインスタンスメタデータにアクセスする」をご参照ください。

    既存インスタンスへのロールのアタッチ

    1. ECS コンソール - インスタンス ページに移動し、対象のリージョンを選択します。

    2. インスタンス ID をクリックして、インスタンス詳細ページに移動します。

    3. 「その他の情報」セクションで、[RAM ロールのアタッチ/デタッチ] をクリックします。

    4. RAMロールを選択し、OK をクリックします。

    重要

    ECS インスタンスには 1 つの RAM ロールしかアタッチできません。アプリケーションが複数の権限を必要とする場合は、その単一のロールにすべての権限を付与してください。

    たとえば、インスタンスにすでに AliyunECSDiskEncryptDefaultRole ロールがアタッチされており、さらにネットワークインターフェイスの管理権限が必要な場合は、RAM コンソールでそのロールに AliyunECSNetworkInterfaceManagementAccess ポリシーを追加してください。

API

API を使用して、ロールのアタッチとデタッチが可能です。

  • インスタンス作成時のロールのアタッチRunInstances API または CreateInstance API を呼び出す際に、RamRoleName パラメーターを指定します。

  • 既存インスタンスへのロールのアタッチAttachInstanceRamRole API を呼び出します。

  • ロールのデタッチDetachInstanceRamRole API を呼び出します。

アプリケーションからの RAM ロールによる Alibaba Cloud サービスへのアクセス

ECS インスタンス上のアプリケーションは、インスタンスメタデータサービスから一時的な STS トークンを取得し、それを使用して Alibaba Cloud API を呼び出すことができます。

サンプルコード

from alibabacloud_credentials.client import Client as CredClient
from alibabacloud_credentials.models import Config as CredConfig
from alibabacloud_tea_openapi.models import Config
from alibabacloud_ecs20140526.client import Client as EcsClient
from alibabacloud_ecs20140526 import models as ecs_models
from alibabacloud_tea_util.models import RuntimeOptions

# ステップ 1: STS トークンを取得します
def get_sts_token():
    config = CredConfig(
        type="ecs_ram_role",
        enable_imds_v1=False
    )
    cred_client = CredClient(config)
    credential = cred_client.get_credential()
    return {
        "AccessKeyId": credential.get_access_key_id(),
        "AccessKeySecret": credential.get_access_key_secret(),
        "SecurityToken": credential.get_security_token()
    }

# ステップ 2: ECS クライアントを初期化します
def create_ecs_client(sts_token):
    config = Config(
        access_key_id=sts_token["AccessKeyId"],
        access_key_secret=sts_token["AccessKeySecret"],
        security_token=sts_token["SecurityToken"],
        endpoint="ecs.cn-hangzhou.aliyuncs.com"
    )
    return EcsClient(config)

# ステップ 3: インスタンス作成リクエストを構築します
def build_create_instance_request():
    return ecs_models.RunInstancesRequest(
        region_id="cn-hangzhou",
        image_id="aliyun_3_x64_20G_scc_alibase_20220225.vhd",
        instance_type="ecs.e-c1m2.xlarge",
        security_group_id="sg-bp1esyhwfbqeyudt****",
        v_switch_id="vsw-bp1nzprm8h7mmnl8t****",
        instance_name="sdk-test",
        instance_charge_type="PostPaid",
        key_pair_name="sdk-key-pair",
        system_disk_category="cloud_essd"
    )

# ステップ 4: API を呼び出してインスタンスを作成します
def create_instance(client, request):
    runtime = RuntimeOptions()
    try:
        response = client.run_instances_with_options(request, runtime)
        print("インスタンスが正常に作成されました。インスタンス ID: ", response.body.instance_id_sets.instance_id_set[0])
    except Exception as e:
        print("インスタンスの作成に失敗しました。エラーメッセージ: ", e)

# メイン関数
if __name__ == "__main__":
    sts_token = get_sts_token()  # STS トークンを取得します
    ecs_client = create_ecs_client(sts_token)  # ECS クライアントを初期化します
    request = build_create_instance_request()  # インスタンス作成リクエストを構築します
    create_instance(ecs_client, request)  # API を呼び出してインスタンスを作成します

AccessKey の保護と漏洩リスクの低減

AccessKey を使用する必要がある場合は、そのライフサイクル (作成、保管、配布、使用) 全体にわたってセキュリティ管理を強化してください。

  • 作成:「1 人に 1 つの AccessKey、1 つのアプリケーションに 1 つの AccessKey」の原則に従ってください。複数のユーザーやプログラム間で AccessKey を共有しないでください。これにより、漏洩した場合に責任者を迅速に特定し、影響を限定し、キーをローテーションできます。

  • 権限管理最小権限の原則に従い、必要な権限のみを付与してください。RAM ユーザーを使用し、職責に基づいて権限を割り当ててください。Alibaba Cloud アカウントの AccessKey の使用は避けてください。詳細については、「Alibaba Cloud アカウントの使用を避け、異なる職責を持つ RAM ユーザーに異なる権限を付与する」をご参照ください。

  • 安全な保管:AccessKey は、次のような信頼できるデバイスに保管してください。

    • root または特定のユーザーのみが読み取り可能なファイル。

    • アクセス制御を備えたデータベースまたは Key Management Service (KMS)。

    • メモ、コードリポジトリ、チャット履歴、個人の署名などに AccessKey を保管しないでください。

  • 安全な配布:暗号化された AccessKey ファイルを 1 つのチャネル (メールなど) で送信し、復号パスワードを別のチャネル (テキストメッセージなど) で送信してください。

  • 安全な使用:コードに AccessKey をハードコードしないでください。AccessKey は別の設定ファイルに保管し、暗号化して信頼できるサーバーに保存してください。配布後、ファイルを復号し、所有者のみが読み取れるように権限を設定してください。

  • ネットワークアクセス制御:RAM コンソールで AccessKey のネットワークアクセス制御ポリシーを設定してください。

  • 定期的なローテーションとクリーンアップ

    • 定期的なローテーション90 日ごとにAccessKey のローテーションを行ってください。新しい AccessKey を生成し、ユーザーに更新を通知してください。

    • 定期的なクリーンアップ:RAM コンソールで AccessKey の操作記録を確認し、未使用のキーを無効化してください。詳細については、「RAM ユーザーの AccessKey の削除」をご参照ください。

  • AccessKey の漏洩の監視:Security Center の AccessKey 漏洩検出機能を使用して、AccessKey が漏洩していないかを確認してください。この機能はアラート通知をサポートしています。漏洩が発生した場合、Alibaba Cloud はエスカレーションを防ぐために AccessKey に対する制限的保護を提供します。

コンプライアンス

ECS インスタンスが AccessKey を使用しているかどうかの確認

AccessKey ログのクエリを行い、AccessKey に関連付けられているサービス、IP アドレス、リソースを特定します。

前提条件ActionTrail の追跡の作成を行い、ログを Simple Log Service (SLS) Logstore に配信済みであること。

  • VPC エンドポイントから開始された AccessKey 呼び出しのクエリ

    * | SELECT "event.eventid","event.sourceipaddress", "event.userIdentity.accessKeyId",  "event.vpcId" WHERE "event.userIdentity.accessKeyId" LIKE 'LTA%' and "event.vpcId" LIKE 'vpc%'

    結果の例:

    image.png

    vpcIdsourceipaddress を使用して呼び出しを開始した ECS インスタンスを特定し、どのプログラムが accessKeyId を使用して OpenAPI を呼び出しているかを調査してください。

  • インターネットエンドポイントから開始された AccessKey 呼び出しのクエリ

    * | SELECT "event.eventid","event.sourceipaddress", "event.userIdentity.accessKeyId" WHERE "event.userIdentity.accessKeyId" LIKE 'LTA%' and "event.vpcId" IS NULL

    結果の例:

    image.png

    sourceipaddress が ECS インスタンスのパブリック IP アドレスであるかどうかを判断します。 アカウントの EIP とパブリック IP アドレスを取得し、sourceipaddress がお客様のものであるかどうかを確認します。 EIP またはパブリック IP アドレスが ECS インスタンスに直接アタッチされている場合は、インスタンスを特定してその設定を変更できます。

AccessKey のインスタンス RAM ロールへの置換

AccessKey の代わりに ECS RAM ロールを使用」および「AccessKey 漏洩の解決策」をご参照ください。