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

IoT Platform:STS を使用した権限の管理

最終更新日:Mar 27, 2025

Security Token Service (STS) は、Resource Access Management (RAM) よりも権限管理の要件が厳格です。 STS を使用して RAM ユーザーにリソースに対する一時的な権限を付与する場合は、複雑な手順に従う必要があります。

背景情報

RAM ユーザーと RAM ユーザーに付与される権限は永続的に有効です。 RAM ユーザーを手動で削除するか、RAM ユーザーから権限を取り消すことしかできません。 RAM ユーザーの情報が漏洩し、RAM ユーザーを削除したり、RAM ユーザーから権限を取り消したりしないと、Alibaba Cloud リソースと情報がリスクにさらされます。そのため、STS を使用して、重要な権限や長期の有効期間を必要としない権限を管理することをお勧めします。

図 1. RAM ユーザーに一時的な権限を付与する手順STS

手順 1:RAM ロールの作成

RAM ロールは、一連の権限を持つ仮想エンティティです。

手順

  1. 管理権限を持つ RAM ユーザーとして [RAM コンソール] にログオンします。

  2. 左側のナビゲーションウィンドウで、[ID] > [ロール] を選択します。

  3. [ロール] ページで、[ロールの作成] をクリックします。

    image

  4. [ロールの作成] ページで、[プリンシパルタイプ] パラメーターを [クラウドアカウント] に設定し、Alibaba Cloud アカウントを指定して、[OK] をクリックします。

    image

    • [現在のアカウント]:Alibaba Cloud アカウントに属する RAM ユーザーまたは RAM ロールに RAM ロールを引き受けてもらう場合は、[現在のアカウント] を選択します。

    • [その他のアカウント]:別の Alibaba Cloud アカウントに属する RAM ユーザーまたは RAM ロールに RAM ロールを引き受けてもらう場合は、[その他のアカウント] を選択し、Alibaba Cloud アカウントの ID を入力します。このオプションは、異なる Alibaba Cloud アカウントに属するリソースに対する権限を付与するために提供されています。詳細については、「RAM ロールを使用して Alibaba Cloud アカウント間で権限を付与する」をご参照ください。Alibaba Cloud アカウントの ID は、[Security Settings] ページで確認できます。

  5. オプション。信頼された Alibaba Cloud アカウントに属する特定の RAM ユーザーまたは RAM ロールのみが RAM ロールを引き受けるようにするには、[ポリシーエディターに切り替える] をクリックし、エディターで RAM ロールの信頼ポリシーを変更します。

    エディターは、ビジュアルエディターと JSON モードをサポートしています。次の例では、ID が 100******0719 の Alibaba Cloud アカウント内の RAM ユーザー Alice のみが RAM ロールを引き受けることができます。

    • ビジュアルエディター

      [プリンシパル] 要素に RAM ユーザーを指定します。

      image

      image

    • JSON

      Principal パラメーターの RAM フィールドに RAM ユーザーを指定します。

      {
        "Version": "1",
        "Statement": [
          {
            "Effect": "Allow",
            "Principal": {
              "RAM": "acs:ram::100******0719:user/Alice"
            },
            "Action": "sts:AssumeRole"
          }
        ]
      }

  6. [ロールの作成] ダイアログボックスで、[ロール名] パラメーターを設定し、[OK] をクリックします。

手順 2:RAM ポリシーの作成

RAM ポリシーは、リソースアクセス用にロールに付与する権限を定義します。

  1. 管理権限を持つ RAM ユーザーとして [RAM コンソール] にログオンします。

  2. 左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。

  3. [ポリシー] ページで、[ポリシーの作成] をクリックします。

    image

  4. [ポリシーの作成] ページで、[JSON] タブをクリックします。

    image

  5. ポリシーの内容を入力します。

    RAM ポリシーの構文と構造の詳細については、「ポリシーの構造と構文」をご参照ください。

    次のサンプルコードは、IoT Platform のリソースに対する読み取り専用権限を定義するポリシーを示しています。

    {
        "Version":"1",
        "Statement":[
            {
                "Action":[
                    "rds:DescribeDBInstances",
                    "rds:DescribeDatabases",
                    "rds:DescribeAccounts",
                    "rds:DescribeDBInstanceNetInfo"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Action":"ram:ListRoles",
                "Effect":"Allow",
                "Resource":"*"
            },
            {
                "Action":[
                    "mns:ListTopic"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Action":[
                    "dhs:ListProject",
                    "dhs:ListTopic",
                    "dhs:GetTopic"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Action":[
                    "ots:ListInstance",
                    "ots:ListTable",
                    "ots:DescribeTable"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Action":[
                    "log:ListShards",
                    "log:ListLogStores",
                    "log:ListProject"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Effect":"Allow",
                "Action":[
                    "iot:Query*",
                    "iot:List*",
                    "iot:Get*",
                    "iot:BatchGet*"
                ],
                "Resource":"*"
            }
        ]
    }

    次のサンプルコードは、IoT Platform のリソースに対する読み取りおよび書き込み権限を定義するポリシーを示しています。

    {
        "Version":"1",
        "Statement":[
            {
                "Action":[
                    "rds:DescribeDBInstances",
                    "rds:DescribeDatabases",
                    "rds:DescribeAccounts",
                    "rds:DescribeDBInstanceNetInfo"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Action":"ram:ListRoles",
                "Effect":"Allow",
                "Resource":"*"
            },
            {
                "Action":[
                    "mns:ListTopic"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Action":[
                    "dhs:ListProject",
                    "dhs:ListTopic",
                    "dhs:GetTopic"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Action":[
                    "ots:ListInstance",
                    "ots:ListTable",
                    "ots:DescribeTable"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Action":[
                    "log:ListShards",
                    "log:ListLogStores",
                    "log:ListProject"
                ],
                "Resource":"*",
                "Effect":"Allow"
            },
            {
                "Effect":"Allow",
                "Action":"iot:*",
                "Resource":"*"
            }
        ]
    }

ポリシーを作成した後、ポリシーを RAM ロールにアタッチできます。このようにして、このポリシーで定義されている権限が RAM ロールに付与されます。

手順 3:RAM ロールの承認

承認された RAM ロールのみがリソースにアクセスできます。単一の RAM ロールを承認するには、RAM コンソールの [ロール] ページで、RAM ロールの [アクション] 列にある [権限の追加] をクリックします。詳細については、「RAM ロールに権限を付与する」をご参照ください。複数の RAM ロールを一度に承認するには、次の手順を実行します。

  1. RAM 管理者として [RAM コンソール] にログオンします。

  2. 左側のナビゲーションウィンドウで、[権限] > [許可] を選択します。

  3. [権限] ページで、[権限の付与] をクリックします。

    image

  4. [権限の付与] パネルで、RAM ロールに権限を付与します。

    1. [リソーススコープ] パラメーターを設定します。

      • [アカウント]:承認は現在の Alibaba Cloud アカウントに有効です。

      • [リソースグループ]:承認は特定のリソースグループに有効です。

        説明

        [リソーススコープ] パラメーターで [リソースグループ] を選択する場合は、必要なクラウドサービスがリソースグループをサポートしていることを確認してください。詳細については、「リソースグループで動作するサービス」をご参照ください。

    2. [プリンシパル] パラメーターを設定します。

      プリンシパルは、権限を付与する RAM ロールです。一度に複数の RAM ロールを選択できます。

    3. [ポリシー] パラメーターを設定します。

      ポリシーは、アクセス権限のセットです。一度に複数のポリシーを選択できます。

      • システムポリシー:Alibaba Cloud によって作成されたポリシー。これらのポリシーは使用できますが、変更することはできません。ポリシーのバージョン更新は Alibaba Cloud によって維持されます。詳細については、「RAM で動作するサービス」をご参照ください。

        説明

        システムは、AdministratorAccess や AliyunRAMFullAccess などの高リスクのシステムポリシーを自動的に識別します。高リスクのポリシーをアタッチして不要な権限を付与しないことをお勧めします。

      • カスタムポリシー:ビジネス要件に基づいてカスタムポリシーを管理および更新できます。カスタムポリシーの作成、更新、削除ができます。詳細については、「カスタムポリシーの作成」をご参照ください。

    4. [権限の付与] をクリックします。

  5. [閉じる] をクリックします。

RAM ロールを承認した後、RAM ロールを引き受けるために必要な権限を RAM ユーザーに付与できます。

手順 4:RAM ユーザーに RAM ロールを引き受ける権限を付与する

ポリシーが RAM ロールにアタッチされると、RAM ロールはポリシーで定義されている権限を取得します。ただし、RAM ロールは仮想 ID にすぎません。RAM ロールは、RAM ユーザーがロールを引き受けた後にのみ、許可された操作を実行するために使用できます。すべての RAM ユーザーが RAM ロールを引き受けることができる場合、セキュリティリスクが存在する可能性があります。このようなリスクを防ぐために、承認された RAM ユーザーのみが RAM ロールを引き受けることができます。

RAM ユーザーが RAM ロールを引き受けることを承認するには、Resource パラメーターの値が RAM ロールの ID に設定されているカスタムポリシーを作成します。次に、このポリシーを使用して RAM ユーザーを承認できます。

  1. 管理権限を持つ RAM ユーザーとして [RAM コンソール] にログオンします。

  2. 左側のナビゲーションウィンドウで、[権限] > [ポリシー] を選択します。

  3. [ポリシー] ページで、[ポリシーの作成] をクリックします。

    image

  4. [ポリシーの作成] ページで、[JSON] タブをクリックします。

    image

  5. ポリシーの内容を入力します。

    説明

    ポリシー文では、Resource 要素の値を RAM ロールの Alibaba Cloud Resource Name (ARN) に設定します。 RAM ロールの ARN を表示するには、[ロール] ページに移動し、RAM ロールの名前をクリックします。 [基本情報] セクションで RAM ロールの ARN を表示できます。

    例:

    {
        "Version":"1",
        "Statement":[
            {
                "Effect":"Allow",
                "Action":"iot:QueryProduct",
                "Resource":"ARN of a RAM role" // RAM ロールの ARN
            }
        ]
    }
  6. ポリシーの作成後、[RAM コンソール] ホームページに戻ります。

    1. 左側のナビゲーションウィンドウで、[ID] > [ユーザー] を選択します。

    2. RAM ユーザーのリストで、承認する RAM ユーザーを選択し、RAM ユーザーのリストの下にある [権限の追加] をクリックします。

    3. [権限の追加] パネルで、作成したポリシーを選択し、[OK] をクリックします。

承認が完了すると、RAM ユーザーは特定の RAM ロールを引き受ける権限を取得します。その後、STS を使用して、リソースにアクセスするために必要な一時的な ID 資格情報を取得できます。

手順 5:RAM ユーザーの一時的な ID 資格情報を取得する

承認された RAM ユーザーは、STS API 操作を呼び出すか、STS SDK を使用して一時的な ID 資格情報を取得できます。一時的な ID 資格情報には、AccessKey ID、AccessKey シークレット、およびセキュリティトークンが含まれます。 STS API と STS SDK の詳細については、「STS API リファレンス」および「STS SDK リファレンス」をご参照ください。

STS API または SDK を使用して一時的な ID 資格情報を取得するには、次のパラメーターが必要です。

  • RoleArn:RAM ユーザーが引き受けたい RAM ロールの ARN。

  • RoleSessionName:一時的な ID 資格情報の名前。これはカスタムパラメーターです。

  • Policy:RAM ユーザーに付与される権限を指定するポリシー。このパラメーターは、RAM ロールの制限付き権限を持つトークンを生成するために使用されます。このパラメーターを設定しないと、RAM ロールのすべての権限を持つトークンが返されます。

  • DurationSeconds:一時的な ID 資格情報の有効期間。このパラメーターは秒単位で測定されます。デフォルト値は 3600 で、値の範囲は 900 ~ 3600 です。

  • id および secret:RAM ロールを引き受けたい RAM ユーザーの AccessKey ID および AccessKey シークレット。

次の例は、一時的な ID 資格情報を取得する方法を示しています。

API を使用した例:RAM ユーザーは STS の AssumeRole 操作を呼び出して、一時的な ID 資格情報を取得します。

https://sts.aliyuncs.com?Action=AssumeRole
&RoleArn=acs:ram::1234567890123456:role/iotstsrole
&RoleSessionName=iotreadonlyrole
&DurationSeconds=3600
&Policy=<url_encoded_policy>
&<Common request parameters> // 共通のリクエストパラメーター

SDK を使用した例:RAM ユーザーは、STS 用の Python コマンドラインインターフェイス (CLI) を使用して一時的な ID 資格情報を取得します。

$python ./sts.py AssumeRole RoleArn=acs:ram::1234567890123456:role/iotstsrole RoleSessionName=iotreadonlyrole Policy='{"Version":"1","Statement":[{"Effect":"Allow","Action":"iot:*","Resource":"*"}]}' DurationSeconds=3600 --id=id --secret=secret

リクエストが成功すると、一時的な ID 資格情報が返されます。資格情報には、AccessKey ID、AccessKey シークレット、およびセキュリティトークンが含まれます。

手順 6:RAM ユーザーとしてリソースにアクセスする

RAM ユーザーが一時的な ID 資格情報を取得した後、RAM ユーザーは SDK リクエストで資格情報を渡して、特定の RAM ロールを引き受けることができます。

次のサンプルコードは、RAM ユーザーが Java 用の STS SDK を使用して RAM ロールを引き受けることを示しています。 RAM ユーザーは、リクエストで AccessKey ID、AccessKey シークレット、およびセキュリティトークンを渡し、IAcsClient オブジェクトを作成します。

IClientProfile  profile = DefaultProfile.getProfile("cn-hangzhou", AccessKeyId,AccessKeySecret);
RpcAcsRequest request.putQueryParameter("SecurityToken", Token);
IAcsClient client = new DefaultAcsClient(profile);
AcsResponse response = client.getAcsResponse(request);