このトピックでは、Resource Access Management (RAM) ユーザーの Object Storage Service (OSS) に対するアクセス権限を管理する方法について説明します。 RAM コンソールでは、カスタムポリシーを作成して RAM ユーザーにアタッチできます。
背景情報
RAM ユーザーの OSS 権限を管理する前に、以下のシステムポリシーを理解しておく必要があります。
AliyunOSSFullAccess:RAM ユーザーにOSSバケットを管理するためのアクセス権限を付与します。
AliyunECSReadOnlyAccess: OSSバケットに対する読み取り専用権限を付与します。
これら 2 つのシステムポリシーが業務要件を満たすことができない場合、カスタムポリシーを作成できます。
RAM ユーザーの OSS 権限を管理する前に、OSS 権限を理解しておく必要があります。 詳細については、「RAMポリシー」をご参照ください。
手順
RAMユーザーを作成します。
詳細については、「RAM ユーザーの作成」をご参照ください。
カスタムポリシーを作成します。
詳細については、「カスタマイズポリシーの作成」および「ポリシーの例」をご参照ください。
RAMユーザーにポリシーをアタッチします。
詳細については、「RAM ユーザーへの権限の付与」をご参照ください。
ポリシーの例
例1: RAMユーザーに
myphotosという名前のバケットを管理する権限を付与します。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:*", "Resource": [ "acs:oss:*:*:myphotos", "acs:oss:*:*:myphotos/*" ] } ] }例2: RAMユーザーにバケット内のリソースの一覧表示と読み取りを許可します。
OSS SDKまたはOSS CLIを使用して、
myphotosという名前のバケット内のリソースを一覧表示して読み取る権限をRAMユーザーに付与するには、次のサンプルスクリプトを使用します{ "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操作が呼び出され、バケットがパブリックかどうかが確認されます。{ "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/*" } ] }
例3: RAMユーザーに特定のIPアドレスを使用してOSSバケットにアクセスする権限を付与します。
[許可]要素にIPアドレス条件を追加します。 これにより、RAMユーザーは、192.168.0.0/16または172.16.0.1/16CIDRブロックの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アドレスが192.168.0.0/16CIDRブロックにない場合、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 コマンドを使用したポリシーよりも優先度が高くなります。 RAMユーザーが
myphotosバケットからデータを読み取ろうとしたが、IPアドレスが192.168.0.0/16CIDRブロックにない場合、OSSはRAMユーザーに必要な権限がないことを通知します。
例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ポリシーを作成して、
myphotos/hangzhou/2015/フォルダーの読み取り専用権限をRAMユーザーに付与できます。ディレクトリに基づく権限付与は、RAMポリシーの高度な機能です。 RAMポリシーの複雑さは、シナリオによって異なります。 次のシナリオでは、RAMポリシーを参照して、RAMユーザーに権限を付与できます。シナリオ1: フォルダー内のオブジェクトからデータを読み取る権限をRAMユーザーに付与しますが、オブジェクトを一覧表示する権限はRAMユーザーに付与しません。
このシナリオでは、RAM ユーザーはフルパスを使用してオブジェクトデータを読み取ることができます。 このポリシーをアプリケーションにアタッチすることを推奨します。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:GetObject" ], "Resource": [ "acs:oss:*:*:myphotos/hangzhou/2015/*" ] } ] }シナリオ2: OSS CLIを使用して
myphotos/hangzhou/2015/フォルダーにアクセスし、フォルダー内のオブジェクトを一覧表示する権限をRAMユーザーに付与します。このシナリオでは、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/*" ] } } } ] }