Zugriffsbeschränkung durch zeit- und ressourcenbezogene Bedingungen
Sie können zeitbasierte Bedingungen einrichten, um den temporären Zugriff auf Ressourcen in Ihrem Konto festzulegen oder den Zugriff auf Ressourcen während bestimmter Zeitfenster zu erlauben, sowie auf Ressourcenattributen basierende Bedingungen, um die Erstellung mehrerer Zugriffsrichtlinien zu vermeiden, um Ihre Zugriffsanforderungen zu erfüllen.
Sie können zeitbasierte Bedingungen erstellen, die einmaligen temporären Zugriff für einen bestimmten Zeitraum und ein bestimmtes Datum gewähren, oder Sie können einen wöchentlich wiederkehrenden Zugriff einrichten. Sie könnten beispielsweise einem Benutzer nur während seiner Arbeitszeit Zugang zu Kontoressourcen gewähren, indem Sie einen wiederkehrenden Zugang festlegen, oder Sie könnten einen Auftragnehmer oder einen Benutzer haben, der Funktionen eines Dienstes vorführen muss und nur vorübergehend Zugang benötigt.
Zeitbasierte Bedingungen berücksichtigen nicht die Sommerzeitänderungen für Zeitzonen, die die Sommerzeit einhalten. Die Administratoren müssen die Richtlinien entsprechend den Sommerzeitänderungen aktualisieren, um die zeitabhängigen Bedingungen korrekt durchzusetzen. Zum Beispiel ist die östliche Zeitzone während der Sommerzeit UTC-4 Stunden und nicht -5 Stunden wie während der Standardzeit. Die Standardzeit beginnt im November und endet im März, wenn die Sommerzeit beginnt.
Die Website Kubernetes Service ist nicht an zeitliche Bedingungen gebunden. Eine Richtlinie mit einer zeitbasierten Bedingung, die den Zugriff auf alle identitäts- und zugriffsfähigen Dienste gewährt, umfasst beispielsweise den Zugriff auf die Ressourcen von Kubernetes Service. Das Subjekt der Richtlinie hat außerhalb der festgelegten zeitlichen Bedingung Zugang zu einigen Ressourcen von Kubernetes Service.
Zeitbasierte Bedingungen für Zugriffsrichtlinien helfen Ihnen, das Prinzip der geringsten Privilegien bei der Zugriffsvergabe anzuwenden und die Angriffsfläche im Falle eines Sicherheitsverstoßes zu verringern.
Wenn Sie eine Richtlinie mit auf Ressourcenattributen basierenden Bedingungen erstellen, können Sie die Erstellung mehrerer Zugriffsrichtlinien vermeiden, um Ihre Zugriffsanforderungen zu erfüllen. Stattdessen können Sie eine einzige Richtlinie
erstellen, indem Sie eine Kombination aus OR/AND Operatoren verwenden, die auf Ressourcenattribute mit Literal- oder Platzhalterwerten angewendet werden. Sie können den Zugriff auf eine Ressource gewähren, die mehrere
Kriterien gleichzeitig erfüllt (UND), oder den Zugriff gewähren, wenn eine von mehreren Bedingungen erfüllt ist (ODER). Mit ressourcenattributbasierten Bedingungen können Sie zum Beispiel eine einzige Richtlinie erstellen, die den Zugriff auf
der Grundlage von Service instance: abc, OR attribute-1: xyz, OR (attribute-2: def UND attribute-3: hij) erlaubt.
Sie müssen mindestens 2 Bedingungen haben, die OR/AND und auf Ressourcenattributen basierende Bedingungen verwenden. Wenn Sie eine einzelne Bedingung hinzufügen müssen, lesen Sie den Abschnitt Zugriff auf Ressourcen in der Konsole zuweisen und fügen Sie die Bedingung nach der Auswahl Bestimmte Ressourcen hinzu.
Um die Zugriffsrechte eines Benutzers zu überprüfen, siehe Überprüfung der zugewiesenen Zugriffsrechte in der Konsole.
Konditionsmuster
Zeitbasierte Konditionsmuster
Die folgenden Muster stellen die zulässigen Bedingungspermutationen dar:
| Muster | Beispiel |
|---|---|
| zeitabhängige Bedingungen:einmal | Vorübergehender Zugang an einem bestimmten Tag von 9.00 bis 17.00 Uhr UTC-5. |
| zeitabhängige-bedingungen:wöchentlich:ganztägig | Wiederkehrender Zugang Mo-Fr UTC-5 ganztägig. |
| zeitabhängige-Bedingungen:wöchentlich:benutzerdefinierte-Stunden | Wiederkehrender Zugang Mo-Fr 9 Uhr bis 17 Uhr UTC-5. |
IAM verhindert die Kombination einmaliger temporärer Bedingungen mit wöchentlich wiederkehrenden Bedingungen in derselben Richtliniendefinition.
Ressourcen-Attribut-basierte Konditionsmuster
Die folgenden Muster stellen die zulässigen Bedingungspermutationen dar:
| Muster | Beispiel |
|---|---|
attribute-based-condition:resource:literal-and-wildcard |
Bedingungen auf der Grundlage von Ressourcenattributen mit Literal- oder Platzhalterwerten (je nach verwendetem Operator) |
Erstellen einer temporären zeitbasierten Bedingung mit Hilfe der Konsole
Sie können den Zugriff für eine begrenzte Dauer zuweisen, indem Sie ein Datum und einen Zeitbereich angeben, der bestimmt, wann die Bedingung den Zugriff gewährt und beendet. Sie könnten beispielsweise einen Benutzer haben, der für ein paar Stunden eine Demonstration auf Ihrem Konto vorführen muss, oder einen Auftragnehmer, der für ein paar Tage vorübergehend Zugang zu einem Dienst benötigt. Führen Sie die folgenden Schritte aus, um eine Zugriffsrichtlinie mit einer temporären zeitbasierten Bedingung zuzuweisen:
-
Gehen Sie in der Konsole IBM Cloud zu Verwalten > Zugriff (IAM)
-
Wählen Sie Benutzer, vertrauenswürdige Profile, Dienst-IDs oder Zugriffsgruppen aus, je nachdem, welcher Einheit Sie den Zugriff zuweisen möchten.
-
Klicken Sie auf den Namen der Entität in der Liste und gehen Sie auf Zugriff.
-
Klicken Sie auf Zugriff zuweisen.
-
Wählen Sie einen Dienst aus und klicken Sie auf Weiter.
- Wenn der Benutzer in der Lage sein soll, jeden beliebigen Service zu erstellen, wählen Sie Alle Services mit aktiviertem Identity and Access Management aus.
- Wenn Sie dem Benutzer Zugriffsberechtigungen für einen bestimmten Service zuweisen wollen, wählen Sie ihn in der Liste aus.
-
Wählen Sie die Ressource aus, auf die Sie den Benutzer zugreifen lassen möchten, oder wählen Sie Alle Ressourcen. Klicken Sie auf Weiter.
-
(Optional) Wählen Sie eine Ressourcengruppen-Zugriffsrolle aus. Klicken Sie auf Weiter.
-
Wählen Sie eine beliebige Kombination aus Dienstzugriffs- und Plattformzugriffsrollen und klicken Sie auf Weiter.
-
Klicken Sie auf Bedingung hinzufügen und wählen Sie Einmalig.
-
Wählen Sie die Zeitzone aus.
Nehmen wir an, Sie erstellen eine bedingte Richtlinie für einen Entwickler, der in Dublin ansässig ist. Wählen Sie in diesem Fall
UTC+1, damit der im nächsten Schritt gewählte Datums- und Zeitbereich den Zugriff zur korrekten Zeit für diesen Ort erzwingt. -
Füllen Sie die Felder für den Datums- und Zeitbereich aus, der bestimmt, wann die Bedingung den Zugang gewährt und beendet.
-
Klicken Sie auf Erstellen.
-
Klicken Sie auf Überprüfung.
-
Klicken Sie auf Hinzufügen, um die Richtlinienkonfiguration zu Ihrer Richtlinienzusammenfassung hinzuzufügen.
-
Klicken Sie auf Zuweisen.
Vorläufige Richtlinien werden nicht automatisch entfernt. Um zu vermeiden, dass das Richtlinienlimit im Konto erreicht wird, können Administratoren die Richtlinie manuell entfernen, nachdem sie abgelaufen ist.
Weitere Informationen über zeitbasierte Bedingungen für Zugriffsrichtlinien finden Sie unter Bedingungen in Zugriffsrichtlinien.
Vorbereitende Schritte
Vergewissern Sie sich, dass Sie über die neueste Version der IBM Cloud CLI verfügen, damit Sie Bedingungen in Ihren Zugangsrichtlinien verwenden können.
Führen Sie folgenden Befehl, um Ihre IBM Cloud-CLI-Version zu ermitteln:
ibmcloud -v
Sie müssen die neueste Version der Befehlszeilenschnittstelle verwenden. Wenn Sie die neueste Version nicht verwenden, führen Sie den folgenden Befehl aus, um die Befehlszeilenschnittstelle zu aktualisieren:
ibmcloud update
Wenn Sie das aktuelle Release ausführen, wird die folgende Ausgabe angezeigt:
Checking for updates...
No update required. Your CLI is already up-to-date.
Weitere Informationen finden Sie unter Installieren der eigenständigen IBM Cloud CLI.
Erstellen einer temporären zeitbasierten Bedingung mit Hilfe der CLI
Sie können den Zugriff für eine begrenzte Dauer zuweisen, indem Sie ein Datum und einen Zeitbereich angeben, der bestimmt, wann die Bedingung den Zugriff gewährt und beendet. Sie könnten beispielsweise einen Benutzer haben, der für ein paar Stunden eine Demonstration auf Ihrem Konto vorführen muss, oder einen Auftragnehmer, der für ein paar Tage vorübergehend Zugang zu einem Dienst benötigt. Das folgende Beispiel zeigt Ihnen, wie Sie eine einmalige, zeitlich begrenzte Bedingung für Ihr Konto erstellen, indem Sie dem Benutzer vorübergehenden Zugriff als Operator für alle Account Management Services gewähren.
-
Melden Sie sich bei der IBM Cloud®-Befehlszeilenschnittstelle an. Wenn Sie über mehrere Konten verfügen, werden Sie dazu aufgefordert, das zu verwendende Konto auszuwählen. Wenn Sie keine Region mit dem Flag
-rangeben, müssen Sie auch eine Region auswählen.ibmcloud loginWenn die Berechtigungsnachweise zurückgewiesen werden, verwenden Sie möglicherweise eine föderierte ID. Wenn Sie sich mit einer föderierten ID anmelden möchten, verwenden Sie das Flag
--sso. Weitere Details finden Sie in Mit föderierter ID anmelden.Wenn Sie die IBM Cloud CLI zum ersten Mal verwenden, sehen Sie sich die Anleitung für die ersten Schritte an.
-
Erstellen Sie eine Zugriffsrichtlinie und weisen Sie sie einem Benutzer oder einer Service-ID zu, indem Sie den Befehl
ibmcloud iam user-policy-create. -
Weisen Sie den Zugriff auf alle Account Management Dienste mit der Rolle
Operatorzu:ibmcloud iam service-policy-create [your service ID here] --roles Operator --account-management --api-version v2 -
Verwenden Sie das folgende Beispiel für ein temporäres zeitbasiertes JSON-Schema, um Ihre eigenen Bedingungen zu erstellen:
{ "type": "access", "description": "time-based conditions policy example restricting access to the full day of 2022-12-23 UTC", "control": { "grant": { "roles": [ { "role_id": "crn:v1:bluemix:public:iam::::role:Operator" } ] } }, "resource": { "attributes": [ { "operator": "stringEquals", "value": "d4b763ad0cbd4dca8dd1edb427d7a77e", "key": "accountId" }, { "value": "platform_service", "operator": "stringEquals", "key": "serviceType" } ] }, "pattern": "time-based-conditions:once", "rule": { "operator": "and", "conditions": [ { "key": "{{environment.attributes.current_date_time}}", "operator": "dateTimeGreaterThanOrEquals", "value": "2022-12-23T00:00:00+00:00" }, { "key": "{{environment.attributes.current_date_time}}", "operator": "dateTimeLessThanOrEquals", "value": "2022-12-23T23:59:59+00:00" } ] }, "subject": { "attributes": [ { "key": "iam_id", "operator": "stringEquals", "value": "IBMid-550000HFVV" } ] } }
Temporäre Richtlinien, die das Muster time-based-conditions:once verwenden, werden nicht automatisch entfernt. Um zu vermeiden, dass das Richtlinienlimit im Konto erreicht wird, können Administratoren die Richtlinie manuell entfernen,
nachdem sie abgelaufen ist.
Weitere Informationen über zeitbasierte Bedingungen für Zugriffsrichtlinien finden Sie unter Bedingungen in Zugriffsrichtlinien.
Vorbereitende Schritte
Stellen Sie sicher, dass Sie die URI v2/policies aufrufen, die https://iam.coud.ibm.com/v2/policies lautet, damit Sie Bedingungen in Ihren Zugriffsrichtlinien verwenden können. Weitere Informationen finden Sie in der
IAM Policy Management API und im Änderungsprotokoll.
Erstellen einer temporären zeitbasierten Bedingung mit Hilfe der API
Sie können den Zugriff für eine begrenzte Dauer zuweisen, indem Sie ein Datum und einen Zeitbereich angeben, der bestimmt, wann die Bedingung den Zugriff gewährt und beendet. Sie könnten beispielsweise einen Benutzer haben, der für ein paar Stunden eine Demonstration auf Ihrem Konto vorführen muss, oder einen Auftragnehmer, der für ein paar Tage vorübergehend Zugang zu einem Dienst benötigt. Die folgenden Beispiele zeigen Ihnen, wie Sie eine einmalige, zeitlich begrenzte Bedingung für Ihr Konto erstellen, indem Sie dem Benutzer einen temporären Zugang als Operator für alle Account Management Services gewähren.
subjectAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("iam_id"),
Operator: core.StringPtr("stringEquals"),
Value: &exampleUserID,
}
policySubject := &iampolicymanagementv1.V2PolicyBaseSubject{
Attributes: []iampolicymanagementv1.V2PolicyAttribute{*subjectAttribute},
}
policyRole := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Operator"),
}
v2PolicyGrant := &iampolicymanagementv1.V2PolicyBaseControlGrant{
Roles: []iampolicymanagementv1.PolicyRole{*policyRole},
}
v2PolicyControl := &iampolicymanagementv1.V2PolicyBaseControl{
Grant: v2PolicyGrant,
}
accountIDResourceAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("accountId"),
Operator: core.StringPtr("stringEquals"),
Value: core.StringPtr(exampleAccountID),
}
serviceNameResourceAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("serviceType"),
Operator: core.StringPtr("stringEquals"),
Value: core.StringPtr("service"),
}
policyResource := &iampolicymanagementv1.V2PolicyBaseResource{
Attributes: []iampolicymanagementv1.V2PolicyAttribute{
*accountIDResourceAttribute, *serviceNameResourceAttribute},
}
startConditionAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("{{environment.attributes.current_time}}"),
Operator: core.StringPtr("dateTimeGreaterThanOrEquals"),
Value: core.StringPtr("2022-12-23T00:00:00+00:00"),
}
endConditionAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("{{environment.attributes.current_time}}"),
Operator: core.StringPtr("dateTimeLessThanOrEquals"),
Value: core.StringPtr("2022-12-23T23:59:59+00:00"),
}
policyRule := &iampolicymanagementv1.V2PolicyBaseRule{
Operator: core.StringPtr("and"),
Conditions: []iampolicymanagementv1.V2PolicyAttribute{
*startConditionAttribute, *endConditionAttribute},
}
options := iamPolicyManagementService.NewV2CreatePolicyOptions(
"access",
v2PolicyControl,
)
options.SetSubject(policySubject)
options.SetResource(policyResource)
options.SetRule(policyRule)
options.SetPattern(*core.StringPtr("time-based-conditions:once"))
policy, response, err := iamPolicyManagementService.V2CreatePolicy(options)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(policy, "", " ")
fmt.Println(string(b))
V2PolicyAttribute subjectAttribute = new V2PolicyAttribute.Builder()
.key("iam_id")
.value(EXAMPLE_USER_ID)
.operator("stringEquals")
.build();
V2PolicyBaseSubject policySubject = new V2PolicyBaseSubject.Builder()
.addAttributes(subjectAttribute)
.build();
V2PolicyAttribute accountIdResourceAttribute = new V2PolicyAttribute.Builder()
.key("accountId")
.value(exampleAccountId)
.operator("stringEquals")
.build();
V2PolicyAttribute serviceNameResourceAttribute = new V2PolicyAttribute.Builder()
.key("serviceName")
.value("iam-groups")
.operator("stringEquals")
.build();
V2PolicyBaseResource policyResource = new V2PolicyBaseResource.Builder()
.addAttributes(accountIdResourceAttribute)
.addAttributes(serviceNameResourceAttribute)
.build();
PolicyRole policyRoles = new PolicyRole.Builder()
.roleId("crn:v1:bluemix:public:iam::::role:Operator")
.build();
V2PolicyBaseControlGrant policyGrant = new V2PolicyBaseControlGrant.Builder()
.roles(Arrays.asList(policyRoles))
.build();
V2PolicyBaseControl policyControl = new V2PolicyBaseControl.Builder()
.grant(policyGrant)
.build();
V2PolicyAttribute startConditionAttribute = new V2PolicyAttribute.Builder()
.key("{{environment.attributes.current_time}}")
.value("2022-12-23T00:00:00+00:00")
.operator("dateTimeGreaterThanOrEquals")
.build();
V2PolicyAttribute endConditionAttribute = new V2PolicyAttribute.Builder()
.key("{{environment.attributes.current_time}}")
.value("2022-12-23T23:59:59+00:00")
.operator("dateTimeLessThanOrEquals")
.build();
V2PolicyBaseRuleV2RuleWithConditions policyRule = new V2PolicyBaseRuleV2RuleWithConditions.Builder()
.operator("and")
.conditions(new ArrayList<V2PolicyAttribute>(Arrays.asList(startConditionAttribute, endConditionAttribute)))
.build();
V2CreatePolicyOptions options = new V2CreatePolicyOptions.Builder()
.type("access")
.subject(policySubject)
.control(policyControl)
.resource(policyResource)
.rule(policyRule)
.pattern("time-based-conditions:once")
.build();
Response<V2Policy> response = service.v2CreatePolicy(options).execute();
V2Policy policy = response.getResult();
const policySubject = {
attributes: [
{
key: 'iam_id',
operator: 'stringEquals',
value: exampleUserId,
},
],
};
const policyResourceAccountAttribute = {
key: 'accountId',
value: exampleAccountId,
operator: 'stringEquals',
};
const policyResourceServiceAttribute = {
key: 'serviceName',
operator: 'stringEquals',
value: 'iam-groups',
};
const policyResource = {
attributes: [policyResourceAccountAttribute, policyResourceServiceAttribute]
};
const policyControl = {
grant: {
roles: [{
role_id: 'crn:v1:bluemix:public:iam::::role:Operator',
}],
}
};
const policyRule = {
operator: 'and',
conditions: [
{
key: '{{environment.attributes.current_time}}',
operator: 'dateTimeGreaterThanOrEquals',
value: '2022-12-23T00:00:00+00:00',
},
{
key: '{{environment.attributes.current_time}}',
operator: 'dateTimeLessThanOrEquals',
value: '2022-12-23T23:59:59+00:00',
},
],
}
const policyPattern = 'time-based-conditions:once'
const params = {
type: 'access',
subject: policySubject,
control: policyControl,
resource: policyResource,
rule: policyRule,
pattern: policyPattern,
};
try {
const res = await iamPolicyManagementService.v2CreatePolicy(params);
examplePolicyId = res.result.id;
console.log(JSON.stringify(res.result, null, 2));
} catch (err) {
console.warn(err)
}
policy_subject = V2PolicyBaseSubject(
attributes=[V2PolicyAttribute(key='iam_id', value=example_user_id, operator='stringEquals')]
)
policy_role = PolicyRole(role_id='crn:v1:bluemix:public:iam::::role:Operator')
account_id_resource_attribute = V2PolicyAttribute(
key='accountId', value=example_account_id, operator='stringEquals'
)
service_name_resource_attribute = V2PolicyAttribute(
key='serviceType', value='service', operator='stringEquals'
)
policy_resource = PolicyResource(
attributes=[account_id_resource_attribute, service_name_resource_attribute],
)
policy_control = V2PolicyBaseControl(grant=V2PolicyBaseControlGrant(roles=[policy_role]))
policy_rule = V2PolicyBaseRuleV2RuleWithConditions(
operator='and',
conditions=[
V2PolicyAttribute(
key='{{environment.attributes.current_time}}',
operator='dateTimeGreaterThanOrEquals',
value='2022-12-23T00:00:00+00:00',
),
V2PolicyAttribute(
key='{{environment.attributes.current_time}}',
operator='dateTimeLessThanOrEquals',
value='2022-12-23T23:59:59+00:00',
),
],
)
policy_pattern = 'time-based-conditions:once'
policy = iam_policy_management_service.v2_create_policy(
type='access',
subject=policy_subject,
control=policy_control,
resource=policy_resource,
rule=policy_rule,
pattern=policy_pattern,
).get_result()
print(json.dumps(policy, indent=2))
Temporäre Richtlinien, die das Muster time-based-conditions:once verwenden, werden nicht automatisch entfernt. Um zu vermeiden, dass das Richtlinienlimit im Konto erreicht wird, können Administratoren die Richtlinie manuell entfernen,
nachdem sie abgelaufen ist.
Weitere Informationen über zeitbasierte Bedingungen für Zugriffsrichtlinien finden Sie unter Bedingungen in Zugriffsrichtlinien.
Erstellen einer wiederkehrenden zeitbasierten Bedingung mit Hilfe der Konsole
Sie können wöchentlich wiederkehrende Zugriffe zuweisen. Vielleicht möchten Sie Nutzern nur während ihrer Arbeitszeit Zugang zu Kontoressourcen gewähren. Führen Sie die folgenden Schritte aus, um eine Zugriffsrichtlinie mit einer wiederkehrenden zeitbasierten Bedingung zuzuweisen:
-
Gehen Sie in der Konsole IBM Cloud zu Verwalten > Zugriff (IAM)
-
Wählen Sie Benutzer, vertrauenswürdige Profile, Dienst-IDs oder Zugriffsgruppen aus, je nachdem, welcher Einheit Sie den Zugriff zuweisen möchten.
-
Klicken Sie auf den Namen der Identität in der Liste und gehen Sie auf Zugriff.
-
Klicken Sie auf Zugriff zuweisen.
-
Wählen Sie einen Dienst aus und klicken Sie auf Weiter.
- Wenn der Benutzer in der Lage sein soll, jeden beliebigen Service zu erstellen, wählen Sie Alle Services mit aktiviertem Identity and Access Management aus.
- Wenn Sie dem Benutzer Zugriffsberechtigungen für einen bestimmten Service zuweisen wollen, wählen Sie ihn in der Liste aus.
-
Wählen Sie die Ressource aus, auf die Sie den Benutzer zugreifen lassen möchten, oder wählen Sie Alle Ressourcen. Klicken Sie auf Weiter.
-
(Optional) Wählen Sie eine Ressourcengruppen-Zugriffsrolle aus. Klicken Sie auf Weiter.
-
Wählen Sie eine beliebige Kombination aus Dienstzugriffs- und Plattformzugriffsrollen und klicken Sie auf Weiter.
-
Klicken Sie auf Bedingung hinzufügen und wählen Sie Wöchentlich.
-
Wählen Sie die Zeitzone für die bedingte Richtlinie aus.
Nehmen wir an, Sie erstellen eine bedingte Richtlinie für einen Entwickler, der in Dublin ansässig ist. Wählen Sie in diesem Fall
UTC+1, damit das Datum und die Zeitspanne, die Sie als Nächstes auswählen, zur richtigen Zeit für diesen Ort erzwungen wird. -
Wählen Sie die Wochentage aus, an denen die Bedingung Zugang gewähren soll.
- (Optional) Setzen Sie den Schalter Ganzer Tag auf Nein, um einen Zeitrahmen für die von Ihnen ausgewählten Tage festzulegen.
-
Klicken Sie auf Erstellen.
-
Klicken Sie auf Überprüfung.
-
Klicken Sie auf Hinzufügen, um die Richtlinienkonfiguration zu Ihrer Richtlinienzusammenfassung hinzuzufügen.
-
Klicken Sie auf Zuweisen.
Weitere Informationen über zeitbasierte Bedingungen für Zugriffsrichtlinien finden Sie unter Bedingungen in Zugriffsrichtlinien.
Erstellen einer wiederkehrenden zeitbasierten Bedingung mit Hilfe der CLI
Sie können wöchentlich wiederkehrende Zugriffe zuweisen. Vielleicht möchten Sie Nutzern nur während ihrer Arbeitszeit Zugang zu Kontoressourcen gewähren. Das folgende Beispiel zeigt Ihnen, wie Sie eine wiederkehrende zeitbasierte Bedingung für einen Benutzer erstellen können. Die Richtlinie sieht vor, dass ein Redakteur während der Arbeitszeiten von Montag bis Freitag Zugang zu allen Account Management Services hat.
-
Melden Sie sich bei der IBM Cloud®-Befehlszeilenschnittstelle an. Wenn Sie über mehrere Konten verfügen, werden Sie dazu aufgefordert, das zu verwendende Konto auszuwählen. Wenn Sie keine Region mit dem Flag
-rangeben, müssen Sie auch eine Region auswählen.ibmcloud loginWenn die Berechtigungsnachweise zurückgewiesen werden, verwenden Sie möglicherweise eine föderierte ID. Wenn Sie sich mit einer föderierten ID anmelden möchten, verwenden Sie das Flag
--sso. Weitere Details finden Sie in Mit föderierter ID anmelden.Wenn Sie die IBM Cloud-Befehlszeilenschnittstelle zum ersten Mal verwenden, finden Sie im Lernprogramm zur Einführung nützliche Informationen.
-
Erstellen Sie eine Zugriffsrichtlinie und weisen Sie sie einem Benutzer oder einer Service-ID zu, indem Sie den Befehl
ibmcloud iam user-policy-create. -
Weisen Sie den Zugriff auf alle Account Management Dienste mit der Rolle
Editorzu:ibmcloud iam service-policy-create [your service ID here] --roles Editor --account-management --api-version v2 -
Verwenden Sie das folgende Beispiel eines JSON-Schemas für eine wiederkehrende zeitbasierte Richtlinie, um Ihre eigenen Bedingungen zu erstellen:
ibmcloud iam service-policy-create [your service ID here] --file [your JSON file name]{ "type": "access", "description": "time-based conditions policy example restricting access to the full day of 2022-12-23 UTC", "control": { "grant": { "roles": [ { "role_id": "crn:v1:bluemix:public:iam::::role:Editor" } ] } }, "resource": { "attributes": [ { "operator": "stringEquals", "value": "d4b763ad0cbd4dca8dd1edb427d7a77e", "key": "accountId" }, { "value": "platform_service", "operator": "stringEquals", "key": "serviceType" } ] }, "pattern": "time-based-conditions:weekly", "rule": { "operator": "and", "conditions": [ { "key": "{{environment.attributes.day_of_week}}", "operator": "dayOfWeekAnyOf", "value": [ 1, 2, 3, 4, 5 ] }, { "key": "{{environment.attributes.current_time}}", "operator": "timeGreaterThanOrEquals", "value": "00:00:00+00:00" }, { "key": "{{environment.attributes.current_time}}", "operator": "timeLessThanOrEquals", "value": "23:59:59+00:00" } ] }, "subject": { "attributes": [ { "key": "iam_id", "operator": "stringEquals", "value": "IBMid-550000HFVV" } ] } }
Weitere Informationen über zeitbasierte Bedingungen für Zugriffsrichtlinien finden Sie unter Bedingungen in Zugriffsrichtlinien.
Erstellen einer wiederkehrenden zeitbasierten Bedingung mit Hilfe der API
Sie können wöchentlich wiederkehrende Zugriffe zuweisen. Vielleicht möchten Sie Nutzern nur während ihrer Arbeitszeit Zugang zu Kontoressourcen gewähren. Die folgenden Beispiele zeigen Ihnen, wie Sie eine wiederkehrende zeitbasierte Bedingung für einen Benutzer erstellen können. Die Richtlinie sieht vor, dass ein Redakteur während der Arbeitszeiten von Montag bis Freitag Zugang zu allen Account Management Services hat.
subjectAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("iam_id"),
Operator: core.StringPtr("stringEquals"),
Value: &exampleUserID,
}
policySubject := &iampolicymanagementv1.V2PolicyBaseSubject{
Attributes: []iampolicymanagementv1.V2PolicyAttribute{*subjectAttribute},
}
policyRole := &iampolicymanagementv1.PolicyRole{
RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Editor"),
}
v2PolicyGrant := &iampolicymanagementv1.V2PolicyBaseControlGrant{
Roles: []iampolicymanagementv1.PolicyRole{*policyRole},
}
v2PolicyControl := &iampolicymanagementv1.V2PolicyBaseControl{
Grant: v2PolicyGrant,
}
accountIDResourceAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("accountId"),
Operator: core.StringPtr("stringEquals"),
Value: core.StringPtr(exampleAccountID),
}
serviceNameResourceAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("serviceType"),
Operator: core.StringPtr("stringEquals"),
Value: core.StringPtr("service"),
}
policyResource := &iampolicymanagementv1.V2PolicyBaseResource{
Attributes: []iampolicymanagementv1.V2PolicyAttribute{
*accountIDResourceAttribute, *serviceNameResourceAttribute},
}
weeklyConditionAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("{{environment.attributes.day_of_week}}"),
Operator: core.StringPtr("dayOfWeekAnyOf"),
Value: []int{1,2,3,4,5},
}
startConditionAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("{{environment.attributes.current_time}}"),
Operator: core.StringPtr("timeGreaterThanOrEquals"),
Value: core.StringPtr("09:00:00+00:00"),
}
endConditionAttribute := &iampolicymanagementv1.V2PolicyAttribute{
Key: core.StringPtr("{{environment.attributes.current_time}}"),
Operator: core.StringPtr("timeLessThanOrEquals"),
Value: core.StringPtr("17:00:00+00:00"),
}
policyRule := &iampolicymanagementv1.V2PolicyBaseRule{
Operator: core.StringPtr("and"),
Conditions: []iampolicymanagementv1.V2PolicyAttribute{
*weeklyConditionAttribute, *startConditionAttribute, *endConditionAttribute},
}
options := iamPolicyManagementService.NewV2CreatePolicyOptions(
"access",
v2PolicyControl,
)
options.SetSubject(policySubject)
options.SetResource(policyResource)
options.SetRule(policyRule)
options.SetPattern(*core.StringPtr("time-based-conditions:weekly"))
policy, response, err := iamPolicyManagementService.V2CreatePolicy(options)
if err != nil {
panic(err)
}
b, _ := json.MarshalIndent(policy, "", " ")
fmt.Println(string(b))
V2PolicyAttribute subjectAttribute = new V2PolicyAttribute.Builder()
.key("iam_id")
.value(EXAMPLE_USER_ID)
.operator("stringEquals")
.build();
V2PolicyBaseSubject policySubject = new V2PolicyBaseSubject.Builder()
.addAttributes(subjectAttribute)
.build();
V2PolicyAttribute accountIdResourceAttribute = new V2PolicyAttribute.Builder()
.key("accountId")
.value(exampleAccountId)
.operator("stringEquals")
.build();
V2PolicyAttribute serviceNameResourceAttribute = new V2PolicyAttribute.Builder()
.key("serviceName")
.value("iam-groups")
.operator("stringEquals")
.build();
V2PolicyBaseResource policyResource = new V2PolicyBaseResource.Builder()
.addAttributes(accountIdResourceAttribute)
.addAttributes(serviceNameResourceAttribute)
.build();
PolicyRole policyRoles = new PolicyRole.Builder()
.roleId("crn:v1:bluemix:public:iam::::role:Editor")
.build();
V2PolicyBaseControlGrant policyGrant = new V2PolicyBaseControlGrant.Builder()
.roles(Arrays.asList(policyRoles))
.build();
V2PolicyBaseControl policyControl = new V2PolicyBaseControl.Builder()
.grant(policyGrant)
.build();
V2PolicyAttribute weeklyConditionAttribute = new V2PolicyAttribute.Builder()
.key("{{environment.attributes.day_of_week}}")
.value(new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5)))
.operator("dayOfWeekAnyOf")
.build();
V2PolicyAttribute startConditionAttribute = new V2PolicyAttribute.Builder()
.key("{{environment.attributes.current_time}}")
.value("09:00:00+00:00")
.operator("timeGreaterThanOrEquals")
.build();
V2PolicyAttribute endConditionAttribute = new V2PolicyAttribute.Builder()
.key("{{environment.attributes.current_time}}")
.value("17:00:00+00:00")
.operator("timeLessThanOrEquals")
.build();
V2PolicyBaseRuleV2RuleWithConditions policyRule = new V2PolicyBaseRuleV2RuleWithConditions.Builder()
.operator("and")
.conditions(new ArrayList<V2PolicyAttribute>(Arrays.asList(weeklyConditionAttribute, startConditionAttribute, endConditionAttribute)))
.build();
V2CreatePolicyOptions options = new V2CreatePolicyOptions.Builder()
.type("access")
.subject(policySubject)
.control(policyControl)
.resource(policyResource)
.rule(policyRule)
.pattern("time-based-conditions:weekly")
.build();
Response<V2Policy> response = service.v2CreatePolicy(options).execute();
V2Policy policy = response.getResult();
System.out.println(policy);
const policySubject = {
attributes: [
{
key: 'iam_id',
operator: 'stringEquals',
value: exampleUserId,
},
],
};
const policyResourceAccountAttribute = {
key: 'accountId',
value: exampleAccountId,
operator: 'stringEquals',
};
const policyResourceServiceAttribute = {
key: 'serviceName',
operator: 'stringEquals',
value: 'iam-groups',
};
const policyResource = {
attributes: [policyResourceAccountAttribute, policyResourceServiceAttribute]
};
const policyControl = {
grant: {
roles: [{
role_id: 'crn:v1:bluemix:public:iam::::role:Editor',
}],
}
};
const policyRule = {
operator: 'and',
conditions: [
{
key: '{{environment.attributes.day_of_week}}',
operator: 'dayOfWeekAnyOf',
value: [1, 2, 3, 4, 5],
},
{
key: '{{environment.attributes.current_time}}',
operator: 'timeGreaterThanOrEquals',
value: '09:00:00+00:00',
},
{
key: '{{environment.attributes.current_time}}',
operator: 'timeLessThanOrEquals',
value: '17:00:00+00:00',
},
],
}
const policyPattern = 'time-based-conditions:weekly'
const params = {
type: 'access',
subject: policySubject,
control: policyControl,
resource: policyResource,
rule: policyRule,
pattern: policyPattern,
};
try {
const res = await iamPolicyManagementService.v2CreatePolicy(params);
examplePolicyId = res.result.id;
console.log(JSON.stringify(res.result, null, 2));
} catch (err) {
console.warn(err)
}
policy_subject = V2PolicyBaseSubject(
attributes=[V2PolicyAttribute(key='iam_id', value=example_user_id, operator='stringEquals')]
)
policy_role = PolicyRole(role_id='crn:v1:bluemix:public:iam::::role:Editor')
account_id_resource_attribute = V2PolicyAttribute(
key='accountId', value=example_account_id, operator='stringEquals'
)
service_name_resource_attribute = V2PolicyAttribute(
key='serviceName', value='iam-groups', operator='stringEquals'
)
policy_resource = PolicyResource(
attributes=[account_id_resource_attribute, service_name_resource_attribute],
)
policy_control = V2PolicyBaseControl(grant=V2PolicyBaseControlGrant(roles=[policy_role]))
policy_rule = V2PolicyBaseRuleV2RuleWithConditions(
operator='and',
conditions=[
V2PolicyAttribute(
key='{{environment.attributes.day_of_week}}', operator='dayOfWeekAnyOf', value=[1, 2, 3, 4, 5]
),
V2PolicyAttribute(
key='{{environment.attributes.current_time}}',
operator='timeGreaterThanOrEquals',
value='09:00:00+00:00',
),
V2PolicyAttribute(
key='{{environment.attributes.current_time}}',
operator='timeLessThanOrEquals',
value='17:00:00+00:00',
),
],
)
policy_pattern = 'time-based-conditions:weekly'
policy = iam_policy_management_service.v2_create_policy(
type='access',
subject=policy_subject,
control=policy_control,
resource=policy_resource,
rule=policy_rule,
pattern=policy_pattern,
).get_result()
print(json.dumps(policy, indent=2))
Weitere Informationen über zeitbasierte Bedingungen für Zugriffsrichtlinien finden Sie unter Bedingungen in Zugriffsrichtlinien.
Erstellen einer auf Ressourcenattributen basierenden Bedingung mit Hilfe der Konsole
Sie können den Zugriff zuweisen, indem Sie ein Ressourcenattribut angeben, das bestimmt, auf welche Ressourcen die Bedingung Zugriff gewährt. Sie könnten zum Beispiel einen Benutzer haben, der eine Demonstration in Ihrem Konto unter Verwendung bestimmter Ressourcen präsentieren muss. Weitere Informationen und Beispiele zu den verfügbaren Operatoren finden Sie unter Ressourcenattributbasierte Bedingungen.
Sie können bis zu 10 Bedingungen und Verschachtelungen bis zu 2 Ebenen haben, indem Sie OR verwenden.
Führen Sie die folgenden Schritte aus, um eine Zugriffsrichtlinie mit einem Attribut ressourcenbasierter Bedingung zuzuweisen:
-
Gehen Sie in der Konsole IBM Cloud zu Verwalten > Zugriff (IAM)
-
Wählen Sie Benutzer, vertrauenswürdige Profile, Dienst-IDs oder Zugriffsgruppen aus, je nachdem, welcher Einheit Sie den Zugriff zuweisen möchten.
-
Klicken Sie auf den Namen der Entität in der Liste und gehen Sie auf Zugriff.
-
Klicken Sie auf Zugriff zuweisen.
-
Wählen Sie einen Dienst aus, und klicken Sie auf Weiter.
Nicht alle Dienste unterstützen auf Ressourcenattributen basierende Bedingungen. Um fortzufahren, wählen Sie einen Dienst, der auf Ressourcenattributen basierende Bedingungen unterstützt. Zum Beispiel Cloud Object Storage.
-
Wählen Sie die Ressource aus, auf die Sie den Benutzer zugreifen lassen möchten, oder wählen Sie Alle Ressourcen. Klicken Sie auf Weiter.
-
(Optional) Wählen Sie eine Ressourcengruppen-Zugriffsrolle aus. Klicken Sie auf Weiter.
-
Wählen Sie eine beliebige Kombination aus Dienstzugriffs- und Plattformzugriffsrollen und klicken Sie auf Weiter.
-
Klicken Sie auf Bedingung hinzufügen und wählen Sie Erweiterte Bedingungserstellung > Weiter.
-
Fügen Sie die Ressourcenbedingungen hinzu und klicken Sie auf Erstellen.
Angenommen, Sie erstellen eine bedingte Richtlinie für einen Entwickler, der Zugriff auf alles unter den Ordnern dev/David/ und dev/Secret/ ODER auf jeden Pfad, der mit devOps/ oder cicd/ beginnt,
benötigt. In diesem Fall wählen Sie Prefix, string matches any of, und fügen Sie dev/David/* und dev/Secret/* hinzu. Fügen Sie dann eine ODER-Bedingung hinzu und wählen Sie Pfad,
Zeichenkette entspricht einem von, und fügen Sie devOps/* und cicd/* hinzu.
- Klicken Sie auf Erstellen> Überprüfen > Hinzufügen, um Ihre Zugangskonfiguration zu Ihrer Zugangsübersicht hinzuzufügen.
- Klicken Sie auf Zuweisen.
Dienstspezifische Dokumentation
Weitere Informationen darüber, wie Cloud Object Storage auf Ressourcenattributen basierende Bedingungen verwendet, finden Sie unter Steuerung des Zugriffs auf einzelne Objekte in einem Bucket.
Vorbereitende Schritte
Stellen Sie sicher, dass Sie die URI v2/policies aufrufen, die https://iam.coud.ibm.com/v2/policies lautet, damit Sie Bedingungen in Ihren Zugriffsrichtlinien verwenden können. Weitere Informationen finden Sie in der
IAM Policy Management API und im Änderungsprotokoll.
Erstellen von auf Ressourcenattributen basierenden Bedingungen mit Hilfe der API
Sie können den Zugriff zuweisen, indem Sie ein Ressourcenattribut angeben, das bestimmt, auf welche Ressourcen die Bedingung Zugriff gewährt. Nehmen wir an, Sie erstellen eine bedingte Richtlinie für einen Entwickler, der Zugriff auf alles unter
den Ordnern dev/David/* und devA/* oder auf jeden Pfad, der mit dev/David/* oder devA/* beginnt, benötigt. Das folgende Beispiel zeigt Ihnen, wie Sie eine auf Ressourcenattributen basierende
Bedingung erstellen, die dem Benutzer Zugriff auf alles unter dem Ordner dev/David/ und auf jeden Pfad gewährt, der mit dem Ordner devA oder speziell devA/ beginnt.
Sie können bis zu 10 Bedingungen und Verschachtelungen bis zu 2 Ebenen haben, indem Sie OR verwenden.
Weitere Informationen und Beispiele zu den verfügbaren Operatoren finden Sie unter Ressourcenattributbasierte Bedingungen.
"pattern": "attribute-based-condition:resource:literal-and-wildcard",
"rule": {
"operator": "or",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringMatchAnyOf",
"value": [
"dev/David/*",
"devA*"
]
},
{
"key": "{{resource.attributes.path}}",
"operator": "stringMatchAnyOf",
"value": [
"dev/David/*",
"devA/*"
]
},
{
"operator": "and",
"conditions": [
{
"key": "{{resource.attributes.prefix}}",
"operator": "stringMatchAnyOf",
"value": [
"dev/David/*",
"devA/*"
]
},
{
"key": "{{resource.attributes.delimiter}}",
"operator": "stringEquals",
"value": "/"
}
]
}
]
}