IBM Cloud Docs
リソースへのパブリック・アクセスの管理

リソースへのパブリック・アクセスの管理

デフォルトでは、アカウント内のすべてのユーザーおよびサービス ID が、そのアカウント内のパブリック・アクセス・グループのメンバーです。 アクセス・グループにアクセス・ポリシーを割り当てると、認証が必要なくなるため、アカウントのメンバーかどうかには関係なくすべてのユーザーにそのリソースへのアクセスが開きます。 ただし、アカウント・リソースへのパブリック・アクセスがまったくないようにする場合には、アカウント・レベルでパブリック・アクセスを無効化して制御します。

パブリック・アクセスを管理するには、アカウント内で「IAM アクセス・グループ」サービスの管理者である必要があります。

リソースへのパブリック・アクセスの割り当て

アカウントでパブリック・アクセスが有効になっている場合、パブリック・アクセス・グループのすべてのメンバーがアクセスできるリソースを定義するポリシーを作成できます。

一般公開するには、以下の手順に従ってください

  1. IBM Cloud® コンソールで、 「管理」 > 「アクセス (IAM)」 >「設定」 > 「パブリック・アクセス」 をクリックします。
  2. 「パブリック・アクセス・グループ」 を有効にします。
  3. **「はい」**をクリックして確認します。

コンソールでのアクセス権限の割り当て

ポリシーを作成するには、対象のリソースに対する管理者アクセス権限を持っている必要があります。

IBM Cloud® Object Storage は、現時点でパブリック・アクセスをサポートしている唯一のリソース・タイプであるため、例として使用されています。 例として、以下のセクションでは、mybucket123 という名前の Object Storage バケットのパブリック・アクセスを割り当てる方法を説明します。

  1. IBM Cloud® コンソールで、「管理」 > **「アクセス (IAM)」をクリックし、「アクセス・グループ」**を選択します。
  2. パブリック・アクセス・グループの名前 > **「アクセス権限の割り当て」**をクリックします。
  3. **「サービス」**リストから Object Storage を選択します。
  4. **「サービス・インスタンス」**リストから特定のインスタンスを選択します。
  5. リソース・タイプに「bucket」を入力します。
  6. リソース ID に「mybucket123」を入力します。
  7. サービス・アクセス役割を選択し、**「割り当て」**をクリックします。
  8. リソースにパブリック・アクセス・ポリシーを割り当てることを確認し、**「割り当て」**をクリックします。

CLI を使用したアクセス権限の割り当て

パブリック・アクセス・グループのアクセス権限の割り当てを行うには、ibmcloud iam access-group-policy-create コマンドを実行します。 次のコマンド例では、ポリシー詳細は JSON ファイルに指定されています。 JSON ファイルに含める内容の例については、API の指示に移動してください。

ibmcloud iam access-group-policy Public Access -f @policy.json

コマンド・オプションについて詳しくは、『ibmcloud iam access-group-policy-create』を参照してください。

API を使用したアクセス権限の割り当て

以下の要求例は、パブリック・アクセス・グループ用のポリシーを作成します。

curl -X POST \
'https://iam.cloud.ibm.com/v1/policies' \
-H 'Authorization: $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
  "type": "access",
  "subjects": [
    {
      "attributes": [
        {
          "name": "access_group_id",
          "value": "AccessGroupId-PublicAccess"
        }
      ]
    }
  ],
  "roles":[
    {
      "role_id": "crn:v1:bluemix:public:iam::::role:Administrator"
    }
  ],
  "resources":[
    {
      "attributes": [
        {
          "name": "accountId",
          "value": "$ACCOUNT_ID"
        },
        {
          "name": "serviceName",
          "value": "$SERVICE_NAME"
        },
      ]
    }
  ]
}'
SubjectAttribute subjectAttribute = new SubjectAttribute.Builder()
        .name("access_group_id")
        .value(AccessGroupId-PublicAccess)
        .build();

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

PolicyRole policyRoles = new PolicyRole.Builder()
        .roleId("crn:v1:bluemix:public:iam::::role:Administrator")
        .build();

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

ResourceAttribute serviceNameResourceAttribute = new ResourceAttribute.Builder()
        .name("serviceName")
        .value("exampleServiceName")
        .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: 'access_group_id',
        value: AccessGroupId-PublicAccess,
      },
    ],
  },
];
const policyRoles = [
  {
    role_id: 'crn:v1:bluemix:public:iam::::role:Administrator',
  },
];
const accountIdResourceAttribute = {
  name: 'accountId',
  value: exampleAccountId,
  operator: 'stringEquals',
};
const serviceNameResourceAttribute = {
  name: 'serviceName',
  value: 'exampleServiceName',
  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='access_group_id', value=AccessGroupId-PublicAccess)])
policy_roles = PolicyRole(
  role_id='crn:v1:bluemix:public:iam::::role:Administrator')
account_id_resource_attribute = ResourceAttribute(
  name='accountId', value=example_account_id)
service_name_resource_attribute = ResourceAttribute(
  name='serviceName', value='exampleServiceName')
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("access_group_id"),
  Value: &AccessGroupId-PublicAccess,
}
policySubjects := &iampolicymanagementv1.PolicySubject{
  Attributes: []iampolicymanagementv1.SubjectAttribute{*subjectAttribute},
}
policyRoles := &iampolicymanagementv1.PolicyRole{
  RoleID: core.StringPtr("crn:v1:bluemix:public:iam::::role:Administrator"),
}
accountIDResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("accountId"),
  Value:    core.StringPtr(exampleAccountID),
  Operator: core.StringPtr("stringEquals"),
}
serviceNameResourceAttribute := &iampolicymanagementv1.ResourceAttribute{
  Name:     core.StringPtr("serviceName"),
  Value:    core.StringPtr("exampleServiceName"),
  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))

詳しくは、 ポリシーの作成を参照してください。

リソースへのパブリック・アクセスの無効化

パブリック・アクセスを無効にすると、パブリック・アクセス・グループ用の既存のポリシーがすべて削除されるので、以前は許可されていたアクセスが取り消されます。 パブリック・アクセス・グループ用のポリシーの作成や変更を行うこともできません。

コンソールでのアクセスの無効化

アカウントのパブリック・アクセスを無効にするには、以下の手順を実行します。

  1. IBM Cloud コンソールで管理 > アクセス (IAM) > 設定に移動します。
  2. 「パブリック・アクセス」をクリックし、 「パブリック・アクセス・グループ」 を使用不可にします。

CLI を使用したアクセスの無効化

このアクションは、UI または API でのみ実行できます。 手順を確認するには、UI または API の指示に移動してください。

API を使用したアクセスの無効化

以下の要求例は、アカウントのパブリック・アクセスを無効にします。

curl -X PATCH \
'https://iam.cloud.ibm.com/v2/groups/settings?account_id=<account_id>' \
-H 'Authorization: $TOKEN' \
-H 'Content-Type: application/json' \
-d '{
  "public_access_enabled": false
}'
UpdateAccountSettingsOptions updateAccountSettingsOptions = new UpdateAccountSettingsOptions.Builder()
  .accountId(testAccountId)
  .publicAccessEnabled(false)
  .build();

Response<AccountSettings> response = service.updateAccountSettings(updateAccountSettingsOptions).execute();
AccountSettings accountSettings = response.getResult();

System.out.println(accountSettings);
const params = {
  accountId: testAccountId,
  publicAccessEnabled: false,
};

iamAccessGroupsService.updateAccountSettings(params)
  .then(res => {
    console.log(JSON.stringify(res.result, null, 2));
  })
  .catch(err => {
    console.warn(err)
  });
account_settings = iam_access_groups_service.update_account_settings(
  account_id=test_account_id,
  public_access_enabled=False
).get_result()

print(json.dumps(account_settings, indent=2))
updateAccountSettingsOptions := iamAccessGroupsService.NewUpdateAccountSettingsOptions(testAccountID)
updateAccountSettingsOptions.SetPublicAccessEnabled(false)
accountSettings, response, err := iamAccessGroupsService.UpdateAccountSettings(updateAccountSettingsOptions)
if err != nil {
  panic(err)
}
b, _ := json.MarshalIndent(accountSettings, "", "  ")
fmt.Println(string(b))

詳細については 、「アカウント設定の更新 」を参照してください。