Frank が
MFA デバイスを使用して AWS S3 バケットを
保護する方法についてご説明します

frank_enforce_mfa_other_account_access_bucket

セキュリティをさらに強化するために、他の AWS アカウントのユーザーが私の Amazon Simple Storage Service (Amazon S3) バケットにアクセスする際に、多要素認証 (MFA) デバイスを使用するよう要求したいと考えています。その方法を教えてください。

他の AWS アカウントのユーザーに MFA デバイスによる認証を要求する MFA 関連の条件をバケットポリシーに追加します。

開始する前に、他の AWS アカウントのユーザーが以下の前提条件を満たしている必要があります。

  • Amazon S3 にアクセスするためのアクセス許可が付与されていること。たとえば、AWS 管理ポリシー (AmazonS3FullAccess) が AWS Identity and Access Management (IAM) ポリシーに含まれている場合、ユーザーはこの要件を満たしています。
  • GetSessionToken を呼び出すことを許可する IAM ポリシーがアタッチされていること。
  • IAM ID で使用するようにデバイスが設定されていること。

次に、aws:MultiFactorAuthPresent 条件、または aws:MultiFactorAuthAge 条件を使用するバケットポリシーを作成します。これらの条件によって、ユーザーが MFA デバイスを使用して認証したかどうかを判断します。

たとえば、MFA デバイスを使用して認証する場合を除き、s3:PutObject、s3:PutObjectAcl、または s3:DeleteObject アクションを実行するためのアクセス許可を別のアカウントのユーザーに付与しないことを前提としています。バケットポリシーは、以下の 2 つの部分に記述することができます。

1.    1 つ目の部分では、次のように、ユーザーが MFA を使用して認証しない場合にこのアクションを明示的に拒否します (条件 "aws:MultiFactorAuthPresent": "false" となっている)。

{
    "Version": "2012-10-17",
    "Id": "Policy201612130001aa",
    "Statement": [
        {
            "Sid": "Stmt201612130001ab",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": "arn:aws:s3:::example.accounta.bucket/*",
            "Condition": {
                "BoolIfExists": {
                    "aws:MultiFactorAuthPresent": "false"
                }
            }
        },
...

2.    ポリシーの 2 つ目の部分では、次のように、ユーザーが MFA を使用して認証する場合にこのアクションを明示的に許可します (条件 "aws:MultiFactorAuthPresent": "false" となっていない)。

...
        {
            "Sid": "Stmt201612130001ac",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:root"
            },
            "Action": [
                "s3:ListBucket",
                "s3:GetObject",
                "s3:PutObject",
                "s3:PutObjectAcl",
                "s3:DeleteObject"
            ],
            "Resource": [
                "arn:aws:s3:::example.accounta.bucket",
                "arn:aws:s3:::example.accounta.bucket/*"
            ]
        }
    ]
}

同様のバケットポリシーをバケットに追加したら、ユーザーは AWS コマンドラインインターフェイス (AWS CLI) の get-session-token コマンドを実行して、バケットのリソースにアクセスするのに必要な認証情報を取得することができます。このコマンドを実行する際、ユーザーは以下を指定する必要があります。

  • MFA デバイスで生成された一時的なコード
  • デバイスのシリアル番号 (ハードウェア MFA デバイスの場合)、または Amazon リソースネーム (ARN) (ソフトウェア MFA デバイスの場合)。

注意: 認証情報を取得する別のオプションとして、ユーザーは、一時的な認証情報を環境変数としてエクスポートすることができます。


このページは役に立ちましたか? はい | いいえ

AWS サポート ナレッジ センターに戻る

サポートが必要ですか? AWS サポートセンターをご覧ください。

公開日: 2016 年 1 月 27 日

更新日: 2018 年 10 月 25 日