従業員、システム、アプリケーションなどのユーザーの権限、およびユーザーがアクセスできるリソースを管理するために、Resource Access Management (RAM) ポリシーを設定できます。たとえば、特定のバケットに保存されているオブジェクトをリストおよび読み取ることをユーザーに許可する RAM ポリシーを作成できます。
RAM ユーザーにカスタムポリシーをアタッチする
カスタムポリシーを作成します。
実際のシナリオに基づいて、このトピックの RAM ポリシーの一般的な例を参照し、スクリプトを使用してカスタムポリシーを作成できます。詳細については、「カスタムポリシーを作成する」をご参照ください。
RAM ポリシーには、バージョン番号とステートメントが含まれています。各ステートメントには、Effect、Action、Resource、および Condition の各要素が含まれています。Condition 要素はオプションです。詳細については、「RAM ポリシー」をご参照ください。
重要Object Storage Service (OSS) では、Resource 要素をアスタリスク (*) ワイルドカード文字に設定して、特定の種類のリソースを指定できます。Resource 要素の値は、
acs:oss:{region}:{bucket_owner}:{bucket_name}/{object_name}の形式です。たとえば、Resource 要素がacs:oss:*:*:mybucket/*に設定されている場合、mybucket バケット内のすべてのリソースが指定されます。Resource 要素がacs:oss:*:*:mybucket/abc*.txtに設定されている場合、mybucket バケット内で名前が abc というプレフィックスを含むすべての .txt オブジェクトが指定されます。カスタムポリシーを RAM ユーザーにアタッチします。
手順 1 で作成した RAM ポリシーを RAM ユーザーにアタッチします。詳細については、「RAM ユーザーに権限を付与する」をご参照ください。
RAM ポリシーを作成した後、ビジネス要件に基づいて、さまざまな ユーザー に付与できます。ポリシーは複数のユーザーで共有できます。または、同じ権限要件を持つ グループ にポリシーをアタッチして、グループ内のすべてのユーザーがポリシーで定義された権限を継承するようにすることもできます。
例 1:RAM ユーザーにバケットの完全制御を承認する
次の RAM ポリシーは、RAM ユーザーに mybucket バケットに対する完全な制御を許可します。
データセキュリティを確保するために、モバイルアプリで使用されるバケットに対する完全な制御を RAM ユーザーに付与しないことをお勧めします。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": [
"acs:oss:*:*:mybucket",
"acs:oss:*:*:mybucket/*"
]
}
]
}例 2:RAM ユーザーがバケット内の複数のオブジェクトを削除することを禁止する
次の RAM ポリシーは、RAM ユーザーが mybucket バケット内で名前が abc というプレフィックスを含むすべての .txt オブジェクトを削除することを禁止します。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:DeleteObject" // オブジェクトの削除
],
"Resource": [
"acs:oss:*:*:mybucket/abc*.txt"
]
}
]
}例 3:RAM ユーザーがバケット内のオブジェクトをリストおよび読み取ることを承認する
OSS SDK または ossutil を使用して、RAM ユーザーがバケット内のオブジェクトをリストおよび読み取ることを承認する
次の RAM ポリシーは、OSS SDK または ossutil を使用して、RAM ユーザーに
mybucketバケット内のすべてのオブジェクトをリストおよび読み取ることを許可します。説明ListObjects 操作の Resource 要素は、目的のバケット内のすべてのリソースを指定する必要があります。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": "oss:ListObjects", // オブジェクトのリスト "Resource": "acs:oss:*:*:mybucket" }, { "Effect": "Allow", "Action": "oss:GetObject", // オブジェクトの取得 "Resource": "acs:oss:*:*:mybucket/*" } ] }OSS コンソールを使用して、RAM ユーザーがバケット内のオブジェクトをリストおよび読み取ることを承認する
次の RAM ポリシーは、OSS コンソールを使用して、RAM ユーザーに
mybucketバケット内のすべてのオブジェクトをリストおよび読み取ることを許可します。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", // バケットのリスト "oss:GetBucketStat", // バケット統計の取得 "oss:GetBucketInfo", // バケット情報の取得 "oss:GetBucketTagging", // バケットタグの取得 "oss:GetBucketLifecycle", // バケットライフサイクルの取得 "oss:GetBucketWorm", // バケット WORM の取得 "oss:GetBucketVersioning", // バケットバージョニングの取得 "oss:GetBucketAcl" // バケット ACL の取得 ], "Resource": "acs:oss:*:*:*" }, { "Effect": "Allow", "Action": [ "oss:ListObjects", // オブジェクトのリスト "oss:GetBucketAcl" // バケット ACL の取得 ], "Resource": "acs:oss:*:*:mybucket" }, { "Effect": "Allow", "Action": [ "oss:GetObject", // オブジェクトの取得 "oss:GetObjectAcl" // オブジェクト ACL の取得 ], "Resource": "acs:oss:*:*:mybucket/*" } ] }
例 4:RAM ユーザーがバケットを削除することを禁止する
次の RAM ポリシーは、RAM ユーザーが mybucket バケットを削除することを禁止します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:*",
"Resource": [
"acs:oss:*:*:mybucket",
"acs:oss:*:*:mybucket/*"
]
},
{
"Effect": "Deny",
"Action": [
"oss:DeleteBucket" // バケットの削除
],
"Resource": [
"acs:oss:*:*:mybucket"
]
}
]
}例 5:RAM ユーザーがバケット内の複数のディレクトリにアクセスすることを承認する
この例では、mybucket という名前のバケットを使用して写真を保存します。バケットには、写真が撮影された場所に基づいて名前が付けられた複数のディレクトリが含まれています。各ディレクトリには、写真が撮影された年基づいて名前が付けられたサブディレクトリが含まれています。
mybucket[Bucket]
├── beijing
│ ├── 2014
│ └── 2015
├── hangzhou
│ ├── 2013
│ ├── 2014
│ └── 2015
└── qingdao
├── 2014
└── 2015たとえば、mybucket/hangzhou/2014/ ディレクトリと mybucket/hangzhou/2015/ ディレクトリに対する読み取り専用権限を RAM ユーザーに付与するとします。ディレクトリレベルの承認は RAM ポリシーの高度な機能であり、実際のシナリオに基づいてさまざまな複雑さのレベルの RAM ポリシーが必要です。次の RAM ポリシーはさまざまなシナリオに適しており、参照用にのみ提供されています。
mybucket/hangzhou/2014/ディレクトリとmybucket/hangzhou/2015/ディレクトリ内のオブジェクトに対する読み取り専用権限を RAM ユーザーに付与するこのシナリオでは、RAM ユーザーはアクセスできるオブジェクトの完全なパスを知っています。オブジェクトの完全なパスを使用してオブジェクトにアクセスすることを RAM ユーザーに承認するように RAM ポリシーを設定することをお勧めします。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:GetObject" // オブジェクトの取得 ], "Resource": [ "acs:oss:*:*:mybucket/hangzhou/2014/*", "acs:oss:*:*:mybucket/hangzhou/2015/*" ] } ] }RAM ユーザーに
mybucket/hangzhou/2014/ディレクトリとmybucket/hangzhou/2015/ディレクトリにアクセスし、ossutil を使用してディレクトリ内のオブジェクトをリストする権限を付与するこのシナリオでは、RAM ユーザーはディレクトリ内のオブジェクトを知らず、ossutil を使用するか、API 操作を呼び出してディレクトリ内のオブジェクトに関する情報を取得できます。この場合、ポリシーで
ListObjects権限を指定する必要があります。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:GetObject" // オブジェクトの取得 ], "Resource": [ "acs:oss:*:*:mybucket/hangzhou/2014/*", "acs:oss:*:*:mybucket/hangzhou/2015/*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects" // オブジェクトのリスト ], "Resource": [ "acs:oss:*:*:mybucket" ], "Condition":{ "StringLike":{ "oss:Prefix": [ "hangzhou/2014/*", "hangzhou/2015/*" ] } } } ] }RAM ユーザーに OSS コンソールを使用してディレクトリにアクセスする権限を付与する
このシナリオでは、RAM ユーザーは OSS コンソールを使用して、ルートディレクトリからレベル別に
mybucket/hangzhou/2014/ディレクトリとmybucket/hangzhou/2015/ディレクトリにアクセスできます。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", // バケットのリスト "oss:GetBucketStat", // バケット統計の取得 "oss:GetBucketInfo", // バケット情報の取得 "oss:GetBucketTagging", // バケットタグの取得 "oss:GetBucketLifecycle", // バケットライフサイクルの取得 "oss:GetBucketWorm", // バケット WORM の取得 "oss:GetBucketVersioning", // バケットバージョニングの取得 "oss:GetBucketAcl" // バケット ACL の取得 ], "Resource": [ "acs:oss:*:*:*" ] }, { "Effect": "Allow", "Action": [ "oss:GetObject", // オブジェクトの取得 "oss:GetObjectAcl" // オブジェクト ACL の取得 ], "Resource": [ "acs:oss:*:*:mybucket/hangzhou/2014/*", "acs:oss:*:*:mybucket/hangzhou/2015/*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects" // オブジェクトのリスト ], "Resource": [ "acs:oss:*:*:mybucket" ], "Condition": { "StringLike": { "oss:Delimiter": "/", "oss:Prefix": [ "", "hangzhou/", "hangzhou/2014/*", "hangzhou/2015/*" ] } } } ] }
例 6:RAM ユーザーがバケットからオブジェクトを削除することを禁止する
次の RAM ポリシーは、RAM ユーザーが mybucket バケットからオブジェクトを削除することを禁止します。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:DeleteObject" // オブジェクトの削除
],
"Resource": [
"acs:oss:*:*:mybucket/*"
]
}
]
}例 7:RAM ユーザーが特定のタグを持つオブジェクトにアクセスすることを禁止する
次の RAM ポリシーには、examplebucket バケットに保存され、status:ok タグと key1:value1 タグが付いているオブジェクトへの RAM ユーザーのアクセスを禁止する Deny ステートメントが含まれています。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny",
"Action": [
"oss:GetObject" // オブジェクトの取得
],
"Resource": [
"acs:oss:*:174649585760xxxx:examplebucket/*"
],
"Condition": {
"StringEquals": {
"oss:ExistingObjectTag/status":"ok",
"oss:ExistingObjectTag/key1":"value1"
}
}
}
]
}例 8:RAM ユーザーが特定の IP アドレスから OSS にアクセスすることを承認する
特定の IP アドレスからのアクセスを許可する
次の RAM ポリシーは、
mybucketバケット内のすべてのオブジェクトを、Allowステートメントで指定された192.168.0.0/16CIDR ブロックと198.51.100.0/24CIDR ブロック内の IP アドレスからのみ読み取ることを RAM ユーザーに許可します。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", // バケットのリスト "oss:GetBucketStat", // バケット統計の取得 "oss:GetBucketInfo", // バケット情報の取得 "oss:GetBucketTagging", // バケットタグの取得 "oss:GetBucketAcl" // バケット ACL の取得 ], "Resource": [ "acs:oss:*:*:*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects", // オブジェクトのリスト "oss:GetObject" // オブジェクトの取得 ], "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ], "Condition":{ "IpAddress": { "acs:SourceIp": ["192.168.0.0/16", "198.51.100.0/24"] } } } ] }特定の IP アドレスからのアクセスを拒否する
次の RAM ポリシーは、
Denyステートメントで指定された192.168.0.0/16CIDR ブロックにない IP アドレスから OSS リソースにアクセスすることを RAM ユーザーに禁止します。{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:ListBuckets", // バケットのリスト "oss:GetBucketStat", // バケット統計の取得 "oss:GetBucketInfo", // バケット情報の取得 "oss:GetBucketTagging", // バケットタグの取得 "oss:GetBucketAcl" // バケット ACL の取得 ], "Resource": [ "acs:oss:*:*:*" ] }, { "Effect": "Allow", "Action": [ "oss:ListObjects", // オブジェクトのリスト "oss:GetObject" // オブジェクトの取得 ], "Resource": [ "acs:oss:*:*:mybucket", "acs:oss:*:*:mybucket/*" ] }, { "Effect": "Deny", "Action": "oss:*", "Resource": [ "acs:oss:*:*:*" ], "Condition":{ "NotIpAddress": { "acs:SourceIp": ["192.168.0.0/16"] } } } ] }説明RAM ポリシーでは、Deny ステートメントは Allow ステートメントよりも優先されます。したがって、RAM ユーザーが
192.168.0.0/16CIDR ブロックにない IP アドレスから mybucket バケットのデータを読み取ろうとすると、RAM ユーザーに必要な権限がないことを示すエラーメッセージが返されます。
例 9:RAM または STS を使用して、ユーザーに OSS リソースへのアクセスを許可する
RAM または Security Token Service (STS) を使用して、IP アドレスが 192.168.0.1 のユーザーに、OSS SDK for Java のクライアントから次の操作を実行する権限を付与します。
examplebucket バケット内で、名前に
fooというプレフィックスが含まれるオブジェクトをリストするexamplebucket バケット内で、名前に
fileというプレフィックスが含まれるオブジェクトに対して、アップロード、ダウンロード、および削除操作を実行する権限をユーザーに付与する
次の RAM ポリシーは、上記のアクセス管理要件を満たすことができます。
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:GetBucketAcl", // バケット ACL の取得
"oss:ListObjects" // オブジェクトのリスト
],
"Resource": [
"acs:oss:*:177530505652xxxx:mybucket"
],
"Effect": "Allow",
"Condition": {
"StringEquals": {
"acs:UserAgent": "java-sdk",
"oss:Prefix": "foo"
},
"IpAddress": {
"acs:SourceIp": "192.168.0.1"
}
}
},
{
"Action": [
"oss:PutObject", // オブジェクトの配置
"oss:GetObject", // オブジェクトの取得
"oss:DeleteObject" // オブジェクトの削除
],
"Resource": [
"acs:oss:*:177530505652xxxx:mybucket/file*"
],
"Effect": "Allow",
"Condition": {
"StringEquals": {
"acs:UserAgent": "java-sdk"
},
"IpAddress": {
"acs:SourceIp": "192.168.0.1"
}
}
}
]
}例 10:ACL 構成によるバケットおよびオブジェクトへのパブリックアクセスを禁止する
次の例は、バケットとオブジェクトの ACL へのパブリックアクセスを禁止し、OSS データセキュリティを強化する方法を示しています。
{
"Version": "1",
"Statement": [
{
"Effect": "Deny", // 拒否
"Action": [
"oss:PutBucket", // バケットの作成
"oss:PutBucketAcl" // バケット ACL の設定
],
"Resource": "*", // すべてのリソース
"Condition": {
"StringNotEquals": { // 文字列が一致しない
"oss:x-oss-acl": "private" // x-oss-acl が private でない
}
}
},
{
"Effect": "Deny", // 拒否
"Action": [
"oss:PutObject", // オブジェクトの配置
"oss:PutObjectAcl" // オブジェクト ACL の設定
],
"Resource": "*", // すべてのリソース
"Condition": {
"StringNotEquals": { // 文字列が一致しない
"oss:x-oss-object-acl": [ // x-oss-object-acl が private または default でない
"private", // 非公開
"default" // デフォルト
]
}
}
}
]
}例 11:RAM ユーザーが IMM を使用することを承認する
次の RAM ポリシーは、RAM ユーザーに Intelligent Media Management (IMM) を使用する権限を付与します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"oss:GetObject", // オブジェクトの取得
"oss:PutObject", // オブジェクトの配置
"oss:PostProcessTask", // 後処理タスクの投稿
"oss:ProcessImm" // IMM の処理
],
"Resource": "*"
},
{
"Action": [
"imm:CreateOfficeConversionTask", // Office 変換タスクの作成
"imm:GetWebofficeURL" // Weboffice URL の取得
],
"Resource": "*",
"Effect": "Allow"
},
{
"Effect": "Allow",
"Action": "ram:PassRole", // ロールの受け渡し
"Resource": "acs:ram:*:*:role/aliyunimmdefaultrole"
}
]
}例 12:RAM ユーザーにバケットのストレージ冗長性タイプの変更を許可する
RAM ユーザーにバケットのストレージ冗長性タイプを変更する権限を付与する
次の RAM ポリシーは、RAM ユーザーに mybucket バケットのストレージ冗長性タイプを変更する権限を付与します。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:CreateBucketDataRedundancyTransition", // バケットデータ冗長性遷移の作成 "oss:GetBucketDataRedundancyTransition", // バケットデータ冗長性遷移の取得 "oss:ListBucketDataRedundancyTransition", // バケットデータ冗長性遷移のリスト "oss:DeleteBucketDataRedundancyTransition" // バケットデータ冗長性遷移の削除 ], "Resource": "acs:oss:*:*:mybucket" } ] }RAM ユーザーにすべてのバケットのストレージ冗長性タイプを変更する権限を付与する
重要次の RAM ポリシーは、RAM ユーザーに Alibaba Cloud アカウント内のすべてのバケットのストレージ冗長性タイプを変更する権限を付与します。RAM ユーザーに権限を付与する際には注意が必要です。
{ "Version": "1", "Statement": [ { "Effect": "Allow", "Action": [ "oss:CreateBucketDataRedundancyTransition", // バケットデータ冗長性遷移の作成 "oss:GetBucketDataRedundancyTransition", // バケットデータ冗長性遷移の取得 "oss:ListBucketDataRedundancyTransition", // バケットデータ冗長性遷移のリスト "oss:DeleteBucketDataRedundancyTransition" // バケットデータ冗長性遷移の削除 ], "Resource": "acs:oss:*:*:*" } ] }
例 13:RAM ユーザーに OSS リソースプランの注文を許可する
次の RAM ポリシーは、RAM ユーザーに OSS リソースプランの注文を許可します。
RAM ユーザーが OSS リソースプランを注文した後、ユーザーは RAM ユーザーが属する Alibaba Cloud アカウントの所有者に連絡して注文の支払いを行う必要があります。RAM ユーザーに注文の支払いを許可するには、Alibaba Cloud アカウントの所有者が bss:PayOrder 権限を RAM ユーザーに付与する必要があります。bss:PayOrder は高リスクの権限です。必要な場合を除き、RAM ユーザーにこの権限を付与しないことをお勧めします。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:CreateOrder", // 注文の作成
"Resource": "acs:oss:*:*:*"
}
]
}例 14:RAM ユーザーが OSS をアクティブ化することを承認する
次の RAM ポリシーは、RAM ユーザーに OSS をアクティブ化する権限を付与します。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": "oss:ActivateProduct",
"Resource": "acs:oss:*:*:*"
}
]
}例 15:RAM ユーザーに特定のタグが付いたバケットの読み取りと書き込みを許可する
次の RAM ポリシーは、RAM ユーザーに特定のタグが付いたバケットの読み取りと書き込みを許可します。タグキーは key1、タグ値は value1 です。
{
"Version": "1",
"Statement": [
{
"Action": [
"oss:ListBuckets", // バケットのリスト
"oss:GetBucketStat", // バケット統計の取得
"oss:GetBucketInfo", // バケット情報の取得
"oss:GetBucketAcl", // バケット ACL の取得
"oss:ListObjects", // オブジェクトのリスト
"oss:PutObject", // オブジェクトの配置
"oss:GetObject" // オブジェクトの取得
],
"Resource": [
"acs:oss:*:*:*"
],
"Effect": "Allow",
"Condition": {
"StringEquals": {
"oss:BucketTag/key1": "value1"
}
}
}
]
}承認後、このポリシーにより、RAM ユーザーは key1=value1 タグが付いた OSS バケットに対して特定の操作を実行できます。
OSS SDK または ossutil を使用して
ListBucketsリクエストを開始する場合、結果をフィルタリングするためにタグパラメータ (例:tag-key=key1、tag-value=value1) を含める必要があります。ポリシーが正しく構成されている場合、特定のタグが付いたバケットのみが返されます。タグパラメータの添付がサポートされていない OSS コンソールで
ListBucketsリクエストを検証する場合、ポリシー条件 (oss:BucketTag/key1=value1) が満たされないため、リクエストは失敗し、権限が不十分であるというメッセージが表示されます。他の操作 (例:
PutObject、GetObject) も同様にこのタグ付け要件によって制限されます。ターゲットバケットはkey1=value1タグ付け基準を満たしている必要があります。そうでない場合、リクエストは拒否されます。