IAM 条件プロパティー
動的ルールとトラステッド・プロファイルは、どちらも条件付き IAM ステートメントを使用します。このステートメントは、フェデレーテッド・ユーザーをアクセス・グループまたはトラステッド・プロファイルに自動的に追加するために指定します。 ユーザーがフェデレーテッド ID を使用してログインすると、ID プロバイダー (IdP) からのデータは、設定した条件に基づいてそのユーザーを動的にアクセス・グループにマップします。 詳細については、アクセス・グループの動的ルールの作成および トラステッド・プロファイルの作成を参照してください。
また、条件付きIAMアクセスポリシーを割り当てて、 アカウント内のリソースへの一時的なアクセスを指定したり、特定の時間帯にリソースへのアクセスを許可したりすることもできる。 詳細については、 時間ベースの条件によるアクセス制限を 参照し、 /v2/policies アクセスポリシーの条件 セクションを確認してください。
動的ルールと信頼されたプロファイルの詳細
各動的ルールとトラステッド・プロファイルの信頼関係には、以下のプロパティーがあります。
- 名前
- アクセス・グループまたはトラステッド・プロファイルに追加するユーザーのタイプを記憶するのに役立つカスタム名を入力します。
- ID プロバイダー (IdP)
- 動的規則またはトラステッド・プロファイルが評価されるのは、ログインしているユーザーが、この発行者 URI を持つエンタープライズ IdP を使用して認証する場合のみです。 IdP URL がコンソールに表示され、動的ルールまたは信頼できるプロファイルを作成するときにコピーして貼り付けることができます。 例えば、
https://w3id.sso.ibm.com/auth/sps/samlidp2/saml20です。View identity provider (IdP) dataをクリックして IdP を表示することもできます。 IBMidの場合、IdP は SAML の「entityId」フィールド (発行者 ID と呼ばれることもある) であり、IBMid でのオンボード時にフェデレーション構成の一部となります。 App ID の場合、同等の構文は "realm ID "である。 詳細については、外部 ID プロバイダーからの認証の有効化を参照してください。 - セッション期間
- 動的アクセス・グループ・メンバーシップまたはトラステッド・プロファイル・セッションは、このプロパティーで指定された時間数が経過すると有効期限が切れます。 例えば、このプロパティーが 24 時間に設定されている場合、ユーザーの動的プロファイル・セッションまたはトラステッド・プロファイル・セッションは、ログイン後 1 日 (24 時間) で終了します。
ルールおよびプロファイル条件文のプロパティ
さらに、各動的ルールおよびトラステッド・プロファイルの信頼関係には、以下のプロパティーで構成される 1 つ以上の条件があります。 ユーザーは、動的ルールまたはトラステッド・プロファイル認証の全体が true と評価されるためには、以下のすべての条件を満たす必要があります。
- ユーザーを許可する条件
- ID プロバイダー・データの一部である属性名。 エンタープライズ ID プロバイダから条件評価への属性名の作成方法については、「 エンタープライズ ID プロバイダ属性のマッピング 」を参照してください。
- オペレーター
Allow users whenフィールドに指定された属性をValuesプロパティーと比較します。 「等しい」、「等しくない」、「等しい (大/小文字を無視)」、「等しくない (大/小文字を無視)」、「中にある」、「含む」のいずれかを選択できます。 属性ステートメントに配列型がある場合は、「含む」オプションを使用します。 入力オプションを使用して、突き合わせる複数の値を入力できます。- 値
Allow users when属性名に照らして評価するためにコンパレーターによって使用される属性値。
動的ルールまたはトラステッド・プロファイルの条件は、キー値のペアと考えることができます。 キーは、Allow users when フィールドに追加するものであり、値は Values フィールドに入力するものです。
ルールおよびプロファイル条件で使用可能な演算子
| オペレーター | 説明 | 条件の例 |
|---|---|---|
| 等しい | 大/小文字を区別するストリング比較。 ブール値または数値は、比較の前にストリングに変換されます。 | primaryGroup Equals “Admins” |
| 等しくない | 大/小文字の区別があるストリング比較の否定。 ブール値または数値は、比較の前にストリングに変換されます。 | primaryGroup NotEquals "Admins" |
| 等しい (大/小文字を無視) | 大/小文字を区別しないストリング比較。 ブール値または数値は、比較の前にストリングに変換されます。 | isManager EqualsIgnoreCase “tRuE” |
| 等しくない (大/小文字を無視) | 大/小文字を区別しないストリング比較の否定。 ブール値または数値は、比較の前にストリングに変換されます。 | is_teamlead NotEqualsIgnoreCase "TrUe" |
| 含む | 属性がストリング、数値、またはブール値の配列である場合、Contains はコンパレーター Equals を使用して、指定された値がログイン・メッセージ内の配列の一部であるかどうかを判別します。 属性が配列ではなく単一ストリングの場合、Contains は、指定された値がログイン・メッセージのストリング属性に含まれているかどうかを判別します。 |
groupには「Admins」が含まれています。 |
| 内 | 複数の Equal 演算子の短い表記。 ログイン・メッセージ属性の値を、このルールの潜在的な値のリストと比較します。 ブール値または数値は、比較の前にストリングに変換されます。 | [「マネージャー」、「ディレクター」、「チームリーダー」]の jobRole |
例
以下の表に、動的ルールまたはトラステッド・プロファイル条件の各フィールドの値を示します。 この例では、フェデレートされた IdP 内でマネジャーとして識別されるユーザーは、 IBM Cloud アクセスグループまたはマネジャーのみに特定のアクセスが設定されている信頼されたプロファイルにマッピングされる。
| フィールド | 値 |
|---|---|
| 名前 | Manager |
| ID プロバイダー | https://idp.example.org/SAML2 |
| セッション期間 (時間) | 12 |
| ユーザーを許可する条件 (属性名) | isManager |
| オペレーター | Equals |
| 値 | true |
コンピュート・リソースの属性名
トラステッド・プロファイル内のコンピュート・リソースとの信頼を確立するには、IBM Cloud コンソール、IBM Cloud CLI、または IAM API を使用できます。 すべてのサービス・リソースを選択し、プロファイルを適用できるコンピュート・リソース・インスタンスをフィルタリングするための条件を追加すると、以下のリソース属性に基づいて条件が作成されます。
Kubernetes および Red Hat OpenShift の属性名
| IBM Cloud コンソール名 | CLI および API 名 | 説明 |
|---|---|---|
| リソース・グループ ID | resource_group_id |
このクラスターを含むリソース・グループの ID。 IBM Cloud コンソールの概要ページを使用して、クラスターのリソース・グループを識別できます。 |
| リソース・グループ名 | resource_group_name |
このクラスターを含むリソース・グループの名前。 |
| サービス・インスタンス | service_instance |
このクラスターの ID。 この値は、IBM Cloud コンソールのクラスターの概要ページから「クラスター ID」として、または IBM Cloud CLI を使用して取得できます。 |
| ロケーション | location |
クラウド・リソース名から導出されたクラスターのロケーション。 |
| 名前空間 | namespace |
コンピュート・リソース・トークンを取得して IAM トークンを取得するために使用されるサービス・アカウントの名前空間。 |
| サービス・アカウント | name |
コンピュート・リソース・トークンを取得して IAM トークンを取得するために使用されるサービス・アカウントの名前。 |
| ポッド | pod |
IAM トークンを取得する必要があるコードを実行する Kubernetes ポッドの名前。 |
Virtual Server for VPC の属性名
| IBM Cloud コンソール名 | CLI および API 名 | 説明 |
|---|---|---|
| リソース・グループ ID | resource_group_id |
このクラスターを含むリソース・グループの ID。 IBM Cloud コンソールの概要ページを使用して、クラスターのリソース・グループを識別できます。 |
| リソース・グループ名 | resource_group_name |
このクラスターを含むリソース・グループの名前。 |
| リソース ID | resource |
Virtual Server for VPC の ID。 |
| インスタンス・グループ名 | instance_group_name |
インスタンス・グループの名前 (この仮想サーバーがその一部である場合)。 |
| リージョン | region |
この仮想サーバーのデプロイ先のリージョン。 |
| サブネット | subnet_id |
Virtual Server for VPC のサブネット ID (使用可能な場合)。 |
| VPC ID | vpc_id |
Virtual Server for VPC の VPC ID (使用可能な場合)。 |
| ゾーン | zone |
この仮想サーバーのデプロイ先のゾーン名。 |
IBM Cloud CLI コマンドの例
以下の例は、CLI で属性名を使用してトラステッド・プロファイルのリンクおよび条件を作成する方法を示しています。
Kubernetes クラスターへのトラステッド・プロファイルのリンク
トラステッド・プロファイル Test を、名前空間 my-namespace 内のアカウント 444aebb0657c7f0f3aae8e7bdc78709a およびサービス・アカウント my-service-account 内の Kubernetes クラスター c0pigdctkkc07fs7pm06 にリンクするには、次のコマンドを指定します。
ibmcloud iam trusted-profile-link-create Test --name NewLink4IKS --cr-type IKS_SA \
--link-crn
crn:v1:bluemix:public:containers-kubernetes:us-east:a/444aebb0657c7f0f3aae8e7bdc78709a:c0pigdctkkc07fs7pm06:: \
--link-namespace "my-namespace" \
--link-name "my-service-account"
Kubernetes のトラステッド・プロファイル条件の作成
ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c のトラステッド・プロファイルを、アカウント 444aebb0657c7f0f3aae8e7bdc78709a およびサービス・アカウント名前空間 my-namespace の Kubernetes クラスター c0pigdctkkc07fs7pm06 内のすべてのサービス・アカウントに関連付けるには、次のコマンドを指定します。
ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
--name NewRule4IKS --type Profile-CR --cr-type IKS_SA \
--conditions "claim:service_instance,operator:EQUALS,vlaue:c0pigdctkkc07fs7pm06" \
--conditions "claim:namespace,operator:EQUALS,value:my-namespace"
VPC のトラステッド・プロファイル条件の作成
ID Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c のトラステッド・プロファイルを、アカウント 444aebb0657c7f0f3aae8e7bdc78709a の 1 つの VPC r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d 内のすべての仮想サーバーに関連付けるには、次のコマンドを指定します。
ibmcloud iam trusted-profile-rule-create Profile-b2f13064-2b8c-4e4b-9181-c1973a408e3c \
--name NewRule4VSI --type Profile-CR --cr-type VSI \
--conditions "claim:vpc_id,operator:EQUALS,value:r206-1db73eed-b0fb-b04f-bb57-4d3a3c2dff9d"
v2 アクセスポリシーの条件
IAMアクセスポリシーの時間ベースおよびリソース属性ベースの条件は、 /v2/policies 構文を使用します。 /v1/policies 構文を使用するポリシーは、時間ベースのリソース属性ベースの条件を追加することはできません。 詳しくは、 アクセスポリシーのバージョン制限を ご覧ください。
ポリシーの新しいスキーマを表示するには、以下を参照してください。 /v2/policies.
時間ベースの条件
次の表は、アクセスポリシーの時間ベースの条件を作成するために使用できる演算子の一覧です。
| オペレーター | 説明 | 例 |
|---|---|---|
dayOfWeekAnyOf |
クライアントがポリシーを使用できる曜日。 1 - 月曜日 2 - 火曜日 3 - 水曜日 4- 木曜日 5 - 金曜日 6 - 土曜日 7 - 日曜日 |
例を見て みよう。 |
timeGreaterThanOrEquals |
条件がアクセスを許可し始める時間。 時間は <time>±<time_zone_offset> で計算される。 |
例を見て みよう。 |
timeLessThanOrEquals |
条件がアクセスを終了する時間。 時間は <time>±<time_zone_offset> で計算される。 |
例を見て みよう。 |
dateTimeGreaterThanOrEquals |
アクセス許可を開始する日時。 日付は <datetime>±<time_zone_offset> で計算される。 |
例を見て みよう。 |
dateTimeLessThanOrEquals |
条件がアクセスを終了する日時。 日付は <datetime>±<time_zone_offset> で計算される。 |
例を見て みよう。 |
条件を GreaterThanOrEquals 演算子で定義する場合は、必ず LessThanOrEquals 演算子を使った条件を含めること。 こうすることで、一時的なものであれ、一日中繰り返されるものであれ、あるいはカスタム時間で繰り返されるものであれ、期間が明確に定義される。 詳細は コンディションパターンを 参照。
日付と時刻の演算子については、ポリシーは ISO 8601 形式 hh:mm:ss±hh:mm をサポートしています。 タイムゾーンオフセットは協定世界時を指す。
以下の変数を使用して、ポリシーが評価するクライアントの環境属性を指定する key を表します。 それぞれの key 、演算子の個別のセットをサポートしている。
| 変数名 | 説明 | サポートされている演算子 |
|---|---|---|
environment.attributes.current_time |
クライアントの現在時刻。 | timeGreaterThanOrEquals, timeLessThanOrEquals |
environment.attributes.current_date_time |
クライアントの現在の日付と時刻。 | dateTimeGreaterThanOrEquals, dateTimeLessThanOrEquals |
environment.attributes.day_of_week |
クライアントの現在の曜日。 | dayOfWeekAnyOf, dayOfWeekEquals |
例: dayOfWeekAnyOf, timeGreaterThanOrEquals, timeLessThanOrEquals
この例で指定されている曜日は、月曜日、火曜日、水曜日、木曜日に対応する。 timeGreaterThanOrEquals の値は、タイムゾーン UTC-5 の午前9時にアクセス許可を開始することを示す。 timeLessThanOrEquals の値は、タイムゾーンの午後5時にアクセスが終了することを示す。 UTC-5。environment.attributes.current_time と
environment.attributes.day_of_week は、 反復する時間ベースの条件 であることを示す。 常に dayOfWeek 条件に time 条件を含める。
"conditions": [
{
"key": "{{environment.attributes.day_of_week}}",
"operator": "dayOfWeekAnyOf",
"value": [
1,
2,
3,
4
]
},
{
"key": "{{environment.attributes.current_time}}",
"operator": "timeGreaterThanOrEquals",
"value": "09:00:00-05:00"
},
{
"key": "{{environment.attributes.current_time}}",
"operator": "timeLessThanOrEquals",
"value": "17:00:00-05:00"
}
]
例 dayOfWeekEquals
この例の曜日は、 value の文字列の 3 で表されている。 同じ文字列の中で、 +6:00 はタイムゾーン UTC+6:00 を表している。 条件は1つだけなので、 "rule" の下にネストされている。
"rule": {
"key": "{{environment.attributes.day_of_week}}",
"operator": "dayOfWeekEquals",
"value": "3+06:00"
},
例: dateTimeGreaterThanOrEquals dateTimeLessThanOrEquals
この例では、 dateTimeGreaterThanOrEquals の値は、 UTC-5 のタイムゾーンで2022年12月26日午前9時にアクセス許可を開始する条件であることを示す。 dateTimeLessThanOrEquals の値は、条件が2022年12月27日午後5時( UTC-5 のタイムゾーン)にアクセスを終了することを示す。 environment.attributes.current_date_time は、それが 一時的な時間ベースの条件 であることを示す。
"conditions": [
{
"key": "{{environment.attributes.current_date_time}}",
"operator": "dateTimeGreaterThanOrEquals",
"value": "2022-12-26T09:00:00-05:00"
},
{
"key": "{{environment.attributes.current_date_time}}",
"operator": "dateTimeLessThanOrEquals",
"value": "2022-12-27T17:00:00-05:00"
}
]
リソース属性に基づく条件
次の表は、アクセスポリシーのリソース属性ベースの条件を作成するために使用できる演算子の一覧です。
| オペレーター | 説明 | 例 |
|---|---|---|
stringEquals |
大/小文字を区別するストリング比較。 ブール値または数値は、比較の前にストリングに変換されます。 | 例を見て みよう。 |
stringExists |
true 、文字列が存在しなければならず、空でもよいことを示す。 false 、文字列が存在してはならないことを示す。 |
例を見て みよう。 |
stringMatch |
大文字小文字を区別した文字列マッチは、アスタリスク(*)、クエスチョンマーク(?)、両方、またはなし(リテラル値と同じ)のいずれかを使って、パターンとターゲット文字列の間で実行されます。 アスタリスク (*) はストリング中のゼロ個以上の文字からなる任意の文字列を表し、疑問符 (?) は任意の単一文字を表します。 また、アスタリスク * とクエスチョンマーク ? を2つの中括弧 {{}} で囲むことで、リテラル値として表現することもできます。 |
例を見て みよう。 |
stringEqualsAnyOf |
大文字小文字を区別し、文字列の配列中の文字列のいずれかに正確にマッチする文字列。 10個まで。 | 例を見て みよう。 |
stringMatchAnyOf |
大文字小文字を区別して、文字列の配列中の文字列のいずれかにマッチする文字列。 文字列値には、アスタリスク(* )、クエスチョンマーク(? )、その両方、またはなし(リテラル値と同じ)のいずれかを含めることができる。 アスタリスク (*) はストリング中のゼロ個以上の文字からなる任意の文字列を表し、疑問符 (?) は任意の単一文字を表します。 また、アスタリスク
* とクエスチョンマーク ? を2つの中括弧 {{}} で囲むことで、リテラル値として表現することもできます。 10個まで。 |
key は、選択したサービスがサポートするリソース属性を表す。 key は resource.attributes.<attribute-name> の形をとる。 例えば、 Cloud Object Storage の場合、サポートされている prefix 属性は、 resource.attributes.prefix 表記でキーとして表すことができます。
以下の表は変数の例であり、すべてを網羅しているわけではない。
| 変数名 | 説明 | サポートされている演算子 |
|---|---|---|
resource.attributes.prefix |
この条件がオブジェクトやフォルダを一覧表示する際に許可する接頭辞を定義します。 | stringMatchAnyOf |
resource.attributes.path |
オブジェクトに対するすべての読み取り、書き込み、および管理アクセスをスコープする。 | stringMatchAnyOf |
resource.attributes.delimiter |
ユーザが生成できるフォルダ構造の種類を制限し、ユーザがバケツをファイル階層のようにナビゲートできるようにします。 | stringEquals |
詳しくは コンディションのパターンを 参照。
例: stringMatchAnyOf stringEqualsAnyOf
この例では、 resource.attributes.path 変数の stringMatchAnyOf 値は、オブジェクトパスが一致し、 home/David/*、 special/*、 restricted/*、 temporary/test*spatial.?.log のいずれかで始まるとき(たとえば temporary/test_spatial.1.log
)、アクセスが許可されることを示している。 or 、アクセスを許可する代替条件があることを示す。
変数 resource.attributes.delimiter に対する stringEqualsAnyOf の値は、境界インジケータがない場合、または / が存在する場合にアクセスが許可されることを示す。 さらに、 resource.attributes.prefix 変数の stringEqualsAnyOf は、アクセスを許可するためには、
home/、または home/David/、あるいは接頭辞なしも存在しなければならないことを示す。 and の値は、アクセスを許可するには resource.attributes.delimiter と resource.attributes.prefix の両方が満たされていなければならないことを知らせている。
"pattern": "attribute-based-condition:resource:literal-and-wildcard",
"rule": {
"operator": "or",
"conditions": [
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatchAnyOf",
"value": [
"home/David/*",
"special/*",
"restricted/*",
"temporary/test*spatial.?.log"
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEqualsAnyOf",
"value": [
"",
"/"
]
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringEqualsAnyOf",
"value": [
"",
"home/",
"home/David/"
]
}
]
}
]
}
例: stringExists, stringEquals, stringMatch
この例では、 iam_id、 accountID、 serviceName、 resourceType の stringEquals は、文字列の完全一致が実行されることを示す。 リソース変数 stringMatch の値に含まれるアスタリスクは、 dev-bucket- で始まるすべてのリソースへのアクセスが許可されていることを示す。
パス変数に真の値( stringExists )、プレフィックス変数とデリミター変数に false stringExists を指定すると、アクセスを許可するためにはパスだけが存在しなければならないことを示す。
{
"type": "access",
"subject": {
"attributes": [
{
"key": "iam_id",
"operator": "stringEquals",
"value": "IBMid-1234"
}
]
},
"control": {
"grant": {
"roles": [
{
"role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolderContent"
},
{
"role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:ListFolder"
},
{
"role_id": "crn:v1:bluemix:public:cloud-object-storage::::role:AllFolderOperations"
}
]
}
},
"resource": {
"attributes": [
{
"name": "accountId",
"operator": "stringEquals",
"value": "account-123"
},
{
"key": "serviceName",
"operator": "stringEquals",
"value": "cloud-object-storage"
},
{
"key": "serviceInstance",
"operator": "stringEquals",
"value": "cd329d97-c33d-4428-b39e-6170dc1c2a1e"
},
{
"key": "resource",
"operator": "stringMatch",
"value": "dev-bucket-*"
},
{
"key": "resourceType",
"operator": "stringEquals",
"value": "bucket"
}
]
},
"rule": {
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.path}}",
"operator": "stringExists",
"value": true
},
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringExists",
"value": false
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringExists",
"value": false
}
]
}
}