.. _storage: ####### STORAGE ####### マネージドオブジェクトストレージの作成及びアクセスコントロールの設定を行います。 +-------+---------+ | | 設定値 | +=======+=========+ | Chart | storage | +-------+---------+ 対応サービス ============== * Azure: `Azure Blob Storage`_ * Google Cloud: `Cloud Storage`_ (GCS) * AWS: `Amazon Simple Storage Service`_ (S3) パッケージの機能 ================ 本パッケージでは、各クラウドのマネージドオブジェクトストレージに関する以下の機能を提供します。 * オブジェクトストレージ作成 * バージョニング・削除保護に関する設定 * ACLに関する設定 * 各クライアントに対する readOnly と readWrite の権限設定が可能 * ネットワークに関する設定 (Azureのみ対応、今後 AWS/Google Cloud でも対応予定) * アクセス元IPによるアクセス許可・拒否の設定 * その他 Azure 固有のネットワーク関連の設定が可能 (詳細はvalues.yamlを参照のこと) * アクセスログ設定 (Azureのみ対応、今後 AWS/Google Cloud でも対応予定) * Webホスティング設定 (AWSのみ対応、今後 Azure/Google Cloud でも対応予定) * 単純なホスティング機能 (カスタムドメイン・独自証明書の利用・CORSは現状未サポート) * CloudFront_ ディストリビューションとバケットの連携 * Azure固有のストレージ設定 * ストレージアカウントの種類指定、階層型名前空間の有効化、NFSアクセスの有効化 に対応 オブジェクトストレージ作成 -------------------------- ストレージ名、ロケーション、リソースグループ(Azureのみ。既存のものを利用、もしくは新規作成どちらも可能。)を指定することで、オブジェクトストレージを一つ作成できます。 Azure ~~~~~ Azureでblobコンテナーを作成するには、ストレージアカウントが必要です。 ストレージアカウントを作成するには、 ``azure.storageAccount.create`` に ``true`` を設定してください。 基本的には ``name`` に指定した値がblobコンテナーおよびストレージアカウントの名前になりますが、 ``azure.storageAccount.name`` に値を設定することでストレージアカウントの名前を別途設定することが可能です。 CNAPで事前に作成したストレージアカウントにblobコンテナーを追加することもできます。 この場合、 ``azure.storageAccount.create`` に ``false`` を指定し、 ``azure.storageAccount.name`` に既存のストレージアカウントの名前を指定してください。 ``name`` には追加するblobコンテナーの名前を指定してください。 CNAPで作成していない既存のストレージアカウントをCNAPで管理下に入れ、blobコンテナーを追加することもできます。 この場合、 ``azure.storageAccount.create`` に ``true`` を指定し、 ``azure.storageAccount.name`` に既存のストレージアカウントの名前を指定してください。 指定した設定がストレージアカウントに反映されるようになり、blobコンテナーも追加できるようになります。 この場合も ``name`` には追加するblobコンテナーの名前を指定してください。 また、blobコンテナーの名前は、英小文字、数字、ハイフンが使用でき、3-63文字にする必要があります。 ストレージアカウントの名前は、英小文字、数字が使用でき、3-24文字にする必要があります。 カスタムドメインを使用したい場合、始めにカスタムドメインの設定無しでストレージアカウントを作成してください。 続いて、Azureポータルなどでストレージアカウントのエンドポイントを確認し、DNSパッケージを使用してカスタムドメインのCNAMEレコードを登録します。 その後、``website.customDomain`` の設定を追加してアップデートしてください。 Azure クラウドサービスのリソースグループは values の ``azure.resourceGroup.name`` で指定できます。 リソースグループを指定する場合は、事前にリソースグループが作成されていることを確認してください。 リソースグループは `UserConfig`_ で作成可能です。 リソースグループを指定しない場合には、namespaceと同名のリソースグループにリソースが作成されます。 AWS/Google ~~~~~~~~~~ AWS S3 及び Google Cloud Storage ではストレージアカウントの概念はありません。 ``name`` で指定したオブジェクトバケットが作成されます。 .. important:: 誤操作によるデータ削除を防ぐため、バケットにデータが残っている場合は、 バケットの削除ができないようになっています。 バケットを削除する際は、事前にバケットの中身を空にしてください。 アカウント作成とロール設定 -------------------------- 作成したオブジェクトストレージに対してコンテナからアクセスするためのロール設定を行います。 ``acl`` の設定を行うことで、作成したバケットにアクセスするクライアントを制限することができます。 ``readOnly`` には anonymous を含む読み込みのみの権限を付与したいクライアント、 ``readWrite`` には読み込みおよび書き込みの権限を付与したいクライアントを列挙します。 .. code-block:: yaml acl: readOnly: - type: anonymous readWrite: - name: data-writer type: mid ``type`` には指定するクライアントの種類を指定し ``name`` 対象の識別子を type ごとの書式で指定します。 .. table:: ACL type に設定可能な値 +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | type | AWS | Azure | Google | Description | +=============+=====+=======+========+=======================================================================================================================================================+ | anonymous | ○ | ○ | ○ | バケットをリードオンリーでパブリック公開します。(acl.readOnly でのみ指定できます) | | | | | | anonymous を選択した場合、name を設定する必要はありません。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | federatedId | ○ | | | 外部 IdP のアドレスを指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | service | ○ | | | サービスに権限を付与します。[service-name].amazonaws.com という形式で指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | role | ○ | | | ロールに権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | sts | ○ | | | AssumeRoleにて引き受けたセッションロールに対して権限を付与します。"[role-name]/[session-name]" という形式でダブルクォーテーションで囲んで指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | mid | | ○ | | CNAP サービスで作成したユーザ割り当てマネージドIDの name を指定して権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | objectId | | ○ | | ユーザー、グループ、サブスクリプション などのIDを指定して権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | domain | | | ○ | Google Workspace もしくは Cloud Identity のドメインに所属するユーザーに権限を付与します。 | | | | | | [USER_NAME]@[DOMAIN].com の ``DOMAIN`` 部分を指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | | | | | google サービスアカウントに権限を付与します。 | | gsa | | | ○ | [SERVICEACCOUNT]@[PROJECT_ID].iam.gserviceaccount.com | | | | | | の形式で指定します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | user | ○ | | ○ | ユーザーアカウントに権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ | group | | | ○ | グループアカウントに権限を付与します。 | +-------------+-----+-------+--------+-------------------------------------------------------------------------------------------------------------------------------------------------------+ Web ホスティング(AWS) --------------------- ストレージバケーットを利用して静的コンテンツをホストする Web サーバーとして設定することができます。 本設定機能は現在 AWS にのみ対応しています。 AWS ~~~ ``website.enabled`` を true に設定することによって、以下の設定が行なわれ、 web ホスティング機能が有効になります。 * CloudFront_ ディストリビューションとバケットの連携 * TLS 証明書の設定(HTTPS へのリダイレクト) * デフォルトドメインの設定 * アクセスログ用のバケット作成 CloudFront ディストリビューションとの連携が行なわれるとCloudFront のデフォルトURLから、 バケットに配置したコンテンツにアクセスできるようになります。 URL は ``xxxxxxxxxxxxxx.cloudfront.net`` の形式で自動的に付与されます。 発行されたURL `クラウドコンソール`_ から確認できます。 web ホスティングを有効にした場合、バケットに設定したアクセスコントロール設定にかかわらず、 web サイト URL にはインターネットからのアクセスが可能になります。 (バケットへのURLへのアクセスにはアクセスコントロールが適用されます。) log 用のバケットは ``-website-log`` の形式で作成され、logs フォルダに アクセスログが保存されます。 Values ====== Default values -------------- .. literalinclude:: values/storage.values.yaml :language: yaml Schema reference ---------------- .. jsonschema:: schema/storage.schema.json Example ======= Example1. Azure BLOBコンテナーとストレージアカウントを作成 ---------------------------------------------------------- .. literalinclude:: example/storage/example1_azure_storage.yaml :language: yaml Example2. Google Cloud Cloudストレージを作成 -------------------------------------------- .. literalinclude:: example/storage/example2_gc_storage.yaml :language: yaml Example3. Amazon Simple Storage Serviceストレージを作成 ------------------------------------------------------- .. literalinclude:: example/storage/example3_aws_s3.yaml :language: yaml Change Log ========== .. changelog:: :changelog-url: https://msp-project-gcp.an.r.appspot.com/managed/storage.html :github: https://github.com/sbopsv/MASTER-CONTAINER-HELM-STORAGE/releases/ .. _Azure Blob Storage: https://azure.microsoft.com/ja-jp/services/storage/blobs/#features .. _Cloud Storage: https://cloud.google.com/storage .. _Amazon Simple Storage Service: https://aws.amazon.com/jp/s3/ .. _MASTER-CONTAINER-HELM-STORAGE: https://github.com/sbopsv/MASTER-CONTAINER-HELM-STORAGE .. _UserConfig: https://github.com/sbopsv/MASTER-CONTAINER-APP-OPERATOR#userconfig .. _CloudFront: https://docs.aws.amazon.com/ja_jp/AmazonCloudFront/latest/DeveloperGuide/Introduction.html .. _`クラウドコンソール`: https://console.aws.amazon.com/cloudfront/v3/home