アクセス バインディングを使用すると、ユーザー グループがアクセスできるアプリケーションとリソースを制御できます。アクセス バインディングは、アクセスレベルとセッション制御をユーザー グループに適用する方法を指定します。すべてのアプリケーションに同じアクセスレベルとセッション制御を適用することも、個々のアプリケーションに特定の動作を定義することもできます。
すべてが正しく設定されていることを確認するには、ポリシーを適用する前にテストします。
アクセス バインディングを使用する場合は、次の動作に注意してください。
- ユーザー グループに設定できるアクセス バインディングは 1 つだけです。
- ユーザーが複数のグループに属している場合、いずれかのポリシーで許可されている場合(
AND
ではなくOR
)、そのユーザーにアクセス権が付与されます。 - セッション制御の場合、最近作成されたアクセス バインディングのみが適用されます。
すべてのアプリに単一の構成を使用する
この方法では、ユーザー グループがアクセスするすべてのアプリケーションに同じアクセスレベルとセッション制御を適用します。
本番環境に実装する前に、ドライランでポリシーをテストするか、少数のテストグループに適用することをおすすめします。
gcloud
アクセス バインディングを作成します。
gcloud access-context-manager cloud-bindings create \ --group-key GROUP_ID --organization ORG_ID --level DEFAULT_ACCESS_LEVEL [ --session-length=DEFAULT_SESSION_LENGTH ] [ --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD ]
次のように置き換えます。
-
GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの
get
メソッドを呼び出すことで取得できます。 - ORG_ID: 組織 ID。
-
DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名。形式は
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
です。POLICY_ID
はアクセス ポリシー ID に、ACCESS_LEVEL_NAME
はアクセスレベル名に置き換えます。 -
DEFAULT_SESSION_LENGTH: ISO 8601 の長さ形式で指定するオプションのセッション時間(30 分の場合は
30m
、2 時間の場合は2h
など)。 -
DEFAULT_SESSION_REAUTH_METHOD: ユーザーに本人確認の再確認を求めるオプションの方法。次のいずれかである必要があります。
LOGIN
: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。PASSWORD
: 他の要素が定義されている場合でも、パスワードのみを必須にします。パスワードが外部 IdP を使用して管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションが有効な場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合は、ユーザーは IdP 経由でログインする必要があります。SECURITY_KEY
: ハードウェア セキュリティ キーを必須にします。
API
JSON 本文を作成します。
{ "groupKey": "GROUP_ID", "accessLevels": [ "DEFAULT_ACCESS_LEVEL" ], // optional: "sessionSettings": { "sessionLength": "DEFAULT_SESSION_LENGTH", "sessionReauthMethod": "DEFAULT_SESSION_REAUTH_METHOD" } }
次のように置き換えます。
-
GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの
get
メソッドを呼び出すことで取得できます。 -
DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名。形式は
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
です。POLICY_ID
はアクセス ポリシー ID に、ACCESS_LEVEL_NAME
はアクセスレベル名に置き換えます。 -
DEFAULT_SESSION_LENGTH: ISO 8601 の長さ形式で指定するオプションのセッション時間(30 分の場合は
30m
、2 時間の場合は2h
など)。 -
DEFAULT_SESSION_REAUTH_METHOD: ユーザーに本人確認の再確認を求めるオプションの方法。次のいずれかである必要があります。
LOGIN
: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。PASSWORD
: 他の要素が定義されている場合でも、パスワードのみを必須にします。パスワードが外部 IdP を使用して管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションが有効な場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合は、ユーザーは IdP 経由でログインする必要があります。SECURITY_KEY
: ハードウェア セキュリティ キーを必須にします。
-
GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの
POST リクエストを送信します。
POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
ORG_ID は、Cloud Access Binding Admin ロールの作成に使用した組織の ID です。
access-context-manager/organization
プロパティが設定されていない場合は、オプションの--organization
フラグのORG_ID
を、Cloud Access Binding 管理者ロールの作成時に使用した組織の ID に置き換えます。
成功すると、JSON オブジェクトの表現が返されます。問題がある場合は、エラー メッセージが表示されます。
特定のアプリケーションの構成を定義する
この方法では、異なるアクセスレベルとセッション制御を異なるアプリケーションに適用できます。特定の構成がないアプリケーションにデフォルトのルールを設定することもできます。このメソッドは、次のような場合に便利です。
- 特定のアプリケーションにのみポリシーを適用する。
一般的なポリシーを作成し、一部のアプリケーションを除外する。
gcloud
scopedAccessSettings
リスト内のスコープ エントリのリストを含む YAML 形式のバインディング ファイルを作成します。特定のアクセスレベルにマッピングするアプリケーションごとに、clientScope
エントリを含めます。scopedAccessSettings: - scope: clientScope: restrictedClientApplication: clientId: CLIENT_ID activeSettings: accessLevels: - ACCESS_LEVEL_A sessionSettings: - sessionLength: SESSION_LENGTH sessionReauthMethod: SESSION_REAUTH_METHOD sessionLengthEnabled: true - scope: clientScope: restrictedClientApplication: # # because this app is specified by `name`, # it won't work with sessionSettings. # # if you add sessionSettings, make sure to # replace the `name` key with `clientId`, # and use the OAuth client ID as the value. # name: CLIENT_NAME activeSettings: accessLevels: - ACCESS_LEVEL_B
次のように置き換えます。
- CLIENT_ID: OAuth クライアント ID。アプリケーションに
sessionSettings
が含まれている場合は、clientId
を使用する必要があります。 - ACCESS_LEVEL_A: アクセスレベルの名前(
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
の形式)。 - SESSION_LENGTH: ISO 8601 の長さ形式で指定したセッション時間(30 分の場合は
30m
、2 時間の場合は2h
など)。 SESSION_REAUTH_METHOD: ユーザーに本人確認の再確認を求めるオプションのメソッド。次のいずれかである必要があります。
LOGIN
: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。PASSWORD
: 他の要素が定義されている場合でも、パスワードのみを必須にします。外部 IdP を使用してパスワードが管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションがアクティブな場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合は、ユーザーは IdP からログインする必要があります。SECURITY_KEY
: ハードウェア セキュリティ キーを必須にします。
CLIENT_NAME: クライアント名。アプリケーションに
sessionSettings
が含まれている場合、クライアント名を使用できません。代わりに、OAuth クライアント ID を使用してください。ACCESS_LEVEL_B: アクセスレベルの名前(
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
の形式)。
YAML ファイルで定義されていないアプリケーションにデフォルトのアクセスレベルを設定するには、
--level
引数を使用します。YAML ファイルは、アプリケーション固有の設定(scopedAccessSettings
)のみをサポートします。- CLIENT_ID: OAuth クライアント ID。アプリケーションに
アクセス バインディングを作成します。
gcloud access-context-manager cloud-bindings create --organization ORG_ID --group-key GROUP_ID --binding-file BINDING_FILE_PATH [ --level DEFAULT_ACCESS_LEVEL ] [ --session-length=DEFAULT_SESSION_LENGTH ] [ --session-reauth-method=DEFAULT_SESSION_REAUTH_METHOD ]
次のように置き換えます。
- ORG_ID: 組織 ID。
-
GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの
get
メソッドを呼び出すことで取得できます。 -
BINDING_FILE_PATH: アクセス バインディング スキームを含む YAML ファイルのパス。バインディング ファイルは
scopedAccessSettings
のみをサポートします。 -
DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名。形式は
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
です。POLICY_ID
はアクセス ポリシー ID に、ACCESS_LEVEL_NAME
はアクセスレベル名に置き換えます。 -
DEFAULT_SESSION_LENGTH: ISO 8601 の長さ形式で指定するオプションのセッション時間(30 分の場合は
30m
、2 時間の場合は2h
など)。 -
DEFAULT_SESSION_REAUTH_METHOD: ユーザーに本人確認の再確認を求めるオプションの方法。次のいずれかである必要があります。
LOGIN
: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。PASSWORD
: 他の要素が定義されている場合でも、パスワードのみを必須にします。パスワードが外部 IdP を使用して管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションが有効な場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合は、ユーザーは IdP 経由でログインする必要があります。SECURITY_KEY
: ハードウェア セキュリティ キーを必須にします。
--level
引数と --binding-file
引数の連携の仕組み
--binding-file
のみを使用する場合、ファイル内のアプリにのみポリシーが適用されます。--level
のみを使用する場合、アクセスレベルはすべてのアプリに適用されます。- 両方を使用する場合は、YAML ファイルのルールが優先されます。
--level
値は、ファイルにリストされていないすべてのアプリケーションに適用されます。
セッション管理の操作
- すべてのアプリにデフォルトのセッション管理を設定するには、
--session-length
と--session-reauth-method
を使用します。 - YAML ファイルでセッション コントロールも定義すると、それらのセッション コントロールが、特定のアプリケーションのデフォルト設定をオーバーライドします。
--session-length
と--session-reauth-method
の両方を使用する必要があります。
API
JSON 本文を作成します。
{
"groupKey": "GROUP_ID",
//
// Optional; if specified, all applications that aren't defined in
// scopedAccessSettings have these access levels applied.
//
// If more than one access level is specified, the user is
// granted access if any one resolves to TRUE (OR logic, not AND).
//
// If you omit this key entirely, then no policy enforcement is
// applied by default.
//
"accessLevels": [
"DEFAULT_ACCESS_LEVEL"
],
"scopedAccessSettings": [
{
"scope": {
"clientScope": {
"restrictedClientApplication": {
"clientId": "CLIENT_ID"
}
}
},
"activeSettings": {
"accessLevels": [
"ACCESS_LEVEL_A"
],
"sessionSettings": [
{
"sessionLength": "SESSION_LENGTH",
"sessionReauthMethod": "SESSION_REAUTH_METHOD",
"sessionLengthEnabled": true
}
]
}
},
{
"scope": {
"clientScope": {
"restrictedClientApplication": {
"name": "CLIENT_NAME"
}
},
"activeSettings": {
"accessLevels": [
"ACCESS_LEVEL_B"
]
}
}
}
]
}
次のように置き換えます。
-
GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの
get
メソッドを呼び出すことで取得できます。 -
DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名。形式は
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
です。POLICY_ID
はアクセス ポリシー ID に、ACCESS_LEVEL_NAME
はアクセスレベル名に置き換えます。 - CLIENT_ID: OAuth クライアント ID。アプリに
sessionSettings
が含まれている場合は、clientId
を使用する必要があります。 - ACCESS_LEVEL_A:
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
形式のアクセスレベル名。 - SESSION_LENGTH: ISO 8601 の長さ形式を使用したセッション時間(30 分の場合は
30m
、2 時間の場合は2h
など)。 SESSION_REAUTH_METHOD: ユーザーに身元確認の再確認を求めるオプションのメソッド。次のいずれかである必要があります。
LOGIN
: 標準ログインを適用します。これには、MFA や Workspace で定義されたその他の要素を含めることができます。PASSWORD
: 他の要素が定義されている場合でも、パスワードのみを必須にします。外部 IdP を使用してパスワードが管理されている場合、ユーザーは IdP にリダイレクトされます。IdP セッションがアクティブな場合、ユーザーは暗黙的に再認証されます。IdP が公開されていない場合は、ユーザーは IdP からログインする必要があります。SECURITY_KEY
: ハードウェア セキュリティ キーを必須にします。
CLIENT_NAME: クライアント名。アプリケーションに
sessionSettings
が含まれている場合、クライアント名は使用できません。代わりに、OAuth クライアント ID を使用してください。ACCESS_LEVEL_B:
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
形式のアクセスレベル名。
POST リクエストを送信します。
POST https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
ORG_ID は、Cloud Access Binding Admin ロールの作成に使用した組織の ID です。access-context-manager/organization
プロパティが設定されていない場合は、オプションの --organization
フラグの ORG_ID
を、Cloud Access Binding 管理者ロールの作成時に使用した組織の ID に置き換えます。
成功すると、JSON オブジェクトの表現が返されます。問題が発生した場合は、エラー メッセージが返されます。
ドライラン アクセスレベルを使用して適用をシミュレートする
ドライラン アクセスレベルを使用すると、アクセス ポリシーを実際に適用せずにテストできます。これにより、ポリシーを公開する前にその影響を把握できます。ドライラン ログを表示して、ポリシーが有効になっていた場合にどうなっていたかを確認できます。
ドライラン モードで使用できるのはアクセスレベルのみです。ドライラン モードではセッション コントロールを使用できません。
ドライラン バインディングを作成する
ドライランのアクセスレベルは、同じバインディングで通常のアクセスレベルとともに定義できます。また、ドライランに別のバインディングを使用することもできます。
gcloud
アクセス設定を構成します。
scopedAccessSettings: - scope: clientScope: restrictedClientApplication: name: CLIENT_NAME activeSettings: accessLevels: - ACCESS_LEVEL_A dryRunSettings: accessLevels: - DRY_RUN_ACCESS_LEVEL_1 - scope: clientScope: restrictedClientApplication: clientId: CLIENT_ID dryRunSettings: accessLevels: - DRY_RUN_ACCESS_LEVEL_2
次のように置き換えます。
- CLIENT_NAME: クライアント名。アプリケーションに
sessionSettings
が含まれている場合、クライアント名は使用できません。代わりに、OAuth クライアント ID を使用してください。 - ACCESS_LEVEL_A: アクセスレベルの名前(
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
の形式)。 - DRY_RUN_ACCESS_LEVEL_1: アクセスレベルの名前(
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
の形式)。 - CLIENT_ID: OAuth クライアント ID。アプリケーションに
sessionSettings
が含まれている場合は、clientId
を使用する必要があります。 - DRY_RUN_ACCESS_LEVEL_2: アクセスレベルの名前(
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
の形式)。
- CLIENT_NAME: クライアント名。アプリケーションに
アクセス バインディングを作成します。
gcloud access-context-manager cloud-bindings create --organization ORG_ID --group-key GROUP_ID --binding-file BINDING_FILE_PATH --dry-run-level DEFAULT_DRY_RUN_ACCESS_LEVEL
次のように置き換えます。
- ORG_ID: 組織 ID。
-
GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの
get
メソッドを呼び出すことで取得できます。 -
BINDING_FILE_PATH: アクセス バインディング スキームを含む YAML ファイルのパス。バインディング ファイルは
scopedAccessSettings
のみをサポートします。 - DEFAULT_DRY_RUN_ACCESS_LEVEL_2: オプションのアクセスレベル名(
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
の形式)。
このフラグを指定すると、YAML で指定されていない場合、デフォルトで指定されたドライラン アクセスレベルがすべてのアプリケーションに適用されます。
API
JSON 本文を作成します。
{ "group_key": "GROUP_ID", // // Optional; if specified, all applications that aren't defined in // scopedAccessSettings have these access levels applied. // // If more than one access level is specified, the user is // granted access if any one resolves to TRUE (OR logic, not AND). // // If you omit this key entirely, then no policy enforcement is // be applied by default. // "access_levels": [ "DEFAULT_ACCESS_LEVEL" ], // // Optional; if specified, all applications that aren't defined in // scopedAccessSettings will have these dry run access levels applied. // "dry_run_access_levels": [ "DEFAULT_DRY_RUN_ACCESS_LEVEL" ], "scoped_access_settings": [ { "scope": { "client_scope": { "restricted_client_application": { "name": "CLIENT_NAME" } } }, "active_settings": { "access_levels": [ "ACCESS_LEVEL_A" ] }, "dry_run_settings": { "access_levels": [ "DRY_RUN_ACCESS_LEVEL_1" ] } }, { "scope": { "client_scope": { "restricted_client_application": { "client_id": "CLIENT_ID" } } }, "active_settings": { "access_levels": [ "DRY_RUN_ACCESS_LEVEL_2" ] } } ] }
次のように置き換えます。
-
GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの
get
メソッドを呼び出すことで取得できます。 -
DEFAULT_ACCESS_LEVEL: 省略可能なアクセスレベル名。形式は
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
です。POLICY_ID
はアクセス ポリシー ID に、ACCESS_LEVEL_NAME
はアクセスレベル名に置き換えます。 - DEFAULT_DRY_RUN_ACCESS_LEVEL: オプションのアクセスレベル名(
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
の形式)。 - CLIENT_NAME: クライアント名。アプリケーションに
sessionSettings
が含まれている場合、クライアント名を使用できません。代わりに、OAuth クライアント ID を使用してください。 - ACCESS_LEVEL_A: アクセスレベルの名前(
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
の形式)。 - DRY_RUN_ACCESS_LEVEL_1:
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
形式のアクセスレベル名。 - CLIENT_ID: OAuth クライアント ID。アプリケーションに
sessionSettings
が含まれている場合は、client_id
を使用する必要があります。 - DRY_RUN_ACCESS_LEVEL_2:
accessPolicies/POLICY_ID/accessLevels/ACCESS_LEVEL_NAME
形式のアクセスレベル名。
-
GROUP_ID: グループ ID。グループ ID を利用できない場合は、グループ リソースの
POST リクエストを送信します。
https://accesscontextmanager.googleapis.com/v1/organizations/ORG_ID/gcpUserAccessBindings
ORG_ID は、Cloud Access Binding Admin ロールの作成に使用した組織の ID です。
access-context-manager/organization
プロパティが設定されていない場合は、オプションの--organization
フラグのORG_ID
を、Cloud Access Binding 管理者ロールの作成時に使用した組織の ID に置き換えます。成功すると、JSON オブジェクトの表現が返されます。問題がある場合は、エラー メッセージが表示されます。
ドライランのログを表示する
ドライランを設定したら、ログを確認して、拒否されたアクセス試行を確認できます。
次の表に、クエリを作成して実行し、ログを取得するために使用できるログフィールドを示します。
フィールド名 | 説明 |
---|---|
protoPayload.authenticationInfo.principalEmail |
アクセスが拒否されたプリンシパルのメール ID。 |
protoPayload.metadata.deniedApplications |
アクセスが拒否されたアプリケーションの名前。 |
protoPayload.metadata.evaluationResult |
有効なアクセス ポリシーの評価結果。有効な値は GRANTED または DENIED です。 |
protoPayload.metadata.appliedAccessLevels |
アクティブなアクセス ポリシーで必要な適用済みのアクセスレベル。 |
protoPayload.metadata.appliedDryRunAccessLevels |
ドライラン アクセス ポリシーで必要な適用済みのアクセスレベル。 |
protoPayload.metadata.dryRunEvaluationResult |
ドライラン アクセス ポリシーの評価結果。アクセス ポリシーが適用されたときの意図されたアクションを示します。有効な値は GRANTED または DENIED です。 |
ログのクエリを作成する方法については、Logging のクエリ言語をご覧ください。