AWS OpsWorks CMにおけるサービス間の混乱した代理の防止 - AWS OpsWorks

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

AWS OpsWorks CMにおけるサービス間の混乱した代理の防止

混乱した代理問題は、アクションを実行する許可を持たないエンティティが、より特権のあるエンティティにアクションを実行するように強制できるセキュリティの問題です。AWS では、サービス間でのなりすましが、混乱した代理問題を生じさせることがあります。サービス間でのなりすましは、1 つのサービス (呼び出し元サービス) が、別のサービス (呼び出し対象サービス) を呼び出すときに発生する可能性があります。呼び出し元サービスは、本来ならアクセスすることが許可されるべきではない方法でその許可を使用して、別の顧客のリソースに対する処理を実行するように操作される場合があります。これを防ぐため、AWS では、アカウント内のリソースへのアクセス権が付与されたサービスプリンシパルですべてのサービスのデータを保護するために役立つツールを提供しています。

AWS OpsWorks CM がリソースに別のサービスを提供する権限を制限するために、リソースポリシーで aws:SourceArn および aws:SourceAccount グローバル条件コンテキストキーを使用することをお勧めします。aws:SourceArn 値にアカウント ID (Amazon S3 バケット ARN など) が含まれていない場合は、両方のグローバル条件コンテキストキーを使用してアクセス許可を制限する必要があります。同じポリシーステートメントでこれらのグローバル条件コンテキストキーの両方を使用し、アカウント ID にaws:SourceArn の値が含まれていない場合、aws:SourceAccount 値と aws:SourceArn 値の中のアカウントには、同じアカウント ID を使用する必要があります。クロスサービスのアクセスにリソースを 1 つだけ関連付けたい場合は、aws:SourceArn を使用します。クロスサービスが使用できるように、アカウント内の任意のリソースを関連づけたい場合は、aws:SourceAccount を使用します。

aws:SourceArn の値は、 OpsWorks CM シェフサーバーまたはパペットサーバーの ARN である必要があります。

混乱した代理問題から保護するための最も効果的な方法は、AWS OpsWorks CMサーバーの完全な ARN を指定しながら、 aws:SourceArnグローバル条件コンテキストキーを使用することです。完全な ARN が不明な場合や、複数のサーバーARNを指定する場合には、ARN の不明な部分にワイルドカード (*) を含む aws:SourceArn グローバルコンテキスト条件キーを使用します。例えば、arn:aws:servicename:*:123456789012:* です。

次のセクションでは、AWS OpsWorks CM で aws:SourceArn および aws:SourceAccount グローバル条件コンテキストキーを使用して、混乱した代理問題を回避する方法を示します。

AWS OpsWorks CM 混乱した代理攻撃の防止

このセクションでは、AWS OpsWorks CM での混乱を招く副攻撃を防ぐ方法について説明し、AWS OpsWorks CM アクセスに使用している IAM ロールにアタッチできるアクセス権限ポリシーの例を紹介します。セキュリティのベストプラクティスとして、aws:SourceArnaws:SourceAccount の条件キーを IAM ロールとほかのサービスとの信頼関係に追加することをお勧めします。信頼関係により、AWS OpsWorks CM は AWS OpsWorks CM サーバーの作成や管理に必要なアクションを他のサービスで実行する役割を担うことができます。

信頼関係を編集するために、aws:SourceArnaws:SourceAccount 条件キーを追加するには
  1. IAM コンソール (https://console.aws.amazon.com/iam/) を開きます。

  2. 左のナビゲーションペインで、[Roles] (ロール) を選択します。

  3. 検索ボックスで、AWS OpsWorks CM へのアクセスに使用するロールを検索します。AWS 管理対象ロールは aws-opsworks-cm-service-role です。

  4. そのロールの 概要 ページで、信頼関係 タブを選択します。

  5. [信頼関係] タブで、[信頼関係の編集] を選択します。

  6. ポリシードキュメント で、aws:SourceArn または aws:SourceAccount 条件キーのうち少なくとも一つをポリシーに追加します。サービス間 (AWS Certificate Manager や Amazon EC2 など) と AWS OpsWorks CM の間の信頼関係を、より制限の厳しい特定の AWS OpsWorks CM サーバーに制限するために aws:SourceArn を使用します。さらに、aws:SourceAccount を追加すると、サービス間と AWS OpsWorks CM の間の信頼関係を、制限が緩和された特定のアカウントのサーバーに制限することもできます。次に例を示します。両方の条件キーを使用する場合、アカウント ID は同じでなければならないことに注意してください。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "opsworks-cm.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnEquals": { "aws:SourceArn": "arn:aws:opsworks-cm:us-east-2:123456789012:server/my-opsworks-server/EXAMPLEabcd-1234-efghEXAMPLE-ID" } } } ] }
  7. 条件キーを追加し終えたら、[信頼ポリシーの更新] を選択します。

aws:SourceArnaws:SourceAccount を使用して AWS OpsWorks CM サーバーへのアクセスを制限するロールのその他の例を以下に示します。

例:特定の地域の AWS OpsWorks CM サーバーへのアクセス

次のロール信頼関係ステートメントは米国東部 (オハイオ) リージョン (us-east-2) 内の AWS OpsWorks CM サーバーにアクセスします。リージョンは aws:SourceArn の ARN 値で指定されていますが、サーバー ID の値はワイルドカード (*) であることに注意してください。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "opsworks-cm.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnEquals": { "aws:SourceArn": "arn:aws:opsworks-cm:us-east-2:123456789012:server/*" } } } ] }

例: aws:SourceArn に複数のサーバー ARN の追加

次の例では、アカウント ID 123456789012 の二つの AWS OpsWorks CM サーバーからなる配列へのアクセスを制限しています。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "opsworks-cm.amazonaws.com" }, "Action": "sts:AssumeRole", "Condition": { "StringEquals": { "aws:SourceAccount": "123456789012" }, "ArnEquals": { "aws:SourceArn": [ "arn:aws:opsworks-cm:us-east-2:123456789012:server/my-chef-server/unique_ID", "arn:aws:opsworks-cm:us-east-2:123456789012:server/my-puppet-server/unique_ID" ] } } } ] }