このトピックでは、Resource Access Management (RAM) ユーザーの Object Storage Service (OSS) に対するアクセス権限を管理する方法について説明します。 RAM コンソールでは、カスタムポリシーを作成して RAM ユーザーにアタッチできます。
このタスクについて
- RAM ユーザーの OSS 権限を管理する前に、以下のシステムポリシーを理解しておく必要があります。
- AliyunOSSFullAccess:RAM ユーザーにOSSバケットを管理するためのアクセス権限を付与します。
- AliyunOSSReadOnlyAccess:OSS バケットの読み取り専用のアクセス権限を付与します。
これら 2 つのシステムポリシーが業務要件を満たすことができない場合、カスタムポリシーを作成できます。
- RAM ユーザーの OSS 権限を管理する前に、OSS 権限を理解しておく必要があります。 詳細については、「概要」をご参照ください。
手順
ポリシーの例
- 例 1: RAM ユーザーにバケット名が
myphotos
のバケットを管理する権限を付与します。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:*", "Resource": [ "acs:oss:*:*:myphotos", "acs:oss:*:*:myphotos/*" ] } ] }
- Example 2: RAM ユーザーにバケット内のリソースの一覧表示および読み取りに必要な権限を付与します。
- OSS SDK または CLIを使用して、RAM ユーザーにバケット名が
myphotos
のバケット内のリソースを一覧表示して読み取る権限を付与するには、以下のサンプルスクリプトを使用します。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:ListObjects", "Resource": "acs:oss:*:*:myphotos" }, { "Effect": "Allow", "Action": "oss:GetObject", "Resource": "acs:oss:*:*:myphotos/*" } ] }
- RAM ユーザーが、OSS コンソールを使用してバケット名が myphotos のバケット内のリソースを一覧表示および読み取るための権限を付与するには、以下のサンプルスクリプトを使用します。
注 RAM ユーザーが OSS コンソールにログインすると、
ListBuckets
、GetBucketAcl
、GetObjectAcl
API が呼び出され、バケットがパブリックであるかどうかを確認します。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", "oss:GetBucketStat", "oss:GetBucketInfo", "oss:GetBucketTagging", "oss:GetBucketAcl" ], "Resource": "acs:oss:*:*:*" }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetBucketAcl" ], "Resource": "acs:oss:*:*:myphotos" }, { "Effect": "Allow", "Action": [ "oss:GetObject", "oss:GetObjectAcl" ], "Resource": "acs:oss:*:*:myphotos/*" } ] }
- OSS SDK または CLIを使用して、RAM ユーザーにバケット名が
- 例 3: RAM ユーザーが特定の IP アドレスを使用して OSS バケットにアクセスするための権限を付与します。
- IP アドレス条件を
Allow
要素に追加します。 RAM ユーザーに、CIDR ブロック192.168.0.0/16
または172.16.1.0/16
内の IP アドレスを使用して、myphotos
バケットからデータを読み取る権限が付与されます。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", "oss:GetBucketStat", "oss:GetBucketInfo", "oss:GetBucketTagging", "oss:GetBucketAcl" ], "Resource": [ "acs:oss:*:*:*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetObject" ], "Resource": [ "acs:oss:*:*:myphotos", "acs:oss:*:*:myphotos/*" ], "Condition":{ "IpAddress": { "acs:SourceIp": ["192.168.0.0/16", "172.16.1.0/16"] } } } ] }
- IP アドレス条件を
Deny
要素に追加します。 RAM ユーザーの IP アドレスが CIDR ブロック192.168.0.0/16
に存在しない場合、RAM ユーザーは myphotos バケットにアクセスできず、管理できません。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", "oss:GetBucketStat", "oss:GetBucketInfo", "oss:GetBucketTagging", "oss:GetBucketAcl" ], "Resource": [ "acs:oss:*:*:*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects", "oss:GetObject" ], "Resource": [ "acs:oss:*:*:myphotos", "acs:oss:*:*:myphotos/*" ] }, { "Effect": "Deny", "Action": "oss:*", "Resource": [ "acs:oss:*:*:*" ], "Condition":{ "NotIpAddress": { { "acs:SourceIp": ["192.168.0.0/16"] } } } ] }
注 Deny コマンドを使用したポリシーは、Allow コマンドを使用したポリシーよりも優先度が高くなります。myphotos
バケットのデータを、IP アドレスが CIDR ブロック192.168.0.0/16
に存在しない RAM ユーザーが読み取ろうとした場合、OSS は RAM ユーザーに対して、必要な権限が付与されていないことを通知します。
- IP アドレス条件を
- 例 4: RAM ユーザーに、OSS ディレクトリからデータを読み取る権限を付与します。
この例では、写真を保存するバケット名は
myphotos
です。 バケットには、写真が撮影された場所に基づいて名前が付けられた複数のフォルダーがあります。 各フォルダーには、写真が撮影された年に基づいて名前が付けられたサブフォルダーがあります。myphotos[Bucket] ├── beijing │ ├── 2014 │ └── 2015 ├── hangzhou │ ├── 2013 │ ├── 2014 │ └── 2015 // Grant read-only permissions on this folder to a RAM user. └── qingdao ├── 2014 └── 2015
特定のシナリオに基づく別々の RAM ポリシーを作成して、RAM ユーザーに
myphotos/hangzhou/2015/
フォルダーの読み取り権限を付与できます。 以下に、3 つの一般的なシナリオの例を説明します。- シナリオ 1: RAM ユーザーに、フォルダー内のオブジェクトからデータを読み取る権限を付与しますが、オブジェクトを一覧表示する権限は付与しません。
このシナリオでは、RAM ユーザーはフルパスを使用してオブジェクトデータを読み取ることができます。 このポリシーをアプリケーションにアタッチすることを推奨します。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:GetObject" ], "Resource": [ "acs:oss:*:*:myphotos/hangzhou/2015/*" ] } ] }
- シナリオ 2: RAMユーザーに、OSS CLI を使用して
myphotos/hangzhou/2015/
フォルダーとフォルダー内のオブジェクトを一覧表示する権限を付与します。このシナリオでは、RAM ユーザーは OSS CLI または API 呼び出しを使用して、フォルダーからデータを読み取ることができます。 このポリシーを使用して、関連するアクセス権限をソフトウェア開発者に付与することを推奨します。
このシナリオでは、
ListObjects
権限が必要です。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:GetObject" ], "Resource": [ "acs:oss:*:*:myphotos/hangzhou/2015/*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects" ], "Resource": [ "acs:oss:*:*:myphotos" ], "Condition":{ "StringLike":{ "oss:Prefix":"hangzhou/2015/*" } } } ] }
- シナリオ 3: RAM ユーザーに、OSS コンソールを使用してフォルダーにアクセスする権限を付与します。
このシナリオでは、RAM ユーザーはビジュアル OSS クライアント (Windows のファイルエクスプローラーなど) を使用して、
myphotos/hangzhou/2015/
フォルダーにアクセスできます。以下の権限が必要です。
- すべての
バケット
を一覧表示する権限 myphotos
内のフォルダーを一覧表示する権限myphotos/hangzhou
内のフォルダーを一覧表示する権限
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", "oss:GetBucketStat", "oss:GetBucketInfo", "oss:GetBucketTagging", "oss:GetBucketAcl" ], "Resource": [ "acs:oss:*:*:*" ] }, { "Effect": "Allow", "Action": [ "oss:GetObject", "oss:GetObjectAcl" ], "Resource": [ "acs:oss:*:*:myphotos/hangzhou/2015/*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects" ], "Resource": [ "acs:oss:*:*:myphotos" ], "Condition": { "StringLike": { "oss:Delimiter": "/", "oss:Prefix": [ "", "hangzhou/", "hangzhou/2015/*" ] } } } ] }
- すべての
- シナリオ 1: RAM ユーザーに、フォルダー内のオブジェクトからデータを読み取る権限を付与しますが、オブジェクトを一覧表示する権限は付与しません。