2015-10-22 14 views
9

S3にいくつかのデータを保存し、EC2インスタンスまたは特定のIAMロールを持つ特定のユーザーのみがS3にアクセスできるようにします。残念ながら、私たちはこれを行うにはいくつかの問題があります。我々はユーザーと(のbotoを使用して)バケットにアクセスすると特定のIAMロールのS3バケットへのアクセスを制限する方法を教えてください。

私たちは、この

{ 
"Version": "2012-10-17", 
"Id": "SamplePolicy", 
"Statement": [ 

    { 
     "Sid": "Stmt1331136294179", 
     "Effect": "Deny", 
     "NotPrincipal": { 
      "AWS": [ 
       "arn:aws:iam::our-account-number:user/the-user", 

       "arn:aws:iam::our-account-number:role/the-role" 
      ] 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::the-bucket/*" 
    }, 
     { 
     "Sid": "Stmt1331136364169", 
     "Effect": "Allow", 
     "Principal": { 
      "AWS": [ 
       "arn:aws:iam::our-account-number:user/the-user", 
       "arn:aws:iam::our-account-number:role/the-role" 
      ] 
     }, 
     "Action": "s3:*", 
     "Resource": "arn:aws:s3:::the-bucket/*" 
    } 

]} 

のようなバケットのポリシーを設定し、それがローカルマシンまたは任意のEC2インスタンスから、正常に動作しますキーを押します。

しかし、我々は後のBotoからバケツにアクセスするときに我々は、私はまた、ポリシーを削除しようとしたインスタンスが正しいIAM役割を持っていることを

curl http://169.254.169.254/latest/meta-data/iam/info/ 
{ 
    "Code" : "Success", 
    "LastUpdated" : "2015-10-22T09:09:31Z", 
    "InstanceProfileArn" : "our-account-number:instance-profile/the-role", 
    "InstanceProfileId" : "instance-rpofile-id" 
} 

を確認しました

ClientError: An error occurred (AccessDenied) when calling the GetObject operation: Access Denied

を取得バケツから、それは実際に再びアクセス可能になります。 これを処理する方法はありますか?

私がここで共有したサンプルは、デバッグのために行ってきた簡略化されたバージョンです。本番環境では、KMSを使用してオブジェクトを暗号化し、そのキーにアクセスポリシーを設定する必要があります。私たちはその解決策が大好きで、できればそれを保つことを好む。

私は何回も行ったこのとの

+0

あなたは自分の役割のポリシーを表示することができますか? –

+0

'コード{ "バージョン": "2012年10月17日"、 "文":[ { "効果": "許可"、 "アクション": "S3:*"、 "リソース": "*" } ] } –

答えて

5

1つのミスはあなたが(なし/ *)バケット自体にそれを必要とするいくつかの権限のために、あなたのARN

を伴うおかげで...とあなたが必要とするいくつかのそれは内容です。

私は両方を含んで、あなたが現在持っているものを使用しようと思いますので、何かのような...

"Resource": ["arn:aws:s3:::the-bucket/*", "arn:aws:s3:::the-bucket"] 
3

問題ここでは、NotPrincipalのためにあなたが特定のセッションの役割を提供しなければならないということです。残念なことに、InstanceProfiles(またはLambda)を使用する場合、このセッションロールは動的です。 AWSはプリンシパルフィールドでワイルドカードをサポートしていないため、基本的にNotPrincipalをInstanceProfileとともに使用することは不可能です。

は、既知の制限として、それを認めて、ここでAWSのサポート応答を参照してください:https://forums.aws.amazon.com/message.jspa?messageID=740656#740656

関連する問題