授予存取權 IBM Cloud Logs

帳戶中使用者及應用程式的 IBM Cloud 配置資源存取權由 IBM Cloud® Identity and Access Management (IAM) 控制。 在您帳戶中存取 IBM Cloud Logs 服務的每個使用者或應用程式,都必須指派具有 IAM 角色的存取政策。 檢閱下列角色、動作及其他,以協助判定指派 IBM Cloud Logs存取權的最佳方式。

您可以使用下列任何方法來指派對 IBM Cloud Logs 的存取權:

  • 每個使用者的存取原則

  • 存取群組

    存取群組是用來簡化存取管理,方法是將存取權指派給群組一次,然後您可以視需要在群組中新增或移除使用者,以控制其存取權。

    建立存取群組可將一組使用者、服務 ID 及受信任的設定檔組織為單一實體,方便您指派存取權限。 您可以為群組指定單一政策,而無需為個別使用者或服務 ID 多次指定相同的存取。 如需相關資訊,請參閱設定存取群組

    若要將一組使用者和服務 ID 組織為單一實體,讓您輕鬆管理 IAM 權限,請使用存取群組。 您可以將單一原則指派給群組,而不是針對每個個別使用者或服務 ID 指派相同的存取權多次。

  • 授信設定檔

    您可以使用授信設定檔來授與不同 IBM Cloud® 身分對帳戶中資源的存取權。 使用基於公司目錄中 SAML 屬性的條件,自動授與聯合使用者對您帳戶的存取權。 或者,使用可信設定檔為運行在計算資源中的應用程式設定細粒度授權。 這樣,您就不需要為計算資源建立服務 ID 或 API 金鑰。 您也可以使用另一個帳戶中的 IBM Cloud 服務或服務 ID 來建立信任,以授與跨帳戶存取權。 如需相關資訊,請參閱 建立授信設定檔

如果您擁有建立政策和授權的 IAM 權限,則您只能授予您作為目標服務使用者所擁有的存取等級。 例如,如果您擁有目標服務的檢視者存取權,您可以僅指定檢視者角色為授權。 如果您嘗試指派較高的權限(例如管理員),可能會顯示已授予權限,但只會指派您對目標服務擁有的最高等級權限(即檢視者)。

在主控台中指派對 IBM Cloud Logs 的存取權

在主控台中指派 IBM Cloud Logs 的存取權有兩種常見方法:

  • 存取群組。 您可以從主控台中的 管理 > 存取權 (IAM) > 存取權群組 頁面,來管理存取群組及其存取權。 如需相關資訊,請參閱 在主控台中指派群組的存取權

  • 每個使用者的存取原則。 您可以從主控台中的 管理 > 存取權 (IAM) > 使用者 頁面管理每個使用者的存取原則。 如需指派 IAM 存取權之步驟的相關資訊,請參閱 管理資源的存取權

在 CLI 中指派對 IBM Cloud Logs 的存取權

有關指派、移除和檢閱存取權限的逐步指示,請參閱 使用 CLI 指派資源存取權限。 下列範例顯示針對 IBM Cloud Logs指派 Viewer 角色的指令:

使用 logs 作為服務名稱。 此外,請使用引號括住多個單字的角色名稱。

ibmcloud iam user-policy-create name@example.com --service-name logs --roles "Viewer"

使用 API 指定 IBM Cloud Logs 的存取權限

如需指派、移除及檢閱存取權的逐步指示,請參閱 使用 API 指派對資源的存取權建立原則 API 文件。 下表中的角色雲端資源名稱 (CRN) 用來使用 API 指派存取權。

用於 API 使用的角色 ID 值
角色名稱 角色 CRN
檢視者 crn:v1:bluemix:public:logs::::serviceRole:Viewer
操作員 crn:v1:bluemix:public:logs::::serviceRole:Operator
編輯者 crn:v1:bluemix:public:logs::::serviceRole:Editor
管理者 crn:v1:bluemix:public:logs::::serviceRole:Administrator

下列範例是針對 IBM Cloud Logs指派 Viewer 角色:

使用 logs 作為服務名稱,並參照「角色 ID」值表格,以確保您使用 CRN 的正確值。

curl -X POST 'https://iam.cloud.ibm.com/v1/policies' -H 'Authorization: Bearer $TOKEN' -H 'Content-Type: application/json' -d '{
  "type": "access",
  "description": "Viewer role for IBM Cloud Logs",
  "subjects": [
    {
      "attributes": [
        {
          "name": "iam_id",
          "value": "IBMid-123453user"
        }
      ]
    }
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:logs::::serviceRole:Viewer"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID"
        },
        {
          "name": "serviceName",
          "value": "logs"
        }
      ]
    }
  ]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
      .name("iam_id")
      .value("IBMid-123453user")
      .build();

PolicySubject policySubjects = new PolicySubject.Builder()
      .addAttributes(subjectAttribute)
      .build();

PolicyRole policyRoles = new PolicyRole.Builder()
      .roleId("crn:v1:bluemix:public:logs::::serviceRole:Viewer")
      .build();

ResourceAttribute accountIdResourceAttribute = new ResourceAttribute.Builder()
      .name("accountId")
      .value("ACCOUNT_ID")
      .operator("stringEquals")
      .build();

ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
      .name("serviceName")
      .value("logs")
      .operator("stringEquals")
      .build();

PolicyResource policyResources = new PolicyResource.Builder()
      .addAttributes(accountIdResourceAttribute)
      .addAttributes(serviceNameResourceAttribute)
      .build();

CreatePolicyOptions options = new CreatePolicyOptions.Builder()
      .type("access")
      .subjects(Arrays.asList(policySubjects))
      .roles(Arrays.asList(policyRoles))
      .resources(Arrays.asList(policyResources))
      .build();

Response<Policy> response = service.createPolicy(options).execute();
Policy policy = response.getResult();

System.out.println(policy);
const policySubjects = [
  {
    attributes: [
      {
        name: 'iam_id',
        value: 'IBMid-123453user',
      },
    ],
  },
];
const policyRoles = [
  {
    role_id: 'crn:v1:bluemix:public:logs::::serviceRole:Viewer',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: 'ACCOUNT_ID',
  operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
  name: 'serviceName',
  value: 'logs',
  operator: 'stringEquals',
};
const policyResources = [
  {
    attributes: [accountIdResourceAttribute, serviceNameResourceAttribute]
  },
];
const params = {
  type: 'access',
  subjects: policySubjects,
  roles: policyRoles,
  resources: policyResources,
};

iamPolicyManagementService.createPolicy(params)
  .then(res => {
    examplePolicyId = res.result.id;
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
policy_subjects = PolicySubject(
  attributes=[SubjectAttribute(name='iam_id', value='IBMid-123453user')])
policy_roles = PolicyRole(
  role_id='crn:v1:bluemix:public:logs::::serviceRole:Viewer')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value='ACCOUNT_ID')
service_name_resource_attribute = ResourceAttribute(
  name='serviceName', value='logs')
policy_resources = PolicyResource(
  attributes=[account_id_resource_attribute,
        service_name_resource_attribute])

policy = iam_policy_management_service.create_policy(
  type='access',
  subjects=[policy_subjects],
  roles=[policy_roles],
  resources=[policy_resources]
).get_result()

print(json.dumps(policy, indent=2))
subjectAttribute := &iampolicymanagementv1.SubjectAttribute{
  Name:  core.StringPtr("iam_id"),
  Value: core.StringPtr("IBMid-123453user"),
}
policySubjects := &iampolicymanagementv1.PolicySubject{
  Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
  RoleID: core.StringPtr("crn:v1:bluemix:public:logs::::serviceRole:Viewer"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("accountId"),
  Value:    core.StringPtr("ACCOUNT_ID"),
  Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("serviceName"),
  Value:    core.StringPtr("logs"),
  Operator: core.StringPtr("stringEquals"),
}
policyResources := &iampolicymanagementv1.PolicyResource{
  Attributes: []iampolicymanagementv1.ResourceAttribute{
    *accountIDResourceAttribute, *serviceNameResourceAttribute}
}

options := iamPolicyManagementService.NewCreatePolicyOptions(
  "access",
  []iampolicymanagementv1.PolicySubject{*policySubjects},
  []iampolicymanagementv1.PolicyRole{*policyRoles},
  []iampolicymanagementv1.PolicyResource{*policyResources},
)

policy, response, err := iamPolicyManagementService.CreatePolicy(options)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(policy, "", "  ")
fmt.Println(string(b))

使用 Terraform 指派對 IBM Cloud Logs 的存取權

下列範例是針對 IBM Cloud Logs指派 Viewer 角色:

使用 logs 作為服務名稱。

resource "ibm_iam_user_policy" "policy" {
  ibm_id = "test@example.com"
  roles  = ["Viewer"]

  resources {
    service = "logs"
  }
}

如需相關資訊,請參閱 terraform 資源 ibm_iam_user_policy