🗑️
AWS CDKでGitHub Enterpriseの監査ログをOIDCでS3にストリーミングする方法
はじめに
AWS CDK(TypeScript)でAmazon S3 へのストリーミングの設定をする方法です。
この記事ではAWSのシークレットを管理することを避けるため、OpenID Connect (OIDC) を使用してGitHubからAWSに監査ログを送信しています。
公式のOpenID Connect を使用して S3 へのストリーミングを設定するの手順に沿って実装しているので、そちらも併せて確認ください。
CDKでいろいろを作成する
OpenID Connect を使用して S3 へのストリーミングを設定するの1
~4
の手順をCDKで実現しています。
export class GitHubAuditLogsStack extends Stack {
constructor(scope: Construct, id: string, props?: StackProps) {
super(scope, id, props);
// 1. GitHubのOIDCプロバイダーを IAM に追加します。
const oidcProvider = new iam.OpenIdConnectProvider(
this,
"GitHubOidcProvider",
{
// プロバイダーの URL には、https://oidc-configuration.audit-log.githubusercontent.com を使います。
url: "https://oidc-configuration.audit-log.githubusercontent.com",
// [対象者] には、sts.amazonaws.com を使います。
clientIds: ["sts.amazonaws.com"],
},
);
// 2. バケットを作成し、バケットへのパブリック アクセスをブロックします。
const bucket = new s3.Bucket(
this,
"GitHubAuditLogs",
{
// FIXME: <EXAMPLE-BUCKET> を自分のバケットの名前に変える。
bucketName: "<EXAMPLE-BUCKET>",
blockPublicAccess: s3.BlockPublicAccess.BLOCK_ALL,
}
);
// 3. GitHubがバケットに書き込まれることを許可するポリシーを作成します。
const policy = new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
resources: [`arn:aws:s3:::${bucket.bucketName}/*`],
// GitHubでは、このアクセス許可のみが必要になります。
actions: ["s3:PutObject"],
});
// 4. GitHubIdPのロールと信頼ポリシーを構成します。
const role = new iam.Role(
this,
"GithubAuditLogStreamRole",
{
roleName: "github-audit-log-stream-role",
assumedBy: new iam.FederatedPrincipal(
oidcProvider.openIdConnectProviderArn,
{
// 信頼関係を編集して、`sub`フィールドを検証条件に追加し、<ENTERPRISE>を自分のEnterpriseの名前に置き換えます。
StringEquals: {
"oidc-configuration.audit-log.githubusercontent.com:aud":
"sts.amazonaws.com",
"oidc-configuration.audit-log.githubusercontent.com:sub":
"https://github.com/<ENTERPRISE>", // FIXME: 自分のEnterpriseの名前に置き換える
},
},
"sts:AssumeRoleWithWebIdentity",
),
});
// 上で作成したアクセス許可ポリシーを追加して、バケットへの書き込みを許可します。
role.addToPolicy(policy);
}
}
GitHub EnterpriseとS3を連携する
CDKでリソースをデプロイできたら、あとは公式のOpenID Connect を使用して S3 へのストリーミングを設定するの5
~14
を手順に沿ってCDKで作成したバケット名とロール名(この例だとgithub-audit-log-stream-role
)を入力すれば設定完了です。
- GitHub.com の右上の自分のプロファイル写真をクリックし、 [自分の Enterprise] をクリックします。
- Enterpriseのリストで、表示したいEnterpriseをクリックしてください。
- Enterprise アカウントのサイドバーで、 [設定] をクリックします。
- [設定] で、 [監査ログ] をクリックします。
- Audit log(監査ログ)のLog streaming(ログストリーミング) をクリックします。
- [ストリームの構成] ドロップダウン メニューを選び、 [Amazon S3] をクリックします。
- [認証] の [OpenID Connect] をクリックします。
- ストリームの設定を構成します。
- [バケット] に、ストリーミング先のバケットの名前を入力します。 たとえば、auditlog-streaming-test のようにします。
- [ARN ロール] に、前に記録した ARN ロールを入力します。 たとえば、arn:aws::iam::1234567890:role/github-audit-log-streaming-role のようにします。
- GitHub で Amazon S3 エンドポイントに接続して書き込めることを確認するには、Check endpoint (エンドポイントのチェック) をクリックします。
- エンドポイントを正常に確認したら、 [保存] をクリックします。
Discussion