権限は、対象のリソースに対する特定の操作を、システムが許可したり拒否したりする条件を定義します。

権限は、権限付与ポリシーで定義されています。 権限をカスタマイズすると、カスタム権限付与ポリシーを使用して特定の権限を定義できます。 RAM (Resource Access Management) コンソールの[ポリシー] ページで [権限付与ポリシーを作成] をクリックし、権限付与ポリシーのカスタマイズを行います。 権限付与ポリシーをカスタマイズする場合は、空白のテンプレートを選択します。

権限付与ポリシーは JSON 文字列で、以下のパラメーターを必要とします。

  • Action: 権限を付与するアクションを示します。 IoT アクションは "iot:" で始まります。 アクションについての詳細と用例は、「アクションの定義」 をご参照ください。

  • Effect : 権限タイプを示します。"Allow (許可) " または "Deny (拒否) " のいずれかです。

  • Resource : IoT Platform では、リソースに対する権限付与をサポートしていないため、アスタリスク (*) を入力してください。

  • Condition: 認証条件を示します。 詳細については、「条件の定義」をご参照ください。

アクションの定義

Action は、API (application programming interface) 操作の名前です。 権限付与ポリシーを作成するときは、各アクションの頭に "iot:" を付け、複数のアクションはコンマ ( , ) で区切ります。 ワイルドカード文字としてアスタリスク ( * ) を使用することもできます。 IoT Platform で使用される API 名の定義について詳しくは、「API アクセス権限」をご参照ください。

アクション定義の例を次に示します。

  • 単一の API 操作を定義します。
    "Action": "iot:CreateProduct"
  • 複数の API 操作を定義します。
    "Action": [
    "iot:UpdateProduct",
    "iot:QueryProduct"
    ]
  • すべての読み取り専用 API 操作を定義します。
    {
      "Version": "1", 
      "Statement": [
        {
          "Action": [
            "iot:Query*", 
            "iot:List*", 
            "iot:Get*", 
            "iot:BatchGet*", 
            "iot:Check*"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "rds:DescribeDBInstances", 
            "rds:DescribeDatabases", 
            "rds:DescribeAccounts", 
            "rds:DescribeDBInstanceNetInfo"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": "ram:ListRoles", 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "mns:ListTopic", 
            "mns:GetTopicRef"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "ots:ListInstance", 
            "ots:GetInstance", 
            "ots:ListTable", 
            "ots:DescribeTable"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "fc:ListServices", 
            "fc:GetService", 
            "fc:GetFunction", 
            "fc:ListFunctions"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "log:ListShards", 
            "log:ListLogStores", 
            "log:ListProject"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "cms:QueryMetricList"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }
      ]
    }
  • すべての読み書き API 操作を定義します。
    {
      "Version": "1", 
      "Statement": [
        {
          "Action": "iot:*", 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "rds:DescribeDBInstances", 
            "rds:DescribeDatabases", 
            "rds:DescribeAccounts", 
            "rds:DescribeDBInstanceNetInfo", 
            "rds:ModifySecurityIps"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": "ram:ListRoles", 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "mns:ListTopic", 
            "mns:GetTopicRef"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "ots:ListInstance", 
            "ots:ListTable", 
            "ots:DescribeTable", 
            "ots:GetInstance"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "fc:ListServices", 
            "fc:GetService", 
            "fc:GetFunction", 
            "fc:ListFunctions"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": [
            "log:ListShards", 
            "log:ListLogStores", 
            "log:ListProject"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }, 
        {
          "Action": "ram:PassRole", 
          "Resource": "*", 
          "Effect": "Allow", 
          "Condition": {
            "StringEquals": {
              "acs:Service": "iot.aliyuncs.com"
            }
          }
        }, 
        {
          "Action": [
            "cms:QueryMetricList"
          ], 
          "Resource": "*", 
          "Effect": "Allow"
        }
      ]
    }

条件の定義

RAM 権限付与ポリシーでは、現在、アクセス IP アドレス制限、HTTPS (Hypertext Transfer Protocol Secure) ベースのアクセス許可、MFA (マルチファクター認証) ベースのアクセス許可、アクセス時間制限など複数の認証条件をサポートしています。 IoT Platform 上のすべての API 操作は、上記の認証条件をサポートします。

アクセス元 IP アドレスによるアクセス制御

このアクセス制御は、IoT Platform にアクセスできる発信元 IP アドレスを制限し、CIDR (Classless Inter-Domain Routing) ブロックによるフィルタリングをサポートします。 典型的なシナリオは次の通りです。

  • 単一の IP アドレスまたは CIDR ブロックにアクセス制御ルールを適用します。 たとえば、次のコードは、IP アドレス 10.101.168.111 および 10.101.169.111/24 からのアクセス要求のみが許可されていることを示します。
    {
    "Statement": [
    {
    "Effect": "Allow",
    "Action": "iot:*",
    "Resource": "*",
    "Condition": {
    "IpAddress": {
    "acs:SourceIp": [
    "10.101.168.111",
    "10.101.169.111/24"
    ]
    }
    }
    }
    ],
    "Version": "1"
    }
  • アクセス制御ルールを複数の IP アドレスに適用します。 たとえば、次のコードは、IP アドレス10.101.168.111 および 10.101.169.111 からのアクセス要求のみが許可されていることを示します。
    {
    "Statement": [
    {
    "Effect": "Allow",
    "Action": "iot:*",
    "Resource": "*",
    "Condition": {
    "IPaddress ":{
    "acs:SourceIp": [
    "10.101.168.111",
    "10.101.169.111"
    ]
    }
    }
    }
    ],
    "Version": "1"
    }
    
    						
HTTPS ベースのアクセス制御

このアクセス制御では、HTTPS ベースのアクセスを有効または無効にすることができます。

たとえば、次のコードは、HTTPS ベースのアクセスのみが許可されていることを示しています。

{
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*",
"Condition": {
"Bool": {
"acs:SecureTransport": "true"
}
}
}
],
"Version": "1"
}
MFA ベースのアクセス制御

このアクセス制御では、MFA ベースのアクセスを有効または無効にすることができます。

たとえば、次のコードは、MFA ベースのアクセスのみが許可されていることを示しています。

{
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*",
"Condition": {
"Bool": {
"acs:MFAPresent ": "true"
}
}
}
],
"Version": "1"
}
アクセス時間制限

このアクセス制御では、リクエストのアクセス時間を制限することができます。 指定された時刻より前のアクセス要求が許可または拒否されます。

たとえば、次のコードは、北京時間 (UTC+8) で 2019 年 1 月 1 日 00:00:00 より前のアクセス要求のみが許可されていることを示します。

{
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*",
"Condition": {
"DateLessThan": {
"acs:CurrentTime": "2019-01-01T00:00:00+08:00"
}
}
}
],
"Version": "1"
}

典型的なシナリオ

これらのアクション、リソース、および条件の定義に基づいた、典型的なシナリオにおける権限付与ポリシーを以下に示します。

次の例は、アクセスを許可する権限付与ポリシーです。

シナリオ: CIDR ブロック 10.101.168.111/24 にIoT Platform のアクセス権限を割り当て、北京時間 (UTC+8) で 2019 年 1 月 1 日 00:00:00 より前の HTTPS ベースのアクセスだけを許可します。

{
"Statement": [
{
"Effect": "Allow",
"Action": "iot:*",
"Resource": "*",
"Condition": {
"IPaddress ":{
"acs:SourceIp": [
"10.101.168.111/24"
]
},
"DateLessThan": {
"acs:CurrentTime": "2019-01-01T00:00:00+08:00"
},
"Bool": {
"acs:SecureTransport": "true"
}
}
}
],
"Version": "1"
}
次の例は、特定の条件のアクセスを拒否する権限付与ポリシーです。

シナリオ: IP アドレス 10.101.169.111 からの読み取り要求を拒否します。

{
"Statement": [
{
"Effect": "Deny",
"Action": [
"iot:Query*",
"iot:List*",
"iot:Get*",
"iot:BatchGet*" 
],
"Resource": "*",
"Condition": {
"IpAddress": {
"acs:SourceIp": [
"10.101.169.111"
]
}
}
}
],
"Version": "1"
}

権限付与ポリシーを作成したら、RAM コンソール内の [ユーザー管理] ページで権限付与ポリシーを RAM ユーザー に適用します。 許可された RAM ユーザーは、このポリシーで定義されている操作を実行できます。 RAM ユーザーの作成とアクセス権付与の詳細については、「 RAM ユーザーの使用」をご参照ください。