AWS S3バケットにアクセスするためのIPアドレスをホワイトリストする方法
ネットワーク内のサーバーに内部のS3バケットへのアクセスを許可したいが、その中のオブジェクトをインターネット上で公開したくない場合、バケットポリシーでホワイトリストを作成することは、内部バケットからファイルをダウンロードできるようにするための簡単な解決策です。
インターネット経由でS3バケットにアクセスする
LinuxからS3とインターフェースするための最も理想的な方法は、AWS CLIをインストールして、次のようなコマンドを実行することです。
get-objectファイルを直接取得するか、お好みの言語のAPIやSDKを使用してください。EC2で実行している場合、EC2インスタンスのIAMロールを更新し、バケットへのアクセスを許可するポリシーをアタッチするのはかなり簡単です。AWS CLIがインストールされている限り、キーを管理せずにインスタンスロールで使用することができます。
しかし、EC2から、またはロールを引き受けることができる他のAWSリソースからS3にアクセスしていない場合、キーを管理する必要があります。AWS CLIは認証にIDとシークレットを必要とし、これはデプロイメントの複雑さに応じて問題になる場合があります。ビルドスクリプトにそれをハードコーディングしたくなるかもしれませんが、それは乱雑な解決策であり、推奨されません。バケットやオブジェクトを公開に設定することもできますが、他の人にダウンロードしてほしくない機密データにはうまく機能しません。
最良の選択肢は、IP アドレスをホワイトリストに登録することです。これによってアクセスが暗黙的に管理されます。リクエストがサーバーの IP アドレスから来る場合、それは許可されます。これは、バケットがプライベートサブネットで実行されているかのように、そのエンドポイント URL からファイルを非常に簡単にダウンロードするために使用できます(ただし、インターネット越しに行われています)。
https://s3.amazonaws.com/bucketname/object.zipただし、バケットポリシーが設定されていない場合、403エラーが発生します。バケットの設定に移動し、[権限] > [バケットポリシー]の下でバケットポリシーエディターを見つけてください。
次のポリシーを入力し、IPアドレスとバケット名を自分のものに置き換えてください:
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::bucketname/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.168.1.1",
"192.168.1.2",
"192.168.1.3"
]
}
}
}
]
}
これはバケットからファイルをダウンロードすること(GetObject)を許可するだけです。他のAPIアクションを有効にしたい場合は、AWSのバケットポリシージェネレーターを使用して特定のものに設定するか、ワイルドカードでバケットのすべてのアクションを許可することができます(たぶん良い考えではありません)。
{
"Version": "2012-10-17",
"Id": "S3PolicyId1",
"Statement": [
{
"Sid": "IPAllow",
"Effect": "Allow",
"Principal": "*",
"Action": "s3:*",
"Resource": "arn:aws:s3:::bucketname/*",
"Condition": {
"IpAddress": {
"aws:SourceIp": [
"192.168.1.1",
"192.168.1.2",
"192.168.1.3"
]
}
}
}
]
}

