2017-04-12 19 views
1

私はアプリの設定をS3バケット(APIキー)のファイルに保存しています。私は特定の環境にキーを結びつける特定のVPCエンドポイント経由のアクセスのみを許可するように設定されたS3バケットを持っています。プロダクションキーがステージング環境やテスト環境で誤って使用されていました。特定のVPCまたはコンソールからS3バケットへのアクセスを許可する

しかし、時には私はこれらのキーを修正する必要があり、それは痛みです。現在、バケットポリシーはコンソールへのアクセスを妨げるので、バケツポリシーを削除し、ファイルを更新して、ポリシーを置き換えなければなりません。

コンソール、特定のVPCエンドポイントからのアクセスを許可するにはどうしたらいいですか?

私が試したし、すでに失敗してきた現在の政策、:

{ 
    "Version": "2012-10-17", 
    "Id": "Policy12345", 
    "Statement": [ 
     { 
      "Sid": "Principal-Access", 
      "Effect": "Allow", 
      "Principal": { 
       "AWS": "arn:aws:iam::account-id:root" 
      }, 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::my-keys-staging", 
       "arn:aws:s3:::my-keys-staging/*" 
      ] 
     }, 
     { 
      "Sid": "Access-to-specific-VPCE-only", 
      "Effect": "Deny", 
      "Principal": "*", 
      "Action": "s3:*", 
      "Resource": [ 
       "arn:aws:s3:::my-keys-staging", 
       "arn:aws:s3:::my-keys-staging/*" 
      ], 
      "Condition": { 
       "StringNotEquals": { 
        "aws:sourceVpce": "vpce-vpceid" 
       } 
      } 
     } 
    ] 
} 
+1

なぜ「拒否」状態になっていますか? Amazon S3のコンテンツはデフォルトではプライベートなので、他の手段(例えばIAMユーザーに与えられたもの)によって許可された権限を無効にしたい場合にのみ 'Deny'が必要です。その結果、特定のユーザー(たとえばあなた!)がバケットにアクセスするためのアクセス権を割り当てることはできません。 –

+0

@JohnRotensteinのコメントに追加するには、http://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html#AccessPolicyLanguage_Interplayを参照してください。具体的には、「デフォルトで拒否されているリクエストと明示的に拒否されているリクエストポリシーは重要であり、デフォルトでは要求は拒否されますが、これは許可によって上書きされる可能性がありますが、ポリシーが明示的に要求を拒否した場合、その拒否は無効になりません。明示的な拒否が指定されており、上書きすることはできません。 – jarmod

答えて

5

明示Denyをオーバーライドすることはできません持つ、コメントで述べたように。特定のVPCに接続されたDenyを含めることにより、要素を追加して、そのDeny文に対処することはできません。

オプション1

1つのオプションは、「もしVPCのABCから許可」にするあなたの「拒否した場合ではないVPCのABCから」ステートメントを変更することです。これにより、Allow文をポリシーに追加して、別の場所からバケットにアクセスできるようになります。

しかし、それをやって一緒に行く2つの非常に重要な注意事項があります

  1. 「汎用」S3バケットへのアクセスを持っているでしょうIAMポリシー経由のアクセス、および
  2. どれ役割を持つすべてのユーザー/前記VPCからのユーザはバケットに入ることができる。

のでAllowDenyを変更することで、あなたはもはやバケットレベルでVPC-制限はありません。

これは、組織のセキュリティ要件内にある場合とそうでない場合があります。

オプション2

代わりに、あなたは、状況に動作する追加条件を追加するために、既存のDenyを修正することができます

"Condition": { 
    "StringNotEquals": { 
    "aws:sourceVpce": "vpce-vpceid", 
    "aws:username": "your-username" 
    } 
} 

にこのタイプの条件は、要求を拒否する場合:

  1. リクエストはあなたの魔法のVPCから来ていません。
  2. 要求だから、あなたのユーザーのサインインがどこからでもバケツへのアクセスを許可されることを除いて、あなたのVPCへの要求を制限する制限を維持することができるはずユーザー名から

に来ていません

これを行うことで開いているセキュリティホールに注意してください。ユーザ名は、(a)アクセスキーが割り当てられておらず、(b)MFAが有効であることを確認してください。

関連する問題