オブジェクト・ストレージのプライベート・エンドポイント
パブリック・インターネットではなくVCN内のプライベートIPアドレスを使用してプライベート・エンドポイントを使用してObject Storageのバケットおよびオブジェクトにアクセスする方法について学習します。
プライベート・エンドポイントは、OCI VCNまたはオンプレミス・ネットワークからオブジェクト・ストレージへのセキュアなアクセスを提供します。プライベート・エンドポイントは、VNC内で選択したサブネット内のプライベートIPアドレスを持つVNICです。この方法は、OCIサービスに関連付けられたパブリックIPアドレスを使用してサービス・ゲートウェイを使用する代替方法です。
プライベート・エンドポイントは、専用エンドポイントとは異なります。専用エンドポイントは、それぞれがURLに専用のネームスペース文字列を持つテナンシ固有のエンドポイントです。この属性は、組織のセキュリティおよびコンプライアンス要件を満たすために、完全な分離を保証します。従来のパブリック・エンドポイントURLと同様に、専用エンドポイントはObject StorageのパブリックIPアドレスに解決されます。
一方、プライベート・エンドポイントは、VNICのプライベートIPアドレスに解決されるカスタマイズ可能なエンドポイントです。リクエストはVCN内のプライベートIPアドレスに送信されます。その後、トラフィックはVNICからオブジェクト・ストレージ・サービスにルーティングされます。
VCNにプライベート・エンドポイントを作成し、それをバケットに関連付けると、インターネットまたは他のネットワーク・ソースからのバケットへのアクセスが制限されることはありません。バケットのIAMポリシーを使用してルールを定義する必要があるため、リクエストは、特定のVCNまたはそのVCN内のCIDRブロックから発生したものの場合のみ認可されます。インターネット経由を含む他のすべてのアクセスは、これらのバケットに対してブロックされます。詳細は、ネットワーク・ソースの管理を参照してください。
次に、特定のバケットを特定のネットワーク・ソースに制限するポリシーの例を示します:
allow group groupName to manage objects in tenancy where all {target.bucket.name = 'bucketName', request.networkSource.name = 'networkSourceName'}
プライベート・エンドポイントを作成する際、アクセス・ターゲットを指定することで、特定のオブジェクト・ストレージ・リソースへのアクセスを制限できます。各アクセス・ターゲットは、次の必須パラメータで構成されます。
-
ネームスペース: プライベート・エンドポイントからのエグレスを許可するターゲット・ネームスペースを指定します。
-
コンパートメント: プライベート・エンドポイントがアクセスできるネームスペース/コンパートメントを指定します。単一のコンパートメントまたはすべてのコンパートメントを構成できます。
-
バケット: プライベート・エンドポイントがアクセスできる許可されたコンパートメント内のネームスペース/バケットを指定します。1つのバケットを構成することも、許可されているコンパートメント内のすべてのバケットを構成することもできます。
パラメータの名前またはワイルドカード("*")を指定して、パラメータへのアクセスを許可します。アクセス・ターゲットの構成の詳細は、プライベート・エンドポイントの作成を参照してください。
各プライベート・エンドポイントには、最大10のアクセス・ターゲットが少なくとも1つ必要です。
次の例では、アクセス・ターゲットに次の構成があります。
-
ネームスペース= Namespace1
-
コンパートメント= Compartment1
-
バケット= Bucket1
この構成では、プライベート・エンドポイントは、Compartment1にあり、Namespace1に属するBucket1内のオブジェクトにアクセスできます。Bucket1を別のコンパートメント(Compartment2)に移動すると、プライベート・エンドポイントはバケットBucket1にアクセスできなくなります。
アクセス・ターゲットを追加しても、バケットまたはオブジェクトへのアクセスは自動的に付与されません。プライベート・エンドポイントを介したオブジェクト・ストレージへのリクエストは、バケットまたはオブジェクトにアクセスするための正しいIAMポリシーがあることを確認するために、常にOCI IAMによって認可されます。
プライベート・エンドポイントを使用するオブジェクト・ストレージ・バケットは、そのプライベート・エンドポイントのみに限定されません。プライベート・エンドポイントを使用するバケットでは、他のアクセス方法も使用できます。
プライベート・エンドポイント・タスク
次のオブジェクト・ストレージ・プライベート・エンドポイント・タスクを実行できます:
IAMポリシー 🔗
ポリシーを使用して、オブジェクト・ストレージのプライベート・エンドポイントへのアクセスを制限します。ポリシーは、Oracle Cloud Infrastructureリソースに誰がどのようにアクセスできるかを指定します。詳細は、ポリシーの仕組みを参照してください。
グループに、その職責を実行するために必要な最小限の権限を割り当てます。各ポリシーには、グループに許可されるアクションを記述する動詞があります。各ポリシーには、グループに許可されるアクションを記述する動詞があります。使用可能な動詞は、アクセス・レベルが低い方から順にinspect
、read
、use
、manage
です。
対応する操作を実行するには、次のアクセス権が必要です。
Allow group groupName to manage objectstorage-private-endpoint in tenancy
Allow group groupName to manage virtual-network-family in tenancy
オブジェクト・ストレージのプライベート・エンドポイント管理を許可するには、次のIAMポリシーを追加することをお薦めします:
操作 | Object Storage IAM権限 | その他のIAM権限 |
---|---|---|
プライベート・エンドポイントの作成 |
|
|
コンパートメント内のプライベート・エンドポイントのリスト |
|
|
プライベート・エンドポイントの詳細の取得 |
|
|
プライベート・エンドポイントの編集 |
|
|
コンパートメントからのプライベート・エンドポイントの削除 |
|
|
アクセス・ターゲット 🔗
特定のバケットを特定のネットワーク・ソースに制限するには、次のアクセス・ポリシーを使用します:
allow group groupName to manage objects in tenancy where all {target.bucket.name = 'bucketName', request.networkSource.name = 'networkSourceName'}
制限 🔗
オブジェクト・ストレージのプライベート・エンドポイントには、次の制限が適用されます:
-
1つのテナンシ内で最大10個のプライベート・エンドポイントを使用できます。
-
プライベート・エンドポイントごとに最大10個のアクセス・ターゲットを使用できます。
-
各プライベート・エンドポイントの最大帯域幅は25Gbpsです。
事前認証済リクエストの動作 🔗
プライベート・エンドポイントを介して事前認証済リクエスト(PAR)を作成する場合、次の点に注意してください:
-
PARには、PAR URLの一部としてプライベート・エンドポイントの完全修飾ドメイン名(FQDN)が含まれます。
-
アクセス・ターゲットのみが許可するバケットのプライベート・エンドポイントを介してPARを作成できます。
-
パブリック・エンドポイントからPARバケットおよびオブジェクトにアクセスするには、URLのプライベート・エンドポイントFQDNをパブリック・エンドポイントに置き換えます。
詳細は、事前認証済リクエストを参照してください。
プライベート・エンドポイントの使用 🔗
オブジェクト・ストレージのプライベート・エンドポイントを作成すると、使用可能になります。DNS接頭辞入力から作成された完全修飾ドメイン名(FQDN)は、VCN内のプライベートDNSゾーンによって解決可能になります。これらのFQDNは、リクエストがプライベート・エンドポイントを通過するようにオブジェクト・ストレージへのリクエストで使用されるエンドポイントになります。
次に、プライベート・エンドポイントのCLIベースの詳細にFQDNが表示される例を示します:
oci os private-endpoint get --pe-name pe1
{
"data": {
"access-targets": [
{
"bucket": "*",
"compartment-id": "*",
"namespace": "MyNamespace"
}
],
"additional-prefixes": [],
"compartment-id": "ocid1.tenancy.oc1..exampleuniqueID",
"created-by": "ocid1.user.region1..exampleuniqueID",
"defined-tags": {},
"etag": "017e1d8f-1013-477a-86a4-d4d03b473f74",
"fqdns": {
"additional-prefixes-fqdns": {},
"prefix-fqdns": {
"object-storage-api-fqdn": "pe1-MyNamespace.private.objectstorage.us-phoenix-1.oci.customer-oci.com",
"s3-compatibility-api-fqdn": "pe1-MyNamespace.private.compat.objectstorage.us-phoenix-1.oci.customer-oci.com",
"swift-api-fqdn": "pe1-MyNamespace.private.swiftobjectstorage.us-phoenix-1.oci.customer-oci.com"
}
},
"freeform-tags": {},
"id": "ocid1.privateendpoint.region1.sea.exampleuniqueID",
"lifecycle-state": "ACTIVE",
"name": "pe1",
"namespace": "MyNamespace",
"nsg-ids": [],
"prefix": "pe1",
"private-endpoint-ip": "10.0.0.2",
"subnet-id": "ocid1.subnet.region1.sea.exampleuniqueID",
"time-created": "2024-06-20T06:33:56.866000+00:00",
"time-modified": "2024-06-20T06:36:01.820000+00:00"
},
"etag": "017e1d8f-1013-477a-86a4-d4d03b473f74"
}
次に、CLIを使用して作成したFQDNのいずれかを使用してオブジェクトの詳細を取得する例を示します。
oci os object get --namespace 'MyNamespace' --bucket-name 'MyBucket' --name MyObjectName --endpoint https://pe1-MyNamespace.private.objectstorage.us-phoenix-1.oci.customer-oci.com
Best Practices 🔗
オブジェクト・ストレージへのセキュアなプライベート接続を確保するために、プライベート・エンドポイントを使用する際には、次のベスト・プラクティスをお薦めします:
-
次のいずれかの方法を使用して、ポート443のイングレスを許可する必要があります:
-
デフォルトのセキュリティ・リストへのセキュリティ・リスト・ルールの追加このセキュリティールールは、サブネット内のすべてのVNICに適用されます。詳細は、セキュリティ・リストを参照してください。
-
イングレス・セキュリティ・リスト・ルールを使用してネットワーク・セキュリティ・グループ(NSG)を作成し、プライベート・エンドポイントの作成にNSGを含めます。このNSGはプライベート・エンドポイントにのみ適用されます。詳細は、ネットワーク・セキュリティ・グループを参照してください。この方法は、よりレベルのsecuirtyを提供するため、使用することをお薦めします。
-
-
テナンシ間でのデータ・エクスポートを回避するには、ネームスペース= your_namespace、コンパートメント= *、バケット= *など、構成されたアクセス・ターゲットから始めます。この構成により、プライベート・エンドポイントはネームスペース内のすべてのコンパートメント内のすべてのバケットにアクセスできます。
-
プライベート・エンドポイントからアクセスできる1つ以上のバケットのみへのアクセスをさらに制限するには、ネームスペース= <your_namespace>、コンパートメント= Compartment1、バケット= Bucket1などの構成されたアクセス・ターゲットから始めます。アクセス・ターゲットを使用して最大10個のバケットを指定できます。
-
バケットでIAMポリシーを使用するため、リクエストは、特定のVCNまたはそのVCN内のCIDRブロックから発生した場合にのみ認可されます。インターネット経由を含む他のすべてのアクセスは、これらのバケットに対してブロックされます。詳細は、ネットワーク・ソースの管理を参照してください。
次に、特定のバケットを特定のネットワーク・ソースに制限するポリシーの例を示します:
allow group groupName to manage objects in tenancy where all {target.bucket.name = 'bucketName', request.networkSource.name = 'networkSourceName'}
-
1つ以上のプライベートDNSゾーンは、プライベート・エンドポイントの作成時にVCNに作成されます。このプライベートDNSゾーンは、プライベート・エンドポイントの完全修飾ドメイン名をプライベート・エンドポイントのプライベートIPアドレスに解決するのに役立ちます。プライベート・エンドポイントを使用する場合は、VCNのプライベートDNSゾーン内のDNSエントリを変更しないことをお薦めします。これらを変更すると、プライベート・エンドポイントを経由するトラフィックおよびリクエストの動作に影響する可能性があります。
-
プライベート・エンドポイントを含むサブネットまたはVCNを削除するには、サブネットまたはVCNを削除する前にプライベート・エンドポイントを削除することをお薦めします。