前回の実験「IAMストラテジー」では、一部のストラテジーをIAMユーザーに割り当てて、これらのユーザーが特定のリソースにのみ特定のアクセス許可を付与できることを学びました。また、ストラテジーでは、変数を使用して各アイテムを動的に制御することもできます。 .IAMユーザー向けの戦略。ただし、一部のシナリオでは、特定のリソースにアクセス許可を付与する必要があります。たとえば、S3バケットがある場合、このバケット/バケット内のオブジェクトを特定のAWSアカウントまたは特定のAWSアカウントと共有する必要があります。IAMユーザー、この場合、リソースベースのポリシーを作成する必要があります。
S3バケットポリシーとIAMユーザーポリシーは非常によく似ており、どちらもJSONを介して定義されています。違いは、S3バケットポリシーでは、プリンシパル(ステートメント内の操作とリソースへのアクセスを許可されているアカウントまたはユーザー)を指定する必要があることです。ストレージ内
バケットポリシーでは、プリンシパルはユーザー、アカウント、サービス、またはアクセス所有者であるその他のエンティティです)、IAMユーザーポリシーはユーザーに関連付けられており、プリンシパルを指定する必要はありません。
以下は、S3バケットポリシーの例です。
{
"Version":"2012-10-17",
"Id":"ExamplePolicy01",
"Statement":[
{
"Sid":"ExampleStatement01",
"Effect":"Allow",
"Principal":{
"AWS":"arn:aws-cn:iam::Account-ID:user/Dave"
},
"Action":[
"s3:GetObject",
"s3:GetBucketLocation",
"s3:ListBucket"
],
"Resource":[
"arn:aws-cn:s3:::examplebucket/*",
"arn:aws-cn:s3:::examplebucket"
]
}
]
}
実験を通してやってみましょう。
タスク1:IAMポリシーを作成する
S3バケット内のすべてのオブジェクトをパブリックにするIAMポリシーを作成して、誰でもS3バケット内のオブジェクトにアクセスする権限を持つようにします。デフォルトでは、S3バケット内のオブジェクトはプライベートであり、パブリックにすることはできないため、最初に削除する必要があります。開示を禁止する戦略。
操作は次のとおりです。最初にこの例のawsdemo2018などのバケットを見つけ、次に[権限]インターフェイスで[パブリックアクセス設定]-[パブリックバケットポリシーの管理]-[編集]をクリックし、[新規ブロック]をオフにします。パブリックバケットポリシー」および「バケットにパブリックポリシーがある場合は、パブリックアクセスとクロスアカウントアクセスをブロックする」、保存する
[バケットポリシー]をクリックして、s3:GetObject権限をバケットに追加します。ポリシーの[リソース]フィールドで指定するバケットは、現在のバケット名と同じである必要があることに注意してください。戦略の例は次のとおりです(awsdemo2018はこの実験のバケットの名前です):
{
"Version":"2012-10-17",
"Statement":[
{
"Sid":"AddPerm",
"Effect":"Allow",
"Principal":"*",
"Action":[
"s3:GetObject"
],
"Resource":[
"arn:aws-cn:s3:::awsdemo2018/*"
]
}
]
}
保存が成功すると、バケットが公開されたという警告が表示されます。
次に、現在のバケット内のファイルを見つけるか、ファイルを現在のバケットにアップロードし、[リンク]をクリックすると、インターネット上のどこからでもS3バケット内のオブジェクトにアクセスできます。
現在のポリシーでは、リンクを取得できる限り、誰でもバケット内のオブジェクトにアクセスできます。たとえば、アプリケーションで作業しているときにアンチホットリンク機能を実装する場合、現在のWebサイトの画像のみを参照でき、他のWebサイトの画像は参照できない場合は、バケットポリシーのCondition関数を使用できます。 HTTPリクエストのリファラーを制限します。
例:
web.pngなどの画像をawsdemo2018バケットにアップロードします。さらに、別のバケットawstemp2018を作成し、上記の手順と戦略を参照してこのバケットを公開し、ローカルで新しいファイルtest.htmlを作成します。ファイルの内容は次のとおりです
。test.htmlファイルをバケットにアップロードします。awstemp2018。
アンチホットリンクデザインでは、awsdemo2018バケットにバケットポリシーを設定でき、リクエストされた場合にのみhttps://s3.cn-north-1.amazonaws.com.cn/からのリクエストにこの画像へのアクセスを許可します。リファラーは含まれていません。エラーが報告されます。具体的な操作は次のとおりです
。awsdemo2018バケットポリシーで、条件を追加し、StringLikeをaws:Refererに設定し、その後にソースステーションアドレスを設定します。ポリシーの例は次のとおりです。
{
"Version":"2012-10-17",
"Id":"http referer policy example",
"Statement":[
{
"Sid":"Allow get requests originating from www.example.com and example.com.",
"Effect":"Allow",
"Principal":"*",
"Action":"s3:GetObject",
"Resource":"arn:aws-cn:s3:::awsdemo2018/*",
"Condition":{
"StringLike":{
"aws:Referer":"https://s3.cn-north-1.amazonaws.com.cn/*"
}
}
}
]
}
ポリシーを保存した後、awsdemo2018バケットの下の画像web.pngに直接アクセスすると、アクセス拒否エラーが発生します。
ただし、awstemp2018バケットの下のtest.html Webページからpng画像をロードすることで、正常にアクセスできます。
分析:
パブリックネットワークからバケットawstemp2018内のtest.htmlファイルにアクセスする場合(ファイルリンクはhttps://s3.cn-north-1.amazonaws.com.cn/awstemp2018/test.html)、 、このファイルは、awsdemo2018バケットにある画像web.pngを読み込み、リクエスト時にリファラーヘッダーを表示します。リファラー値は、現在のtest.htmlが配置されているウェブサイトです:https://s3.cn-north- 1. amazonaws.com.cn/で、デバッグ機能を使用して、ポリシーで条件を設定したことがわかります。このWebサイトは、設定した条件と一致しているため、イメージをロードできます。ただし、この画像に直接アクセスすると、リクエストにリファラーがないため、エラーが報告されます。
実稼働環境では、リファラーを独自のドメイン名として設定できるため、他の誰もS3バケット内のファイルを直接盗むことはできません。
S3バケットポリシーには、訪問者のIPアドレスに基づくパーミッション制御や、特定のVPCでのリソースのみの承認など、多くの高度な機能もあります。この実験が類推によって推論を引き出すことができることを願っています。これについての詳細は、https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/dev/example-bucket-policies.htmlを参照してください。
詳細なビデオチュートリアルリファレンス:https://edu.51cto.com/center/course/lesson/index?id = 533835)