96

AWS IAM ユーザー ポリシーをプログラムで追加および削除していますが、それらのポリシーの適用結果に一貫性がありません。

たとえば、これは成功する場合と失敗する場合があります (私は Java 1.6.6 SDK を使用しています)。

  1. 特定のバケットから読み取ることができるユーザーから開始します
  2. ユーザー ポリシーをクリアします (ポリシーを一覧表示し、それぞれに対して「deleteUserPolicy」を呼び出します)。
  3. ユーザーのユーザー ポリシーがなくなるまで待ちます (空のセットが返されるまで「listUserPolicies」を呼び出します)。
  4. バケットから読み取ろうとします (これは失敗するはずです)

#3 と #4 の間にブレークポイントを置いて数秒待つと、ユーザーはバケットから読み取ることができなくなります。ブレークポイントを削除すると、ユーザーはバケットから読み取ることができますが、これは間違っています。

(これは、ポリシーを追加してからリソースにアクセスする場合にも一貫性がありません)

ポリシーの変更が IAM システムだけでなく、コンポーネント (S3、SQS など) に影響を与えた時期を知りたいです。これから領収書または承認を得る方法はありますか?それとも、ある程度の待ち時間がありますか?

ポリシー適用の内部に関する文書はありますか?

(参考までに、 https: //forums.aws.amazon.com/thread.jspa?threadID= 140383&tstart=0 から質問をコピーしました)

4

2 に答える 2

86

IAM の FAQでは「ほぼすぐに」というフレーズが 5 回使用されていますが、これはもちろん多少主観的なものです。

AWS はグローバルに分散されたシステムであるため、変更を反映する必要があり、システムは全体として、即時の一貫性ではなく、可用性と分断耐性を優先するように設計されているようです。

あなたがそれを考慮したかどうかはわかりませんが、フローのステップ 4 で実際に一連の合格、不合格、合格、合格、不合格、不合格、不合格、失敗... S3 のさまざまなアクションの混合整合性モデルによって証明されるように、バケットもバケット内のオブジェクトも実際には単一の場所にある単一のものではないため、新しいオブジェクトはすぐに一貫性があり、上書きと削除は最終的には一貫性があります。一貫性...したがって、ポリシーの適用自体がほぼ確実に分散イベントであるため、ポリシーがバケットまたはオブジェクトに「影響を与えた」または持たないという概念は、完全に意味のある概念ではありません。

そのようなポリシーの適用を確認するには、AWS が (少なくとも間接的に) そのポリシーの複製されたコピーを持つすべてのエンティティに問い合わせて、現在のバージョンがあるかどうかを確認する機能を公開する必要があります... これは潜在的に非現実的またはS3 と同じくらい大規模なシステムでは控えめに言っても扱いにくく、2 兆という驚異的なオブジェクトを超えて成長し、1 秒あたり 110 万リクエストを超えるピーク負荷を処理します

このフォーラム投稿に対する公式の AWS の回答は、詳細情報を提供します。

IAM エンティティに加えた変更はすぐに IAM API に反映されますが、情報がグローバルに反映されるまでにはかなりの時間がかかる場合があります。ほとんどの場合、行った変更は 1 分以内に反映されます。ネットワークの状態によって遅延が増加する場合があり、一部のサービスでは、有効期限が切れて置き換えられるまでに時間がかかる特定の資格情報以外の情報がキャッシュされる場合があります。

その間に何をすべきかについての付随する答えは、「もう一度やり直してください」でした。

ほとんどの場合、変更はすぐに反映されるため、最初に少し遅れてからループを再試行することをお勧めします。スリープすると、ほとんどの場合、コードの待機時間が長すぎて、まれな例外を処理するのに十分な時間がない可能性があります。

複製システムのパフォーマンスを積極的に監視しています。ただし、S3 と同様に、特定の上限ではなく、結果整合性のみを保証します。

于 2013-11-23T01:14:24.477 に答える