<!DOCTYPE html>

<!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

<html>
  <head>
    <!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<script type="text/javascript">
  var shiftWindow = function() { scrollBy(0, -108) };
  window.addEventListener("hashchange", shiftWindow);
  window.addEventListener("pageshow", shiftWindow);
  function load() { if (window.location.hash) shiftWindow(); }
</script>

<title>Pulsarにおける認可</title>

<meta charset="utf-8">

<link rel="stylesheet" href="/css/style.css">
<link rel="shortcut icon" href="/img/favicon.ico">

<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.min.js"></script>
<script src="/js/jquery.tocify.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>

<script src="/js/jquery.scrollTo.min.js"></script>
<script async src="/js/main.js"></script>

  </head>
  <body class="body">
    <main class="main">
      <!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

<nav class="navbar navbar-toggleable-md navbar-light sticky-top">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  
  <a class="navbar-brand" href="/">
    <img class="main-logo" src="/img/pulsar-logo.png" alt="Pulsar logo">
  </a>
  

  <a class="navbar-nav"></a>

  <div class="collapse navbar-collapse justify-content-end" id="navbarNavDropdown">
    <ul class="navbar-nav">
      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="clientLibsDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Documentation</a>

        <div class="dropdown-menu" aria-labelledby="documentationDropdown">
          <a class="dropdown-item" href="/docs/latest/getting-started/LocalCluster">Latest</a>

          <div class="dropdown-divider"></div>
          <h3 class="dropdown-header">Stable release</h3>
          <a class="dropdown-item" href="/docs/v1.19.0-incubating/getting-started/LocalCluster">1.19.0-incubating</a>

          
        </div>
      </li>

      <li class="nav-item">
          <a class="nav-link" href="/download">Download</a>
      </li>

      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="clientLibsDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Client libraries
        </a>
        <div class="dropdown-menu" aria-labelledby="clientLibsDropdown">
          <a class="dropdown-item" href="/docs/latest/clients/Java">
            Java
          </a>
          <a class="dropdown-item" href="/docs/latest/clients/Python">
            Python
          </a>
          <a class="dropdown-item" href="/docs/latest/clients/Cpp">
            C++
          </a>
          <div class="dropdown-divider"></div>
          <a class="dropdown-item" href="/api/client">
            Java client Javadoc
          </a>
          <a class="dropdown-item" href="/api/admin">
            Java admin Javadoc
          </a>
          <a class="dropdown-item" href="/api/python">
            Python API docs
          </a>
          <a class="dropdown-item" href="/api/cpp">
            C++ API docs
          </a>
        </div>
      </li>

      <li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="versionsDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
          Community
        </a>
        <div class="dropdown-menu dropdown-left" aria-labelledby="versionsDropdown">
          <h3 class="dropdown-header">Get in touch</h3>
          <a class="dropdown-item" href="/contact">Contact</a>
          <a class="dropdown-item" href="https://twitter.com/Apache_Pulsar">Twitter</a>
          <a class="dropdown-item" href="https://github.com/apache/incubator-pulsar/wiki">Wiki</a>
          <a class="dropdown-item" href="https://github.com/apache/incubator-pulsar/issues">Issue tracking</a>
          <div class="dropdown-divider"></div>
          <h3 class="dropdown-header">Resources</h3>
          <a class="dropdown-item" href="/presentations">Presentations</a>
          <a class="dropdown-item" href="/team">Team</a>
          <div class="dropdown-divider"></div>
          <h3 class="dropdown-header">Apache</h3>
          <a class="dropdown-item" href="http://www.apache.org/">The Apache Software Foundation</a>
          <a class="dropdown-item" href="http://www.apache.org/licenses/">License</a>
          <a class="dropdown-item" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a>
          <a class="dropdown-item" href="http://www.apache.org/foundation/thanks.html">Thanks</a>
          <a class="dropdown-item" href="http://www.apache.org/security">Security</a>
        </div>
      </li>
    </ul>
  </div>
  <a class="hidden-md-down" href="http://www.apache.org/">
    <img class="asf-logo" title="Apache Software Foundation" src="/img/feather.png" />
  </a>
</nav>

<!--
<nav class="navbar navbar-toggleable-md navbar-light" style="border: 1px solid red;">
  <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <a class="navbar-brand" href="/">
    <img src="/img/pulsar-logo.png" class="d-inline-block align-top" alt="Pulsar logo" height="40" width="60">
  </a>

  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
      </li>
      <li class="nav-item">
        <a class="nav-link" href="#">Link</a>
      </li>
      <li class="nav-item">
        <a class="nav-link disabled" href="#">Disabled</a>
      </li>
    </ul>
  </div>
</nav>-->

      <main>
        <!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

<div class="docs-container container-fluid">
  <div class="row">
    <nav class="sidebar-nav col-sm-3 col-lg-3">
      <!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<ul class="sidebar">
  
  <section class="sidebar-group">
    <h4>Getting started</h4>
    <ul>
      
      
      
      
      <li><a href="/ja/GettingStarted/"><i class="fa fa-file-text-o"></i>Pulsar入門</a></li>
      
      
      
      
      
      <li><a href="/ja/Architecture/"><i class="fa fa-file-text-o"></i>システム概要</a></li>
      
      
    </ul>
  </section>
  
  <section class="sidebar-group">
    <h4>運用管理</h4>
    <ul>
      
      
      
      
      <li><a href="/ja/ClusterSetup/"><i class="fa fa-file-text-o"></i>クラスタのセットアップ</a></li>
      
      
      
      
      
      <li><a href="/ja/AdminTools/"><i class="fa fa-file-text-o"></i>adminツールとAPI</a></li>
      
      
    </ul>
  </section>
  
</ul>

    </nav>

    <article class="col-sm-7 col-lg-7">
      <section class="docs-header">
        <h1 class="docs-title">Pulsarにおける認可</h1>
        
        <hr />
      </section>

      <section class="content">
        <h2 id="認可モデル">認可モデル</h2>

<p>Pulsarにおいて、認証プロバイダは特定のクライアントを識別し<strong><em>ロール</em></strong>トークンと関連付けます。</p>

<p>ロールは単一または複数のクライアントを表す文字列で、<br />
これらのクライアントは、特定のトピックに対してproduceまたはconsumeを行う権限、または特定の<a href="Architecture.md#プロパティとネームスペース">プロパティ</a>の設定を管理する権限が付与されます。</p>

<h2 id="新規プロパティの作成">新規プロパティの作成</h2>

<p>Pulsarのプロパティはテナントを示す識別子で、一般的にPulsarインスタンスの管理者またはセルフサービスのポータルなどによって提供されます。</p>

<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="gp">$ </span>bin/pulsar-admin properties create my-property   <span class="se">\</span>
        --admin-roles my-admin-role                <span class="se">\</span>
        --allowed-clusters us-west,us-east
</code></pre>
</div>

<p>このコマンドはクラスタ<code class="highlighter-rouge">us-west</code>と<code class="highlighter-rouge">us-east</code>を利用可能な新規プロパティ<code class="highlighter-rouge">my-property</code>を作成します。</p>

<p>ロール<code class="highlighter-rouge">my-admin-role</code>と識別されたクライアントは、このプロパティ上での全ての管理操作が許可されます。</p>

<h2 id="ネームスペースの管理">ネームスペースの管理</h2>

<p>プロパティ管理者は指定されたクラスタ内に複数ネームスペースを作成できます。</p>

<div class="highlighter-rouge"><pre class="highlight"><code>$ bin/pulsar-admin namespaces create my-property/us-west/my-namespace
</code></pre>
</div>

<p>作成後、このネームスペースの利用権限の付与ができます:</p>

<div class="highlighter-rouge"><pre class="highlight"><code>$ bin/pulsar-admin namespaces grant-permission \
                        my-property/us-west/my-namespace \
                        --role my-client-role \
                        --actions produce,consume
</code></pre>
</div>

<p>コマンド実行後、ロール<code class="highlighter-rouge">my-client-role</code>と識別されたクライアントは指定されたネームスペースのトピックを利用可能になります。</p>

<h2 id="スーパーユーザ">スーパーユーザ</h2>

<p>Pulsarでは、システムの<em>スーパーユーザ</em>を特定のロールに割り当てることができます。</p>

<p>スーパーユーザは全てのプロパティとネームスペースに対する全ての管理操作、および全てのトピックに対する発行と購読が許可されます。</p>

<p>スーパーユーザはBrokerの設定ファイル<code class="highlighter-rouge">conf/broker.conf</code>で設定されます:</p>

<div class="language-shell highlighter-rouge"><pre class="highlight"><code><span class="nv">superUserRoles</span><span class="o">=</span>my-super-user-1,my-super-user-2
</code></pre>
</div>

<p>一般的に、スーパーユーザロールはadminクライアントやBroker間の認可で利用されます。<br />
ジオレプリケーションにおいては、各Brokerが他クラスタのトピックに発行できる必要があります。</p>

      </section>
    </article>

    <nav class="toc-bar col-sm-2 col-lg-2">
      <div id="toc"></div>
    </nav>
  </div>
</div>

      </main>
    </main>

    <!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->
<footer class="footer">
  <div class="container">
    <p class="text-center">Copyright 2017 The Apache Software Foundation. All Rights Reserved.</p>
  </div>
</footer>


    

    
    <!--

    Licensed to the Apache Software Foundation (ASF) under one
    or more contributor license agreements.  See the NOTICE file
    distributed with this work for additional information
    regarding copyright ownership.  The ASF licenses this file
    to you under the Apache License, Version 2.0 (the
    "License"); you may not use this file except in compliance
    with the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

    Unless required by applicable law or agreed to in writing,
    software distributed under the License is distributed on an
    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    KIND, either express or implied.  See the License for the
    specific language governing permissions and limitations
    under the License.

-->

<script>
  (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
  (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
  m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
  })(window,document,'script','https://www.google-analytics.com/analytics.js','ga');

  ga('create', 'UA-102219959-1', 'auto');
  ga('send', 'pageview');
</script>

    
  </body>
</html>
