マルチアカウントのエンタープライズ環境において、Resource Directory (リソースディレクトリ) の コントロールポリシー 機能を利用することで、メンバーアカウントに対して統一された権限を設定し、一元的なアクセスの制御とセキュリティポリシーの管理を実現できます。
仕組み
コントロールポリシーは、リソース階層 (フォルダまたはメンバー) に基づいて権限の境界を定義します。たとえば、カスタムコントロールポリシーを使用して、すべてのオブジェクトストレージバケットでパブリックアクセスブロックを必須にするなど、メンバーアカウント全体にセキュリティポリシーを適用します。
評価ロジック
メンバーアカウント内の RAM ユーザーまたは RAM ロールが Object Storage Service (OSS) のようなクラウドサービスにアクセスすると、システムはまずコントロールポリシーに対してリクエストを評価します。準拠している場合、システムは次にアカウントの RAM ポリシーを評価して権限付与を決定します。
評価の原則
明示的な拒否が優先されるという原則が、すべての評価レベルで適用されます:
明示的な拒否が優先:Deny (拒否) ルールがリクエストに一致した場合、リクエストは直ちに拒否されます。コントロールポリシーの評価プロセス全体が終了し、システムはアカウント内の RAM ポリシーの評価に進みません。
明示的な許可:特定のレベルで一致する Deny ルールが見つからない場合、システムは一致する Allow (許可) ルールを探します。Allow ルールが存在する場合、そのレベルでの評価は合格となり、親ノードへと続きます。このプロセスはルートフォルダまで繰り返されます。リクエストがルートを含むすべてのレベルで合格した場合、コントロールポリシー全体の評価は成功となり、システムはアカウント内の RAM ポリシーの評価に進みます。
暗黙的な拒否:一致する Deny または Allow ルールが見つからない場合、リクエストは暗黙的に拒否されます。評価は次のレベルに進まず、コントロールポリシーの評価プロセス全体が終了します。システムはアカウント内の RAM ポリシーの評価に進みません。
Alibaba Cloud は、ターゲットアカウントおよびその上位の階層のすべてのレベルにアタッチされたコントロールポリシーを評価します。これにより、上位レベルでアタッチされたポリシーが、その下のすべてのアカウントに適用されることが保証されます。詳細については、「コントロールポリシーの概要」をご参照ください。
ポリシータイプ
システムコントロールポリシー:表示はできますが変更はできない、組み込みのコントロールポリシーです。コントロールポリシー機能を有効にすると、すべての操作を許可する `FullAliyunAccess` ポリシーがデフォルトでアタッチされます。
カスタムコントロールポリシー:ユーザーが定義するコントロールポリシーで、作成、変更、削除、およびフォルダやメンバーへのアタッチが可能です。
適用範囲
コントロールポリシーは、リソースディレクトリ内のメンバーアカウントに属するすべての RAM ユーザーおよび RAM ロールに適用されます。サービスリンクロール、メンバーアカウントの root ユーザー、または管理アカウント内のいかなる ID にも影響しません。
操作手順
作業を開始する前に、管理アカウントを使用してリソースディレクトリを設定してください。これには、サービスの有効化、フォルダとメンバーの作成、アカウントの招待、メンバーの整理が含まれます。詳細については、「リソースディレクトリの有効化」、「フォルダの作成」、「メンバーの作成」、「Alibaba Cloud アカウントをリソースディレクトリに招待」、および「メンバーの移動」をご参照ください。また、リソースディレクトリの「制限事項」も必ず確認してください。
ステップ 1:コントロールポリシーの有効化
この操作は一度だけ実行する必要があります。すでにこの機能を有効にしている場合は、このステップをスキップしてください。
リソースディレクトリコンソールの コントロールポリシーの有効化 ページに移動します。
制御ポリシーの有効化 をクリックし、選択を確定します。
更新 をクリックしてステータスを確認します。
ステップ 2:カスタムコントロールポリシーの作成
リソースディレクトリコンソールの コントロールポリシーの作成 ページに移動します。
設定方法を選択します。
この例では、パブリックアクセスブロック設定を強制する方法を示します。その他の例については、「一般的な権限付与シナリオ」をご参照ください。
重要拒否ポリシーを適用する前に、メンバーアカウント内の既存リソースがポリシーに準拠していることを確認してください。たとえば、OSS のパブリックアクセスブロックを強制したい場合は、既存のすべてのバケットで パブリックアクセスブロック 機能が有効になっていることを確認してください。
ビジュアルエディター
ビジュアルエディター タブで、以下の設定を行います:
効果: [拒否] を選択します。
Service:[Object Storage] を選択します
操作:
oss:DeleteBucketPublicAccessBlockとoss:PutBucketPublicAccessBlockを選択します
スクリプトエディター
スクリプトエディター タブで、以下のポリシー設定を入力します:
{ "Version": "1", "Statement": [ { "Effect": "Deny", "Action": [ "oss:DeleteBucketPublicAccessBlock", "oss:PutBucketPublicAccessBlock" ], "Resource": "*" } ] }説明コントロールポリシーは JSON を使用し、Version と Statement の 2 つのコア要素を含みます。Statement は `Effect`、`Action`、`Resource`、および `Condition` 要素で構成されます。`Action` 要素の設定方法の詳細については、「Action」をご参照ください。
OK をクリックします。
コントロールポリシーの作成 ダイアログボックスで、[名前] と [説明] を入力し、OK をクリックします。
ステップ 3:コントロールポリシーのアタッチ
リソースディレクトリコンソールの ディレクトリ管理 ページに移動します。
リソース階層ツリーで、ターゲットフォルダをクリックします。
ポリシー タブで、ポリシーのアタッチ をクリックします。
ポリシーのアタッチ パネルで、アタッチするコントロールポリシーを選択し、OK をクリックします。
ステップ 4:ポリシーの検証
アタッチされると、ポリシーはフォルダ内のすべてのメンバーアカウントに適用されます。パブリックアクセスブロックが強制されるシナリオでは、以下の方法でポリシーの効果を検証できます:
拒否される操作の検証:メンバーアカウントで、既存のバケットのパブリックアクセスブロック機能を無効にしてみてください。この操作はコントロールポリシーによって拒否されるはずです。
作成制限の検証:パブリックアクセスブロックを有効にせずに新しいバケットを作成してみてください。作成リクエストは拒否されるはずです。
階層的な適用の検証:フォルダ内の異なるレベルのメンバーアカウントで同じ操作を実行し、ポリシーが階層全体で適用されていることを確認します。
一般的な権限付与シナリオ
シナリオ 1:パブリックアクセスブロックの強制
この機能を無効にする、またはこの機能なしでバケットを作成する操作を拒否するコントロールポリシーを使用することで、OSS バケットのパブリックアクセスブロックを強制できます。以下は設定例です:
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:DeleteBucketPublicAccessBlock",
"oss:PutBucketPublicAccessBlock"
],
"Resource": "*"
}
]
}本番環境への適用
階層化されたポリシー設計:組織の階層を反映した多層的なコントロールポリシー構造を設計します。たとえば、広範で必須のガードレールをルートフォルダにアタッチし、より具体的な制約を部門フォルダに適用します。
ポリシーのバージョン管理:重要なコントロールポリシーにはバージョン管理システムを使用します。変更履歴を明確に保持することで、トラブルシューティングが容易になり、必要に応じて迅速なロールバックが可能になります。
スコープ制御:正当なビジネス運用を誤ってブロックし、システム機能やユーザーエクスペリエンスを妨げる可能性のある、過度に広範な拒否ポリシーは避けてください。
ポリシーのテストと検証:新しいポリシーは、まず専用のテスト環境または重要でないフォルダでテストします。期待される動作を検証した後、本番環境にポリシーを展開し、重要なワークロードの中断を避けます。