Cloud IAM 権限の使用

このページでは、Cloud Identity and Access Management(Cloud IAM)権限を使用して、バケットとオブジェクトへのアクセスを制御する方法を説明します。Cloud IAM を使用すると、バケットとオブジェクトにアクセスできるユーザーを制御できます。Cloud Storage に適用される Cloud IAM の概要については、Cloud IAM の概要をご覧ください。

バケットとオブジェクトへのアクセスを制御するその他の方法については、アクセス制御の概要をご覧ください。バケット内のオブジェクトのアクセスを個別に制御する方法については、アクセス制御リストをご覧ください。

バケットで Cloud IAM を使用する

バケットで基本的な Cloud IAM タスクを実行する方法について説明します。

バケットレベルのポリシーにメンバーを追加する

Cloud Storage に関連付けられている役割のリストについては、Cloud IAM 役割をご覧ください。Cloud IAM 役割を付与するエンティティの詳細については、メンバーのタイプをご覧ください。

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. メンバーに役割を付与するバケットに関連付けられた [バケット オーバーフロー] メニュー()をクリックします。

  3. [バケットの権限を編集] を選択します。

  4. [メンバーを追加] フィールドに、バケットにアクセスが必要な ID を入力します。

    メンバー追加ダイアログ

  5. [役割を選択] プルダウン メニューから役割を選択します。選択した役割と付与する権限の簡単な説明がペインに表示されます。

  6. [追加] をクリックします。

gsutil

gsutil iam ch コマンドを使用します。

gsutil iam ch [MEMBER_TYPE]:[MEMBER_NAME]:[IAM_ROLE] gs://[BUCKET_NAME]

ここで

  • [MEMBER_TYPE] はバケットのアクセス権を付与するメンバーのタイプです。たとえば、user です。
  • [MEMBER_NAME] はバケットのアクセス権を付与するメンバーの名前です。たとえば、jane@gmail.com です。
  • [IAM_ROLE] はメンバーに付与する IAM 役割です。たとえば、roles/storage.objectCreator です。
  • [BUCKET_NAME] は、メンバーのアクセス権を付与するバケットの名前です。たとえば、my-bucket です。

[MEMBER_TYPE]:[MEMBER_NAME]:[IAM_ROLE] のフォーマットに関するその他の例については、gsutil iam ch リファレンス ページをご覧ください。

コードサンプル

C++

詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。

namespace gcs = google::cloud::storage;
    using ::google::cloud::StatusOr;
    [](gcs::Client client, std::string bucket_name, std::string role,
       std::string member) {
      auto policy = client.GetNativeBucketIamPolicy(bucket_name);

      if (!policy) {
        throw std::runtime_error(policy.status().message());
      }

      for (auto& binding : policy->bindings()) {
        if (binding.role() != role) {
          continue;
        }
        auto& members = binding.members();
        if (std::find(members.begin(), members.end(), member) == members.end()) {
          members.emplace_back(member);
        }
      }

      auto updated_policy = client.SetNativeBucketIamPolicy(bucket_name, *policy);

      if (!updated_policy) {
        throw std::runtime_error(updated_policy.status().message());
      }

      std::cout << "Updated IAM policy bucket " << bucket_name
                << ". The new policy is " << *updated_policy << "\n";
    }

C#

詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。

private void AddBucketIamMember(string bucketName,
        string role, string member)
    {
        var storage = StorageClient.Create();
        var policy = storage.GetBucketIamPolicy(bucketName);
        Policy.BindingsData bindingToAdd = new Policy.BindingsData();
        bindingToAdd.Role = role;
        string[] members = { member };
        bindingToAdd.Members = members;
        policy.Bindings.Add(bindingToAdd);
        storage.SetBucketIamPolicy(bucketName, policy);
        Console.WriteLine($"Added {member} with role {role} "
            + $"to {bucketName}");
    }

Go

詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。

ctx := context.Background()

    ctx, cancel := context.WithTimeout(ctx, time.Second*10)
    defer cancel()
    bucket := c.Bucket(bucketName)
    policy, err := bucket.IAM().Policy(ctx)
    if err != nil {
    	return err
    }
    // Other valid prefixes are "serviceAccount:", "user:"
    // See the documentation for more values.
    // https://cloud.google.com/storage/docs/access-control/iam
    policy.Add("group:cloud-logs@google.com", "roles/storage.objectViewer")
    if err := bucket.IAM().SetPolicy(ctx, policy); err != nil {
    	return err
    }
    // NOTE: It may be necessary to retry this operation if IAM policies are
    // being modified concurrently. SetPolicy will return an error if the policy
    // was modified since it was retrieved.

Java

詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。

// Initialize a Cloud Storage client
    Storage storage = StorageOptions.getDefaultInstance().getService();

    // Get IAM Policy for a bucket
    Policy policy = storage.getIamPolicy(bucketName);

    // Add identity to Bucket-level IAM role
    Policy updatedPolicy =
        storage.setIamPolicy(bucketName, policy.toBuilder().addIdentity(role, identity).build());

    if (updatedPolicy.getBindings().get(role).contains(identity)) {
      System.out.printf("Added %s with role %s to %s\n", identity, role, bucketName);
    }

Node.js

詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。

/**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // const bucketName = 'Name of a bucket, e.g. my-bucket';
    // const roleName = 'Role to grant, e.g. roles/storage.objectViewer';
    // const members = [
    //   'user:jdoe@example.com',    // Example members to grant
    //   'group:admins@example.com', // the new role to
    // ];

    // Imports the Google Cloud client library
    const {Storage} = require('@google-cloud/storage');

    // Creates a client
    const storage = new Storage();

    async function addBucketIamMember() {
      // Get a reference to a Google Cloud Storage bucket
      const bucket = storage.bucket(bucketName);

      // Gets and updates the bucket's IAM policy
      const [policy] = await bucket.iam.getPolicy({requestedPolicyVersion: 3});

      // Adds the new roles to the bucket's IAM policy
      policy.bindings.push({
        role: roleName,
        members: members,
      });

      // Updates the bucket's IAM policy
      await bucket.iam.setPolicy(policy);

      console.log(
        `Added the following member(s) with role ${roleName} to ${bucketName}:`
      );

      members.forEach(member => {
        console.log(`  ${member}`);
      });
    }

    addBucketIamMember().catch(console.error);

PHP

詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。

use Google\Cloud\Storage\StorageClient;

    /**
     * Adds a new member / role IAM pair to a given Cloud Storage bucket.
     *
     * @param string $bucketName the name of your Cloud Storage bucket.
     * @param string $role the role you want to add a given member to.
     * @param string $member the member you want to give the new role for the Cloud
     * Storage bucket.
     *
     * @return void
     */
    function add_bucket_iam_member($bucketName, $role, $member)
    {
        $storage = new StorageClient();
        $bucket = $storage->bucket($bucketName);

        $policy = $bucket->iam()->policy();

        $policy['bindings'][] = [
            'role' => $role,
            'members' => [$member]
        ];

        $bucket->iam()->setPolicy($policy);

        printf('User %s added to role %s for bucket %s' . PHP_EOL, $member, $role, $bucketName);
    }

Python

詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。

from google.cloud import storage

    def add_bucket_iam_member(bucket_name, role, member):
        """Add a new member to an IAM Policy"""
        # bucket_name = "your-bucket-name"
        # role = "IAM role, e.g. roles/storage.objectViewer"
        # member = "IAM identity, e.g. user: name@example.com"

        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)

        policy = bucket.get_iam_policy(requested_policy_version=3)

        policy.bindings.append({"role": role, "members": {member}})

        bucket.set_iam_policy(policy)

        print("Added {} with role {} to {}.".format(member, role, bucket_name))

    

Ruby

詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。

# project_id  = "Your Google Cloud project ID"
    # bucket_name = "Your Google Cloud Storage bucket name"
    # role        = "Bucket-level IAM role"
    # member      = "Bucket-level IAM member"

    require "google/cloud/storage"

    storage = Google::Cloud::Storage.new project_id: project_id
    bucket = storage.bucket bucket_name

    bucket.policy requested_policy_version: 3 do |policy|
      policy.bindings.insert role: role, members: [member]
    end

    puts "Added #{member} with role #{role} to #{bucket_name}"

JSON

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. 次の情報が含まれる .json ファイルを作成します。

    {
          "bindings":[
            {
              "role": "[IAM_ROLE]",
              "members":[
                "[MEMBER_NAME]"
              ]
            }
          ]
        }

    ここで

    • [IAM_ROLE] はメンバーに付与する IAM 役割です。たとえば、roles/storage.objectCreator です。
    • [MEMBER_NAME] はバケットのアクセス権を付与するメンバーの名前です。たとえば、jane@gmail.com です。

      [MEMBER_NAME] のフォーマットに関するその他の例については、こちらからメンバーのセクションをご覧ください。

  3. cURL を使用して PUT setIamPolicy リクエストで JSON API を呼び出します。

    curl -X PUT --data-binary @[JSON_FILE_NAME].json \
          -H "Authorization: Bearer [OAUTH2_TOKEN]" \
          -H "Content-Type: application/json" \
          "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam"

    ここで

    • [JSON_FILE_NAME] は、手順 2 で作成したファイルの名前です。
    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [BUCKET_NAME] は、メンバーのアクセス権を付与するバケットの名前です。たとえば、my-bucket です。

バケットに適用される Cloud IAM ポリシーを表示する

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. 役割メンバーを表示するバケットに関連付けられた [バケット オーバーフロー] メニュー()をクリックします。

  3. [バケットの権限を編集] を選択します。

  4. 必要な役割を展開して、役割に割り当てられているメンバーを表示します。

  5. (省略可)検索バーを使用して、役割またはメンバーで結果をフィルタリングします。

    メンバーで検索すると、メンバーが割り当てられている役割が表示されます。

gsutil

gsutil iam get コマンドを使用します。

gsutil iam get gs://[BUCKET_NAME]

ここで、[BUCKET_NAME] は Cloud IAM ポリシーを表示するバケットの名前です。たとえば、my-bucket です。

コードサンプル

C++

詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。

namespace gcs = google::cloud::storage;
    using ::google::cloud::StatusOr;
    [](gcs::Client client, std::string bucket_name) {
      auto policy = client.GetNativeBucketIamPolicy(bucket_name);

      if (!policy) {
        throw std::runtime_error(policy.status().message());
      }

      std::cout << "The IAM policy for bucket " << bucket_name << " is "
                << *policy << "\n";
    }

C#

詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。

private void ViewBucketIamMembers(string bucketName)
    {
        var storage = StorageClient.Create();
        var policy = storage.GetBucketIamPolicy(bucketName);
        foreach (var binding in policy.Bindings)
        {
            Console.WriteLine($"  Role: {binding.Role}");
            Console.WriteLine("  Members:");
            foreach (var member in binding.Members)
            {
                Console.WriteLine($"    {member}");
            }
        }
    }

Go

詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。

ctx := context.Background()

    ctx, cancel := context.WithTimeout(ctx, time.Second*10)
    defer cancel()
    policy, err := c.Bucket(bucketName).IAM().Policy(ctx)
    if err != nil {
    	return nil, err
    }
    for _, role := range policy.Roles() {
    	log.Printf("%q: %q", role, policy.Members(role))
    }

Java

詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。

// Initialize a Cloud Storage client
    Storage storage = StorageOptions.getDefaultInstance().getService();

    // Get IAM Policy for a bucket
    Policy policy = storage.getIamPolicy(bucketName);

    // Print Roles and its identities
    Map<Role, Set<Identity>> policyBindings = policy.getBindings();
    for (Map.Entry<Role, Set<Identity>> entry : policyBindings.entrySet()) {
      System.out.printf("Role: %s Identities: %s\n", entry.getKey(), entry.getValue());
    }

Node.js

詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。

/**
     * TODO(developer): Uncomment the following line before running the sample.
     */
    // const bucketName = 'Name of a bucket, e.g. my-bucket';

    // Imports the Google Cloud client library
    const {Storage} = require('@google-cloud/storage');

    // Creates a client
    const storage = new Storage();

    async function viewBucketIamMembers() {
      // Gets and displays the bucket's IAM policy
      // Gets and displays the bucket's IAM policy
      const results = await storage
        .bucket(bucketName)
        .iam.getPolicy({requestedPolicyVersion: 3});

      const bindings = results[0].bindings;

      // Displays the roles in the bucket's IAM policy
      console.log(`Bindings for bucket ${bucketName}:`);
      for (const binding of bindings) {
        console.log(`  Role: ${binding.role}`);
        console.log(`  Members:`);

        const members = binding.members;
        for (const member of members) {
          console.log(`    ${member}`);
        }

        const condition = binding.condition;
        if (condition) {
          console.log(`  Condiiton:`);
          console.log(`    Title: ${condition.title}`);
          console.log(`    Description: ${condition.description}`);
          console.log(`    Expression: ${condition.expression}`);
        }
      }
    }

    viewBucketIamMembers().catch(console.error);

PHP

詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。

use Google\Cloud\Storage\StorageClient;

    /**
     * View Bucket IAM members for a given Cloud Storage bucket.
     *
     * @param string $bucketName the name of your Cloud Storage bucket.
     *
     * @return void
     */
    function view_bucket_iam_members($bucketName)
    {
        $storage = new StorageClient();
        $bucket = $storage->bucket($bucketName);

        $policy = $bucket->iam()->policy();

        printf('Printing Bucket IAM members for Bucket: %s' . PHP_EOL, $bucketName);
        printf(PHP_EOL);

        foreach ($policy['bindings'] as $binding) {
            printf('Role: %s' . PHP_EOL, $binding['role']);
            printf('Members:' . PHP_EOL);
            foreach ($binding['members'] as $member) {
                printf('  %s' . PHP_EOL, $member);
            }
            printf(PHP_EOL);
        }
    }

Python

詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。

from google.cloud import storage

    def view_bucket_iam_members(bucket_name):
        """View IAM Policy for a bucket"""
        # bucket_name = "your-bucket-name"

        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)

        policy = bucket.get_iam_policy(requested_policy_version=3)

        for binding in policy.bindings:
            print("Role: {}, Members: {}".format(binding["role"], binding["members"]))

    

Ruby

詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。

# project_id  = "Your Google Cloud project ID"
    # bucket_name = "Your Google Cloud Storage bucket name"

    require "google/cloud/storage"

    storage = Google::Cloud::Storage.new project_id: project_id
    bucket = storage.bucket bucket_name

    policy = bucket.policy requested_policy_version: 3
    policy.bindings.each do |binding|
      puts "Role: #{binding.role}"
      puts "Members: #{binding.members}"

      # if a conditional binding exists print the condition.
      if binding.condition
        puts "Condition Title: #{binding.condition.title}"
        puts "Condition Description: #{binding.condition.description}"
        puts "Condition Expression: #{binding.condition.expression}"
      end
    end

JSON

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して GET getIamPolicy リクエストで JSON API を呼び出します。

    curl -X GET \
          -H "Authorization: Bearer [OAUTH2_TOKEN]" \
          "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam"

    ここで

    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [BUCKET_NAME] は、Cloud IAM ポリシーを表示するバケットの名前です。たとえば、my-bucket です。

バケットレベルのポリシーからメンバーを削除する

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. メンバーの役割を削除するバケットに関連付けられた [バケット オーバーフロー] メニュー()をクリックします。

  3. [バケットの権限を編集] を選択します。

  4. 削除するメンバーが含まれている役割を展開します。

  5. メンバーにカーソルを合わせて、表示されたゴミ箱のアイコンをクリックします。

    プロジェクトからメンバーを削除する

  6. 上に重なったウィンドウで [削除] をクリックします。

gsutil

gsutil iam ch コマンドを使用して、-d フラグを指定します。

gsutil iam ch -d [MEMBER_TYPE]:[MEMBER_NAME] gs://[BUCKET_NAME]

ここで

  • [MEMBER_TYPE] は、ポリシーから削除するメンバーのタイプです。たとえば、user です。
  • [MEMBER_NAME] は、ポリシーから削除するメンバーの名前です。たとえば、jane@gmail.com です。
  • [BUCKET_NAME] はバケットの名前で、このバケットからメンバーのアクセス権を削除します。たとえば、my-bucket です。

[MEMBER_TYPE]:[MEMBER_NAME] のフォーマットに関するその他の例については、gsutil iam ch リファレンス ページをご覧ください。

コードサンプル

C++

詳細については、Cloud Storage C++ API のリファレンス ドキュメントをご覧ください。

namespace gcs = google::cloud::storage;
    using ::google::cloud::StatusOr;
    [](gcs::Client client, std::string bucket_name, std::string role,
       std::string member) {
      auto policy = client.GetNativeBucketIamPolicy(bucket_name);
      if (!policy) {
        throw std::runtime_error(policy.status().message());
      }

      std::vector<google::cloud::storage::NativeIamBinding> updated_bindings;
      for (auto& binding : policy->bindings()) {
        auto& members = binding.members();
        if (binding.role() == role) {
          members.erase(std::remove(members.begin(), members.end(), member),
                        members.end());
        }
        if (!members.empty()) {
          updated_bindings.emplace_back(std::move(binding));
        }
      }
      policy->bindings() = std::move(updated_bindings);

      auto updated_policy = client.SetNativeBucketIamPolicy(bucket_name, *policy);

      if (!updated_policy) {
        throw std::runtime_error(updated_policy.status().message());
      }

      std::cout << "Updated IAM policy bucket " << bucket_name
                << ". The new policy is " << *updated_policy << "\n";
    }

C#

詳細については、Cloud Storage C# API のリファレンス ドキュメントをご覧ください。

private void RemoveBucketIamMember(string bucketName,
        string role, string member)
    {
        var storage = StorageClient.Create();
        var policy = storage.GetBucketIamPolicy(bucketName);
        policy.Bindings.ToList().ForEach(response =>
        {
            if (response.Role == role)
            {
                // Remove the role/member combo from the IAM policy.
                response.Members = response.Members
                    .Where(m => m != member).ToList();
                // Remove role if it contains no members.
                if (response.Members.Count == 0)
                {
                    policy.Bindings.Remove(response);
                }
            }
        });
        // Set the modified IAM policy to be the current IAM policy.
        storage.SetBucketIamPolicy(bucketName, policy);
        Console.WriteLine($"Removed {member} with role {role} "
            + $"to {bucketName}");
    }

Go

詳細については、Cloud Storage Go API のリファレンス ドキュメントをご覧ください。

ctx := context.Background()

    ctx, cancel := context.WithTimeout(ctx, time.Second*10)
    defer cancel()
    bucket := c.Bucket(bucketName)
    policy, err := bucket.IAM().Policy(ctx)
    if err != nil {
    	return err
    }
    // Other valid prefixes are "serviceAccount:", "user:"
    // See the documentation for more values.
    // https://cloud.google.com/storage/docs/access-control/iam
    policy.Remove("group:cloud-logs@google.com", "roles/storage.objectViewer")
    if err := bucket.IAM().SetPolicy(ctx, policy); err != nil {
    	return err
    }
    // NOTE: It may be necessary to retry this operation if IAM policies are
    // being modified concurrently. SetPolicy will return an error if the policy
    // was modified since it was retrieved.

Java

詳細については、Cloud Storage Java API のリファレンス ドキュメントをご覧ください。

// Initialize a Cloud Storage client
    Storage storage = StorageOptions.getDefaultInstance().getService();

    // Get IAM Policy for a bucket
    Policy policy = storage.getIamPolicy(bucketName);

    // Remove an identity from a Bucket-level IAM role
    Policy updatedPolicy =
        storage.setIamPolicy(bucketName, policy.toBuilder().removeIdentity(role, identity).build());

    if (updatedPolicy.getBindings().get(role) == null
        || !updatedPolicy.getBindings().get(role).contains(identity)) {
      System.out.printf("Removed %s with role %s from %s\n", identity, role, bucketName);
    }

Node.js

詳細については、Cloud Storage Node.js API のリファレンス ドキュメントをご覧ください。

/**
     * TODO(developer): Uncomment the following lines before running the sample.
     */
    // const bucketName = 'Name of a bucket, e.g. my-bucket';
    // const roleName = 'Role to grant, e.g. roles/storage.objectViewer';
    // const members = [
    //   'user:jdoe@example.com',    // Example members to grant
    //   'group:admins@example.com', // the new role to
    // ];

    // Imports the Google Cloud client library
    const {Storage} = require('@google-cloud/storage');

    // Creates a client
    const storage = new Storage();

    async function removeBucketIamMember() {
      // Get a reference to a Google Cloud Storage bucket
      const bucket = storage.bucket(bucketName);

      // Gets and updates the bucket's IAM policy
      const [policy] = await bucket.iam.getPolicy({requestedPolicyVersion: 3});

      // Finds and updates the appropriate role-member group, without a condition.
      const index = policy.bindings.findIndex(
        binding => binding.role === roleName && !binding.condition
      );

      const role = policy.bindings[index];
      if (role) {
        role.members = role.members.filter(
          member => members.indexOf(member) === -1
        );

        // Updates the policy object with the new (or empty) role-member group
        if (role.members.length === 0) {
          policy.bindings.splice(index, 1);
        } else {
          policy.bindings.index = role;
        }

        // Updates the bucket's IAM policy
        await bucket.iam.setPolicy(policy);
      } else {
        // No matching role-member group(s) were found
        throw new Error('No matching role-member group(s) found.');
      }

      console.log(
        `Removed the following member(s) with role ${roleName} from ${bucketName}:`
      );
      members.forEach(member => {
        console.log(`  ${member}`);
      });
    }

    removeBucketIamMember().catch(console.error);

PHP

詳細については、Cloud Storage PHP API のリファレンス ドキュメントをご覧ください。

use Google\Cloud\Core\Iam\PolicyBuilder;
    use Google\Cloud\Storage\StorageClient;

    /**
     * Removes a member / role IAM pair from a given Cloud Storage bucket.
     *
     * @param string $bucketName the name of your Cloud Storage bucket.
     * @param string $role the role you want to remove a given member from.
     * @param string $member the member you want to remove from the given role.
     *
     * @return void
     */
    function remove_bucket_iam_member($bucketName, $role, $member)
    {
        $storage = new StorageClient();
        $bucket = $storage->bucket($bucketName);
        $policy = $bucket->iam()->policy();
        $policyBuilder = new PolicyBuilder($policy);
        $policyBuilder->removeBinding($role, [$member]);

        $bucket->iam()->setPolicy($policyBuilder->result());
        printf('User %s removed from role %s for bucket %s' . PHP_EOL, $member, $role, $bucketName);
    }

Python

詳細については、Cloud Storage Python API のリファレンス ドキュメントをご覧ください。

from google.cloud import storage

    def remove_bucket_iam_member(bucket_name, role, member):
        """Remove member from bucket IAM Policy"""
        # bucket_name = "your-bucket-name"
        # role = "IAM role, e.g. roles/storage.objectViewer"
        # member = "IAM identity, e.g. user: name@example.com"

        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)

        policy = bucket.get_iam_policy(requested_policy_version=3)

        for binding in policy.bindings:
            print(binding)
            if binding["role"] == role and binding.get("condition") is None:
                binding["members"].discard(member)

        bucket.set_iam_policy(policy)

        print("Removed {} with role {} from {}.".format(member, role, bucket_name))

    

Ruby

詳細については、Cloud Storage Ruby API のリファレンス ドキュメントをご覧ください。

# project_id  = "Your Google Cloud project ID"
    # bucket_name = "Your Google Cloud Storage bucket name"
    # role        = "Bucket-level IAM role"
    # member      = "Bucket-level IAM member"

    require "google/cloud/storage"

    storage = Google::Cloud::Storage.new project_id: project_id
    bucket = storage.bucket bucket_name

    bucket.policy requested_policy_version: 3 do |policy|
      policy.bindings.each do |binding|
        if binding.role == role && binding.condition.nil?
          binding.members.delete member
        end
      end
    end

    puts "Removed #{member} with role #{role} from #{bucket_name}"

JSON

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. プロジェクトに適用されている既存のポリシーを取得します。これを行うには、cURL を使用して GET getIamPolicy リクエストで JSON API を呼び出します。

    curl -X GET \
          -H "Authorization: Bearer [OAUTH2_TOKEN]" \
          "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam"

    ここで

    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [BUCKET_NAME] は、Cloud IAM ポリシーを表示するバケットの名前です。たとえば、my-bucket です。
  3. 前の手順で取得したポリシーを含む .json ファイルを作成します。

  4. .json ファイルを編集し、ポリシーからメンバーを削除します。

  5. cURL を使用して PUT setIamPolicy リクエストで JSON API を呼び出します。

    curl -X PUT --data-binary @[JSON_FILE_NAME].json \
          -H "Authorization: Bearer [OAUTH2_TOKEN]" \
          -H "Content-Type: application/json" \
          "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam"

    ここで

    • [JSON_FILE_NAME] は、手順 3 で作成したファイルの名前です。
    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [BUCKET_NAME] はバケットの名前で、このバケットからメンバーのアクセス権を削除します。たとえば、my-bucket です。

バケットに対する Cloud IAM Conditions の使用

beta feature Cloud IAM Conditions

以下のセクションでは、バケットでの Cloud IAM Conditions の追加と削除の方法を説明します。バケットの Cloud IAM Conditions を表示するには、バケットに適用される Cloud IAM ポリシーを表示するをご覧ください。Cloud Storage での Cloud IAM Conditions の使用について詳しくは、Conditions をご覧ください。

条件を追加する前に、バケットに対する均一なバケットレベルのアクセスを有効にする必要があります。

バケットに新しい条件を設定する

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. バケットに関連付けられた行の右端にある [バケット オーバーフロー] メニュー()をクリックします。

  3. [バケットの権限を編集] を選択します。

  4. [メンバーを追加] をクリックします。

  5. [新しいメンバー] に、バケットへのアクセスを許可するメンバーを入力します。

  6. 条件を適用する役割ごとに:

    1. メンバーを付与する役割を選択します。

    2. [条件を追加] をクリックして [条件を編集] フォームを開きます。

    3. 条件の [タイトル] を入力します。[説明] 欄の入力は任意です。

    4. [条件ビルダー] を使用して条件を視覚的に構築するか、[条件エディタ] タブを使用して CEL 式を入力します。

    5. [保存] をクリックして、[メンバーを追加] に戻ります。複数の役割を追加するには、[別の役割を追加] をクリックします。

  7. [保存] をクリックします。

gsutil

  1. gsutil iam コマンドを使用してバケットの Cloud IAM ポリシーを一時 JSON ファイルに保存します。

    gsutil iam get gs://[BUCKET_NAME] > /tmp/policy.json

    ここで、[BUCKET_NAME] は、Cloud IAM ポリシーを取得するバケットの名前です。たとえば、my-bucket です。

  2. テキスト エディタで /tmp/policy.json ファイルを編集して、Cloud IAM ポリシー内のバインディングに新しい条件を追加します。

    {
          "version": [VERSION],
          "bindings": [
            {
              "role": "[IAM_ROLE]",
              "members": [
                "[MEMBER_NAME]"
              ],
              "condition": {
                "title": "[TITLE]",
                "description": "[DESCRIPTION]",
                "expression": "[EXPRESSION]"
              }
          ],
          "etag": "[ETAG]"
        }

    ここで

    • [VERSION]Cloud IAM ポリシーのバージョンです。Cloud IAM Conditions を含むバケットの場合は 3 に設定する必要があります。
    • [IAM ROLE] は、条件が適用される役割です。たとえば、roles/storage.objectCreator です。
    • [MEMBER_NAME] は、条件が適用されるメンバーです。たとえば、jane@gmail.com です。
    • [TITLE] は、条件のタイトルです。たとえば、expires in 2019 です。
    • [DESCRIPTION] は、条件の省略可能な説明です。たとえば、Permission revoked on New Year's です。
    • [EXPRESSION] は、属性ベースの論理式です。たとえば、request.time < timestamp(\"2019-01-01T00:00:00Z\") です。他の式の例については、条件属性のリファレンスをご覧ください。Cloud Storage がサポートするのは、日時リソースタイプ、およびリソース名という属性のみであることに注意してください。

    [ETAG] は変更しないでください。

  3. gsutil iam を使用して、変更した Cloud IAM ポリシーをバケットに設定します。

    gsutil iam set /tmp/policy.json gs://[BUCKET_NAME]

JSON

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. GET getIamPolicy リクエストを使用して、バケットの Cloud IAM ポリシーを一時 JSON ファイルに保存します。

    curl \
        'https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam' \
        --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' > /tmp/policy.json

    ここで

    • [YOUR_ACCESS_TOKEN] は、手順 1 で生成したアクセス トークンです。
  3. テキスト エディタで /tmp/policy.json ファイルを編集して、Cloud IAM ポリシー内のバインディングに新しい条件を追加します。

    {
              "version": [VERSION],
              "bindings": [
                {
                  "role": "[IAM_ROLE]",
                  "members": [
                    "[MEMBER_NAME]"
                  ],
                  "condition": {
                    "title": "[TITLE]",
                    "description": "[DESCRIPTION]",
                    "expression": "[EXPRESSION]"
                  }
              ],
              "etag": "[ETAG]"
         }

    ここで

    • [VERSION]Cloud IAM ポリシーのバージョンです。Cloud IAM Conditions を含むバケットの場合は 3 に設定する必要があります。
    • [IAM_ROLE] は、条件が適用される役割です。たとえば、roles/storage.objectCreator です。
    • [MEMBER_NAME] は、条件が適用されるメンバーです。たとえば、jane@gmail.com です。
    • [TITLE] は、条件のタイトルです。たとえば、expires in 2019 です。
    • [DESCRIPTION] は、条件の省略可能な説明です。たとえば、Permission revoked on New Year's です。
    • [EXPRESSION] は、属性ベースの論理式です。たとえば、request.time < timestamp(\"2019-01-01T00:00:00Z\") です。他の式の例については、条件属性のリファレンスをご覧ください。Cloud Storage がサポートするのは、日時リソースタイプ、およびリソース名という属性のみであることに注意してください。

      [ETAG] は変更しないでください。

  4. PUT setIamPolicy リクエストを使用して、変更された Cloud IAM ポリシーをバケットに設定します。

    curl -X PUT --data-binary @/tmp/policy.json \
          -H "Authorization: Bearer [OAUTH2_TOKEN]" \
          -H "Content-Type: application/json" \
          "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam"

    ここで

    • [YOUR_ACCESS_TOKEN] は、手順 1 で生成したアクセス トークンです。

バケットから条件を削除する

Console

  1. Google Cloud Console で Cloud Storage ブラウザを開きます。
    Cloud Storage ブラウザを開く
  2. バケットに関連付けられた行の右端にある [バケット オーバーフロー] メニュー()をクリックします。

  3. [バケットの権限を編集] を選択します。

  4. 削除する条件を含む役割を展開します。

  5. 条件に関連付けられたメンバーの [編集] メニュー([編集] メニュー アイコン。)をクリックします。

  6. 表示された [権限を編集] オーバーレイで、削除する条件の名前をクリックします。

  7. 表示された [条件を編集] オーバーレイで、[削除] をクリックしてから、[確認] をクリックします。

  8. [保存] をクリックします。

gsutil

  1. gsutil iam コマンドを使用してバケットの Cloud IAM ポリシーを一時 JSON ファイルに保存します。

    gsutil iam get gs://[BUCKET_NAME] > /tmp/policy.json
  2. テキスト エディタで /tmp/policy.json ファイルを編集し、Cloud IAM ポリシーから条件を削除します。

  3. gsutil iam を使用して、変更した Cloud IAM ポリシーをバケットに設定します。

    gsutil iam set /tmp/policy.json gs://[BUCKET_NAME]

JSON

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. GET getIamPolicy リクエストを使用して、バケットの Cloud IAM ポリシーを一時 JSON ファイルに保存します。

    curl \
        'https://storage.googleapis.com/storage/v1/b/[BUCKET]/iam' \
        --header 'Authorization: Bearer [YOUR_ACCESS_TOKEN]' > /tmp/policy.json

    ここで

    • [YOUR_ACCESS_TOKEN] は、手順 1 で生成したアクセス トークンです。
  3. テキスト エディタで /tmp/policy.json ファイルを編集し、Cloud IAM ポリシーから条件を削除します。

  4. PUT setIamPolicy リクエストを使用して、変更された Cloud IAM ポリシーをバケットに設定します。

    curl -X PUT --data-binary @/tmp/policy.json \
          -H "Authorization: Bearer [YOUR_ACCESS_TOKEN]" \
          -H "Content-Type: application/json" \
          "https://storage.googleapis.com/storage/v1/b/[BUCKET_NAME]/iam"

    ここで

    • [YOUR_ACCESS_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [BUCKET_NAME] は、IAM ポリシーを変更するバケットの名前です。たとえば、my-bucket です。

プロジェクトで Cloud IAM を使用する

プロジェクトで基本的な Cloud IAM タスクを実行する方法について説明します。これらのタスクでは、大半の Cloud Storage タスクとは別のコマンドライン コマンド gcloud と別のエンドポイント cloudresourcemanager.googleapis.com を使用します。

次のタスクを完了するには、resourcemanager.projects.getIamPolicyresourcemanager.projects.setIamPolicy の Cloud IAM 権限が必要です。

プロジェクト レベルのポリシーにメンバーを追加する

Cloud Storage に関連付けられている役割のリストについては、Cloud IAM 役割をご覧ください。Cloud IAM 役割を付与するエンティティの詳細については、メンバーのタイプをご覧ください。

Console

  1. Google Cloud Console で [IAM と管理] ブラウザを開きます。
    [IAM と管理] ブラウザを開く
  2. 上部のバーにある [プロジェクト] プルダウン メニューで、メンバーを追加するプロジェクトを選択します。

  3. [追加] をクリックします。[プロジェクトへのメンバー、役割の追加] ダイアログが表示されます。

  4. [新しいメンバー] フィールドで、アクセス権を付与するエンティティの名前を指定します。

  5. [役割を選択] プルダウンで、メンバーに適切な役割を付与します。

    Cloud Storage のバケットとオブジェクトに影響を及ぼす役割は、[プロジェクト] と [ストレージ] サブメニューに表示されます。

  6. [保存] をクリックします。

gsutil

プロジェクト レベルの Cloud IAM ポリシーは、gcloud コマンドで管理します。このコマンドは Google Cloud SDK に含まれています。プロジェクト レベルのポリシーを追加するには、gcloud beta projects add-iam-policy-binding を使用します。

JSON

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. 次の情報が含まれる .json ファイルを作成します。

    {
          "policy": {
            "version": "0",
            "bindings": {
              "role": "[IAM_ROLE]",
              "members": "[MEMBER_NAME]"
            },
          }
        }

    ここで

    • [IAM_ROLE] はメンバーに付与する IAM 役割です。たとえば、roles/storage.objectCreator です。
    • [MEMBER_NAME] はプロジェクトのアクセス権を付与するメンバーのタイプと名前です。たとえば、user:jane@gmail.com です。
  3. cURL を使用して POST setIamPolicy リクエストで Resource Manager API を呼び出します。

    curl -X POST --data-binary @[JSON_FILE_NAME].json \
          -H "Authorization: Bearer [OAUTH2_TOKEN]" \
          -H "Content-Type: application/json" \
          "https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_NAME]:setIamPolicy"

    ここで

    • [JSON_FILE_NAME] は、手順 2 で作成したファイルの名前です。
    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [PROJECT_NAME] はメンバーのアクセス権を付与するプロジェクトの名前です。たとえば、my-project です。

プロジェクトに適用される Cloud IAM ポリシーを表示する

Console

  1. Google Cloud Console で [IAM と管理] ブラウザを開きます。
    [IAM と管理] ブラウザを開く
  2. 上部バーにある [プロジェクト] プルダウン メニューで、ポリシーを表示するプロジェクトを選択します。

  3. プロジェクトの権限を表示するには、次の 2 つの方法があります。

    • メンバー別の表示: 個々のメンバーに関連付けられた [役割] 列を表示して、各メンバーの役割を確認します。
    • 役割別の表示: 個々の役割に関連付けられたプルダウンを使用して、役割を持つメンバーを確認します。

gsutil

プロジェクト レベルの Cloud IAM ポリシーは、gcloud コマンドで管理します。このコマンドは Google Cloud SDK に含まれています。プロジェクトの Cloud IAM ポリシーを表示するには、gcloud beta projects get-iam-policy コマンドを使用します。

JSON

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. cURL を使用して POST getIamPolicy リクエストで Resource Manager API を呼び出します。

    curl -X POST \
          -H "Authorization: Bearer [OAUTH2_TOKEN]" \
          -H "Content-Length: 0" \
          "https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_NAME]:getIamPolicy"

    ここで

    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [PROJECT_NAME] はメンバーのアクセス権を付与するプロジェクトの名前です。たとえば、my-project です。

プロジェクト レベルのポリシーからメンバーを削除する

Console

  1. Google Cloud Console で [IAM と管理] ブラウザを開きます。
    [IAM と管理] ブラウザを開く
  2. 上部のバーにある [プロジェクト] プルダウン メニューで、メンバーを削除するプロジェクトを選択します。

  3. 権限が [メンバー] 別に表示されていることを確認し、削除するメンバーを選択します。

  4. [削除] をクリックします。

  5. 表示されたオーバーレイ ウィンドウで、[確認] をクリックします。

gsutil

プロジェクト レベルの Cloud IAM ポリシーは、gcloud コマンドで管理します。このコマンドは Google Cloud SDK に含まれています。プロジェクト レベルのポリシーを削除するには、gcloud beta projects remove-iam-policy-binding を使用します。

JSON

  1. OAuth 2.0 Playground から承認アクセス トークンを取得します。固有の OAuth 認証情報を使用するようにプレイグラウンドを構成します。
  2. プロジェクトに適用されている既存のポリシーを取得します。これを行うには、cURL を使用して POST getIamPolicy リクエストで Resource Manager API を呼び出します。

    curl -X POST \
          -H "Authorization: Bearer [OAUTH2_TOKEN]" \
          -H "Content-Length: 0" \
          "https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_NAME]:getIamPolicy"

    ここで

    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [PROJECT_NAME] はメンバーのアクセス権を付与するプロジェクトの名前です。たとえば、my-project です。
  3. 前の手順で取得したポリシーを含む .json ファイルを作成します。

  4. .json ファイルを編集し、ポリシーからメンバーを削除します。

  5. cURL を使用して POST setIamPolicy リクエストで Resource Manager API を呼び出します。

    curl -X POST --data-binary @[JSON_FILE_NAME].json \
          -H "Authorization: Bearer [OAUTH2_TOKEN]" \
          -H "Content-Type: application/json" \
          "https://cloudresourcemanager.googleapis.com/v1/projects/[PROJECT_NAME]:setIamPolicy"

    ここで

    • [JSON_FILE_NAME] は、手順 2 で作成したファイルの名前です。
    • [OAUTH2_TOKEN] は、手順 1 で生成したアクセス トークンです。
    • [PROJECT_NAME] はメンバーのアクセス権を付与するプロジェクトの名前です。たとえば、my-project です。

次のステップ