プリンシパル
Principal
エレメントは、リソースへのアクセスを許可または拒否するユーザー、アカウント、サービス、または他のエンティティを指定します。Principal
を指定する例を以下に示します。詳細については、IAM ユーザーガイドのプリンシパルプリンシパル を参照してください。
AWS アカウントに許可を付与する
AWS アカウントに許可を付与するには、以下の形式を使用してアカウントを指定します。
"AWS":"
account-ARN
"
次に例を示します。
"Principal":{"AWS":"arn:aws:iam::
AccountIDWithoutHyphens
:root"}
"Principal":{"AWS":["arn:aws:iam::
AccountID1WithoutHyphens
:root","arn:aws:iam::AccountID2WithoutHyphens
:root"]}
Amazon S3 では、正規ユーザー ID (難読化された AWS アカウント ID) もサポートされています。以下の形式を使用して、この ID を指定できます。
"CanonicalUser":"
64-digit-alphanumeric-value
"
次に例を示します。
"Principal":{"CanonicalUser":"
64-digit-alphanumeric-value
"}
アカウントの正規ユーザー ID を検索する方法については、アカウントの正規ユーザー ID の検索 を参照してください。
重要
ポリシーで正規ユーザー ID を使用する場合、Amazon S3 によって正規ユーザー ID が対応する AWS アカウント ID に変更される場合があります。これら両方の ID は同じアカウントを特定するため、ポリシーに影響を与えません。
IAM ユーザーにアクセス許可を付与する
アカウントの IAM ユーザーにアクセス許可を付与するには、"AWS":"
の名前と値のペアを指定する必要があります。user-ARN
"
"Principal":{"AWS":"arn:aws:iam::
account-number-without-hyphens
:user/username
"}
ステップバイステップの手順を説明する詳細な例については、例 1: バケット所有者がユーザーにバケットのアクセス許可を付与する および 例 3: バケット所有者が自分の所有していないオブジェクトに対するアクセス許可を付与する を参照してください。
注記
バケットポリシーを更新した後に IAM ID を削除すると、バケットポリシーのプリンシパル要素には ARN の代わりに一意の ID が表示されます。これらの一意な ID は再利用されることがないため、すべてのポリシーステートメントから一意の ID を持つプリンシパルを安全に削除できます。一意の ID の詳細については、IAM ユーザーガイドの「IAM ID」を参照してください。
匿名アクセス許可を付与する
匿名アクセスと呼ばれるアクセス許可を全員に付与するには、Principal
の値としてワイルドカード ("*"
) を設定します。例えば、バケットを Web サイトとして設定する場合、以下のように、バケット内のすべてのオブジェクトを公開し、誰でもアクセスできるようにすることができます。
"Principal":"*"
"Principal":{"AWS":"*"}
リソースベースのポリシーで、"Principal": "*"
効果と共に Allow
を使用すると、AWS にサインしていなくても、誰でもリソースにアクセスできるようになります。
リソースベースのポリシーで、Allow
効果と共に "Principal" : { "AWS" : "*" }
を使用すると、同じパーティションのどのアカウントのルートユーザー、IAM ユーザー、引き受けたロールのセッション、フェデレーティッドユーザーでも、リソースにアクセスできるようになります。
匿名ユーザーの場合、これら 2 つの方法は同等です。詳細については、「IAM ユーザーガイド」の「すべてのプリンシパル」を参照してください。
ワイルドカードとして使用して、プリンシパルの名前または ARN の一部に一致させることはできません。
重要
誰でも AWS アカウント を作成できるため、この 2 つの方法は機能は異なりますが、セキュリティレベルについては同等です。
警告
Simple Storage Service (Amazon S3) バケットへの匿名アクセスを付与するときは注意が必要です。匿名アクセスを付与すると、世界中のすべてのユーザーがバケットにアクセスできます。種類にかかわらず、S3 バケットへの匿名書き込みアクセスは一切付与しないことを強くお勧めします。
リソースのアクセス許可の制限
リソースポリシーを使用して、それ以外の場合は IAM プリンシパルで利用できるリソースへのアクセスを制限することもできます。Deny
ステートメントを使用してアクセスを防止します。
次の例では、安全な転送プロトコルが使用されていない場合はアクセスをブロックします。
{"Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": <bucket ARN>, "Condition": { "Boolean": { "aws:SecureTransport" : "false"} } }
このポリシーでは、この方法を使用して特定のアカウントやプリンシパルのみへのアクセスの拒否を試みるのではなく、"Principal": "*"
を使用して、この制限をすべてのユーザーに適用することがベストプラクティスです。
CloudFront の URL を使用したアクセスの要求
Amazon S3 のコンテンツへのアクセスに、Amazon S3 の URL ではなく、Amazon CloudFront の URL を使用するようにユーザーに求めることができます。これを行うには、CloudFront のオリジンアクセスアイデンティティ (OAI) を作成します。次に、バケットまたはバケット内のオブジェクトのアクセス許可を変更します。Principal
ステートメントで OAI を指定するための形式は、次のようになります。
"Principal":{"CanonicalUser":"
Amazon S3 Canonical User ID assigned to origin access identity
"}
詳細については、Amazon CloudFront デベロッパーガイドのオリジンアクセスアイデンティティを使用して Amazon S3 コンテンツへのアクセスを制限するを参照してください。